Как найти первый L2-блок эпохи L1 origin в OP Stack
Несколько блоков OP могут относиться к одному L1 origin. Счётчик в предустановленном контракте L1Block показывает положение L2-блока внутри эпохи.
Прочтите sequenceNumber на выбранной высоте L2
Выполните команду Foundry cast на доступной исторической высоте. Чтобы зафиксировать источник L1, прочитайте также number() и hash() того же контракта на той же высоте. В первом блоке новой эпохи счётчик сбрасывается в ноль.
cast call 0x4200000000000000000000000000000000000015 \
"sequenceNumber()(uint64)" --block "$L2_HEIGHT" --rpc-url "$L2_RPC"
Если на L2-высоте 10 004 счётчик равен 4, предполагаемая начальная высота эпохи — 10 000. Проверьте там нулевой счётчик и тот же хеш L1 origin. Это исключает подмену высоты L2 номером L1.
Уточните доступность исторического контекста
Для исторического eth_call нужно состояние L2 на выбранном блоке. Сервер, хранящий только заголовки, может его не вернуть. При восстановлении значения из транзакций блока учитывайте смену формата атрибутов при обновлениях. specs.optimism.io OP Stack specification