Как проверить подпись сообщения у контрактного кошелька Ethereum

Владелец контрактного кошелька может смениться, а политика авторизации может требовать нескольких подписей. Узнайте у самого кошелька, принимает ли он подпись конкретного дайджеста.

Сверьте контрольное значение

Закодируйте isValidSignature(bytes32,bytes) с ожидаемым приложением дайджестом и полученными байтами подписи. Отправьте eth_call на адрес кошелька и декодируйте ответ по ABI как bytes4.

isValidSignature(digest, signature) → 0x1626ba7e

Значение 0x1626ba7e подтверждает принятие подписи. Другой ответ или исключение не подтверждают авторизацию. Восстановление одного EOA-адреса по подписи не воспроизводит правила контрактного кошелька.

Зафиксируйте момент проверки

Проверяйте состояние на нужном блоке и сохраняйте его хеш. После смены подписанта прежняя подпись может больше не проходить; возможны и ограничения по времени. Для ретроспективной проверки понадобится доступ к состоянию выбранного блока. eips.ethereum.org EIP-1271