Как проверить значение слота Ethereum по доверенному корню состояния

Доказательство для слота позволяет независимо проверить ответ RPC. Проверка состоит из двух этапов, поскольку у каждого аккаунта собственное дерево хранилища.

Сначала проверьте аккаунт, затем слот

Возьмите доверенный заголовок блока и корень состояния. Запросите eth_getProof для контракта, 32-байтового ключа слота и номера этого блока. Проверяющей библиотекой для Ethereum Merkle Patricia trie проверьте путь аккаунта по Keccak-256 от байтов адреса.

trusted stateRoot → verified account → storageRoot → verified slot

Декодируйте доказанную запись аккаунта и извлеките корень его хранилища. Относительно него проверьте путь по хешу 32-байтового ключа слота и декодируйте доказанное значение. Сравнивайте его с отдельно переданным значением только после проверки обоих путей.

Проверьте отсутствие и расхождение блока

Добавьте тест для заведомо пустого слота: корректное доказательство отсутствия подтверждает нулевое значение без листа со значением. При подстановке чужого корня проверка должна провалиться, если изменился путь аутентификации. Заголовок, полученный только от того же недоверенного RPC, не создаёт независимой точки доверия. eips.ethereum.org eth_getProof / EIP-1186