Skip to content

Fix EIP-8282 builder contract resolution from eth_config#798

Merged
pk910 merged 2 commits into
masterfrom
pk910/fix-builder-deposit-indexing
Jul 16, 2026
Merged

Fix EIP-8282 builder contract resolution from eth_config#798
pk910 merged 2 commits into
masterfrom
pk910/fix-builder-deposit-indexing

Conversation

@pk910

@pk910 pk910 commented Jul 16, 2026

Copy link
Copy Markdown
Member

Fix EIP-8282 builder contract resolution from eth_config

Problem

Builder deposit/exit transactions were not being indexed (empty builder_deposit_request_txs / builder_exit_request_txs tables, empty tx hashes on /builders/deposits), even though the EL clients supply the correct contract addresses via eth_config.

Two issues caused this:

  1. Wrong systemContracts lookup keys: dora looked up the builder contracts under BUILDER_DEPOSIT_REQUEST_PREDEPLOY_ADDRESS / BUILDER_EXIT_REQUEST_PREDEPLOY_ADDRESS, but EL clients report them as BUILDER_DEPOSIT_CONTRACT_ADDRESS / BUILDER_EXIT_CONTRACT_ADDRESS. The lookup never matched, so dora always fell back to the hardcoded default addresses — which were outdated EIP-8282 draft addresses. The contract indexers scanned a contract with no logs and found nothing.

  2. Contract address captured once at startup: the system contract indexers resolved the contract address a single time at construction and baked it into the indexer options. If the indexers started before any client delivered its eth_config (a startup race), or the address changed at a fork boundary, the indexer kept scanning the stale address forever.

Changes

  • clients/execution/rpc/ethconfig.go: rename the builder contract systemContracts keys to BUILDER_DEPOSIT_CONTRACT_ADDRESS / BUILDER_EXIT_CONTRACT_ADDRESS, matching what EL clients report.
  • clients/execution/chainstate.go: update DefaultSystemContractAddresses to the current EIP-8282 addresses (0x0000bFF46984e3725691FA540a8C7589300D8282 for deposits, 0x000064D678505ad48F8cCb093BC65613800E8282 for exits).
  • indexer/execution/system_contracts/contract_indexer.go: contractIndexerOptions.contractAddress is now a func() common.Address resolver, evaluated on every log scan (finalized and recent), so late-arriving client configs and fork-boundary address changes are picked up.
  • All five system contract indexers (builder deposit, builder exit, withdrawal, consolidation, deposit) pass resolver closures accordingly.

Deployment note

On instances that already ran with the wrong address, the contract indexer state has advanced past the affected blocks. To backfill missed builder deposits/exits, reset the indexer.builderdepositindexer, indexer.builderdepositmatcher, indexer.builderexitindexer and indexer.builderexitmatcher rows in explorer_state so the indexers re-crawl from the Gloas deploy block.

@pk910
pk910 enabled auto-merge July 16, 2026 10:33
@pk910
pk910 merged commit a448108 into master Jul 16, 2026
5 checks passed
@pk910
pk910 deleted the pk910/fix-builder-deposit-indexing branch July 16, 2026 10:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants