Как проверить подпись сообщения у контрактного кошелька Ethereum
Владелец контрактного кошелька может смениться, а политика авторизации может требовать нескольких подписей. Узнайте у самого кошелька, принимает ли он подпись конкретного дайджеста.
Сверьте контрольное значение
Закодируйте isValidSignature(bytes32,bytes) с ожидаемым приложением дайджестом и полученными байтами подписи. Отправьте eth_call на адрес кошелька и декодируйте ответ по ABI как bytes4.
isValidSignature(digest, signature) → 0x1626ba7e
Значение 0x1626ba7e подтверждает принятие подписи. Другой ответ или исключение не подтверждают авторизацию. Восстановление одного EOA-адреса по подписи не воспроизводит правила контрактного кошелька.
Зафиксируйте момент проверки
Проверяйте состояние на нужном блоке и сохраняйте его хеш. После смены подписанта прежняя подпись может больше не проходить; возможны и ограничения по времени. Для ретроспективной проверки понадобится доступ к состоянию выбранного блока. eips.ethereum.org EIP-1271