-
COOPOS v5.2.0 Stable
released this
2026-05-11 14:13:17 +00:00 | 13 commits to main since this releaseПроверка подписей на уровне смарт-контрактов
Новая функция протокола:
assert_recover_key_accountМы добавили в протокол новую возможность проверки подписей с привязкой к конкретным аккаунтам. Раньше смарт-контракты могли только проверить криптографическую корректность подписи, но не могли убедиться, что использованный ключ действительно принадлежит заявленному аккаунту, потому как проверка подписи осуществлялась на более глубоких уровнях протокола, и информация о том, какие же ключи и разрешения имеются у аккаунта - отсутствовала на уровнее смарт-контрактов.
Что изменилось
Было: Только проверка что подпись документа технически корректна.
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, так что доступна во всех новых контрактах сразу после обновления.
Downloads