Releases: coopenomics/cdt
Releases · coopenomics/cdt
CDT v4.2.0
Новая функция: assert_recover_key_account
Мы добавили в CDT новую возможность проверки подписей с привязкой к конкретным аккаунтам. Теперь смарт-контракты могут не только проверить криптографическую корректность подписи, но и убедиться, что использованный ключ действительно принадлежит заявленному аккаунту.
Что изменилось
Было: Только проверка что подпись технически корректна
assert_recover_key(digest, signature, pubkey); // Только криптографияСтало: Проверка что подпись корректна И ключ принадлежит аккаунту с указанным разрешением
assert_recover_key_account(digest, signature, pubkey, account, permission);Как это работает
Функция выполняет три проверки последовательно:
- Криптографическая валидация - подпись корректна для данного хэша
- Совпадение ключа - восстановленный из подписи ключ совпадает с ожидаемым
- Принадлежность аккаунту - этот ключ находится в разрешениях указанного аккаунта
Если хотя бы одна проверка проваливается - контракт выбрасывает ошибку.
Пример использования
// Контракт для подписания документов
class [[eosio::contract]] document_contract : public eosio::contract {
public:
[[eosio::action]]
void sign_document(name username, checksum256 doc_hash, signature sig, public_key pubkey) {
// Проверяем что подпись от активного ключа пользователя username
eosio::assert_recover_key_account(doc_hash, sig, pubkey, username, "active"_n);
}
};Функция интегрирована в CDT, так что доступна во всех новых контрактах сразу после обновления инструментария.