Skip to content

Releases: coopenomics/cdt

CDT v4.2.0

23 Oct 13:27

Choose a tag to compare

Новая функция: 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, так что доступна во всех новых контрактах сразу после обновления инструментария.