• v4.2.0 4d324084e8

    CDT v4.2.0 Stable

    dacom-dark-sun released this 2025-10-15 16:50:04 +00:00 | 432 commits to main since this release

    Новая функция: assert_recover_key_account

    Мы добавили в CDT новую возможность проверки подписей с привязкой к конкретным аккаунтам. Теперь смарт-контракты могут не только проверить криптографическую корректность подписи, но и убедиться, что использованный ключ действительно принадлежит заявленному аккаунту.

    Что изменилось

    Было: Только проверка что подпись технически корректна

    assert_recover_key(digest, signature, pubkey); // Только криптография
    

    Стало: Проверка что подпись корректна И ключ принадлежит аккаунту с указанным разрешением

    assert_recover_key_account(digest, signature, pubkey, account, permission);
    

    Как это работает

    Функция выполняет три проверки последовательно:

    1. Криптографическая валидация - подпись корректна для данного хэша
    2. Совпадение ключа - восстановленный из подписи ключ совпадает с ожидаемым
    3. Принадлежность аккаунту - этот ключ находится в разрешениях указанного аккаунта

    Если хотя бы одна проверка проваливается - контракт выбрасывает ошибку.

    Пример использования

    // Контракт для подписания документов
    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