Skip to content

Add Glamsterdam support to hivechain - #1589

Merged
lightclient merged 11 commits into
ethereum:masterfrom
MysticRyuujin:glamsterdam-hivechain-prereqs
Aug 24, 2026
Merged

lightclient merged 11 commits into
ethereum:masterfrom
MysticRyuujin:glamsterdam-hivechain-prereqs

Conversation

@MysticRyuujin

@MysticRyuujin MysticRyuujin commented Jul 27, 2026 •

Copy link
Copy Markdown
Contributor

Adds the hive prerequisites to test Glamsterdam in execution-apis. This is an integration branch for ethereum/execution-apis#851. It can be rebased as the dependent PRs land.

The tracer-aware schema selection in rpc-compat is removed from this branch. It stays in #1588 as a separate change.

What it contains

  • Amsterdam fork scheduling and hivechain block generation, built on geth glamsterdam-devnet-8.
  • Engine API output for Amsterdam: engine_newPayloadV5 with block access lists and slot numbers, engine_forkchoiceUpdatedV4 with three parameters, hex-encoded execution requests, and EIP-8282 builder deposit and exit transactions.
  • A bal output that dumps each Amsterdam block's access list. Each dump carries the header hash and the hash of the assembled list, and the dump also runs when import fails. That made the fork-boundary mismatch below diagnosable.
  • A mapper fix in all six clients: declare BPO blob schedules only for scheduled forks. The mappers emitted bpo1 to bpo5 blob schedules unconditionally, with hardcoded fallback values. On a chain that ends at Amsterdam, geth resolved the active blob schedule to the phantom bpo5 entry, so eth_config reported blob parameters that did not match the chain.
  • The EIP-7997 deterministic factory contract in genesis. Devnet-7 geth inserted the contract at the start of the first Amsterdam block when it was absent from state. No other client does this, so the activation block's access list and state root diverged. Seeding the contract in genesis matches how the devnets place it. Thanks to @marioevz for the diagnosis and the fix.

Dependencies

go.mod pins go-ethereum at aa1f2fcf, the tip of glamsterdam-devnet-8. The published ethpandaops/geth:glamsterdam-devnet-8 image is built from the same commit, so the fixture generator and the client under test agree. The branch includes current ethereum/hive master.

Testing (2026-08-20)

  • The hive Go test suite passes. It now covers Amsterdam chain generation, the fork-boundary block, and the Engine API outputs.
  • The Amsterdam chain regenerates byte-identical after the geth bump, so the existing fixtures stay valid.
  • rpc-compat against 252 fixtures generated from this branch's hivechain (-lastfork amsterdam -length 60, Amsterdam at block 57), with all six clients on their glamsterdam-devnet-8 images:
Client Passed
go-ethereum 252/252
Nethermind 187/252
Erigon 184/252
Besu 176/252
reth 170/252
ethrex 46/252

Known issues

  • Most divergences, 56 to 64 per running client, are in the block-identity fields of eth_simulateV1 responses: hash, stateRoot, parentHash, blockAccessListHash, size. The running clients produce different blockAccessListHash values from each other and from geth for the same simulated block. Nothing pins down the access list of a simulated block. This is an execution-apis question, not a defect in one client.
  • ethrex import stops at block 1 with Base fee per gas is incorrect. This is its known pre-merge chain limitation, separate from the fixed V4 parameter handling in engine_forkchoiceUpdatedV4 rejects the spec's third parameter (custodyColumns) lambdaclass/ethrex#7074.
  • speccheck reports one pre-existing failure: eth_simulateV1/ethSimulate-two-blocks-with-complete-eth-sends carries {"code": -32015, "message": "out of gas"}, and the spec requires a -32015 message to match ^vm execution error.*. This is a spec-versus-geth question to raise in execution-apis.

lightclient and others added 2 commits August 24, 2026 12:02
The calltree contract and tx mods landed upstream in ethereum#1587 (with
mod_calltree renamed to mod_tracetest); keep only the test that guards
the coupling between the callee address constants in genesis.go and the
addresses compiled into bytecode/calltree.bin.
…conly tests

Validate speconly debug_trace* responses against the anyOf branch
matching the tracer the test requested. The whole-schema validation was
vacuous: the unconstrained named-tracer branch accepts any value. A
known tracer with no matching branch is an error, not a fallback.
Comment thread simulators/ethereum/rpc-compat/schema.go
@MysticRyuujin
MysticRyuujin marked this pull request as ready for review August 24, 2026 19:17
@MysticRyuujin MysticRyuujin changed the title draft: add Glamsterdam hivechain and RPC compatibility prerequisites Add Glamsterdam support to hivechain Aug 24, 2026
@MysticRyuujin

Copy link
Copy Markdown
Contributor Author

Someone from geth maybe chime in but I think this can be updated to point back to main?

MysticRyuujin and others added 9 commits August 24, 2026 16:58
The bpo1-bpo5 blobSchedule entries were emitted unconditionally with
hardcoded fallback values, while the matching bpoNTime fields are dropped
by remove_empty when their HIVE_BPON_TIMESTAMP is unset. On a chain whose
last fork is Amsterdam, geth then resolved the active fork's blob schedule
to the phantom bpo5 entry (target 9, max 14) rather than bpo2 (target 14,
max 21), so eth_config reported blob parameters that did not match the
chain and the rpc-compat eth_config test failed.

Gate each entry on its HIVE_BPON_TIMESTAMP so an unscheduled BPO is
omitted from the generated genesis entirely.
The expanded output list was unconditionally overwritten by
splitAndTrim("all") right below, so -outputs all failed with an
unknown output name ever since the flag was introduced in ethereum#909.
@lightclient
lightclient force-pushed the glamsterdam-hivechain-prereqs branch from 19e506f to 1c5b5b8 Compare August 24, 2026 23:38

@lightclient lightclient left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM!

@lightclient
lightclient merged commit eba6dd5 into ethereum:master Aug 24, 2026
6 checks passed
@fjl

fjl commented Sep 19, 2026

Copy link
Copy Markdown
Collaborator

The description of this PR says the tracer-schema related changes are included in this, but they actually are: https://github.com/ethereum/hive/pull/1589/changes#diff-e0a6b2c60f85be691cd18bc590404e13214dde4e8f8a7819a4bb404f1b20cfcaR14

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.

4 participants