Как проверить, отдаёт ли Ethereum-нода баланс на старом блоке

Нода может вернуть старый блок, даже если уже удалила состояние счетов на этой высоте. Перед переносом архивной нагрузки проверьте тот запрос, который выполняет приложение.

Сделайте два запроса на одной высоте

На Ethereum mainnet эти запросы получают блок 10 000 000 и баланс нулевого адреса на момент завершения этого блока. Отправьте каждый JSON отдельно методом POST на ваш HTTP RPC с заголовком Content-Type: application/json.

{"jsonrpc":"2.0","id":1,"method":"eth_getBlockByNumber","params":["0x989680",false]}
{"jsonrpc":"2.0","id":2,"method":"eth_getBalance","params":["0x0000000000000000000000000000000000000000","0x989680"]}

Сопоставьте ответы

Сохраните хеш блока из первого ответа. Шестнадцатеричное число во втором ответе — баланс в wei, в том числе допустимое значение 0x0. Если блок найден, а запрос баланса сообщает о недоступном состоянии, повторите запрос баланса с latest. Успешный ответ сузит поиск причины до исторического запроса. Сохраните полный текст ошибки: запрос мог отклонить и сам RPC-шлюз.

Проверьте глубину, нужную приложению

Один успешный ответ проверяет конкретный адрес и высоту. Повторите запрос для самого старого блока отчётного периода и счёта с независимо известным балансом. Если приложению нужны доказательства состояния, проверьте их отдельно. Geth может хранить историю балансов, даже когда исторические узлы дерева, нужные для доказательств, уже недоступны. geth.ethereum.org Архивное хранение в Geth