Как выбрать финализированный блок Ethereum для отчёта

Пока строится отчёт, вершина цепочки может измениться. Зафиксируйте финализированный блок и сохраните его реквизиты вместе с результатом, чтобы коллеги смогли воспроизвести расчёт.

Получите границу отчёта

Отправьте следующий POST-запрос на execution RPC основной сети Ethereum. Второй параметр запрашивает хеши транзакций и уменьшает ответ по сравнению с загрузкой полных данных каждой транзакции.

{"jsonrpc":"2.0","id":1,"method":"eth_getBlockByNumber","params":["finalized",false]}

Сохраните number, hash и timestamp из result, а также идентификатор сети. В поле timestamp записано время самого блока. Если в отчёте нужно указать момент сбора данных, сохраните время выполнения запроса отдельно.

Передавайте сохранённый номер во все запросы

Например, если отчёт заканчивается на условной высоте 0x1200010, укажите её в верхней границе диапазона событий и в запросах состояния счетов. При повторном обращении к тегу finalized нода может вернуть уже следующий финализированный блок. Если воспроизводите отчёт через другой RPC, сначала сверьте хеш на сохранённой высоте.

Что делать, если граница перестала двигаться

Если финализация остановилась, доступный RPC может долго возвращать один и тот же блок. Покажите возраст блока и по правилам отчётности либо используйте эту границу, либо отложите выгрузку. Если RPC возвращает ошибку неподдерживаемого тега, сохраните её. Автоматическая подстановка latest меняет смысл отчёта. ethereum.org Финализация в Ethereum