Repository navigation
v29.0.0
Important
Sepolia operators should run this release before Glamsterdam activates on Sepolia at 1791294816 (2026-10-06 13:53:36 UTC) — including those who already upgraded to v28.0.0 for the fork. It hardens how a node serves block access lists to peers, which every Sepolia node starts doing at the fork. Mainnet and Hoodi have no Glamsterdam time scheduled and are not affected by the deadline.
Warning
The stateless input format changed: sender public keys are no longer part of it, following the execution-specs change, and the stateless-validator guests move to ERE v0.18.1. Anything that produces or consumes ethrex's stateless input — external provers, zkEVM integrations — must move to this release together. Node operators who do not use the stateless input are unaffected.
Note
What's new
- Block access list hardening: serving block access lists to peers is now bounded in work and memory, and counts toward the per-peer rate limit; responses to requests a connection never sent are dropped before they are decoded; and a block whose access list exceeds the EIP-7928 item cap is rejected without first processing that list.
- Sync: snap sync pivots onto the forkchoice head instead of a guessed block number, and a canonical block is never marked bad because re-executing it failed.
- Engine API and RPC: new
engine_newPayloadWithWitnessV4; the raw transaction getters return the EIP-2718 envelope. - Stateless validation: stateless-validator guests upgraded to ERE v0.18.1, with the stateless input following the current specification.
- Performance: the bytecode cache budget rises from 256 MiB to 2 GiB, with random eviction and per-entry overhead accounting. It is a ceiling — the cache only grows with code that blocks actually load — and
--code-cache-size(ETHREX_CODE_CACHE_SIZE) lowers it on memory-constrained hosts. Block access list accounts are warmed in chunks, and mempool prewarming stops filling a slot once it reaches the code cache's budget.
No resync is needed.
Installation and running instructions can be found in our docs
✨ New Features
7c58ce8- l1: add engine_newPayloadWithWitnessV4 (PR #7286 by @ilitteri)b8f5885- l1: upgrade stateless-validator guests to ERE v0.18.1 (PR #7348 by @ilitteri)c292ba9- l1: print a Glamsterdam banner after the first Amsterdam block (PR #7341 by @ilitteri)
🐛 Bug Fixes
8f0d260- l1: keep the multisync monitor alive when a node answers only one diagnostics RPC (PR #7345 by @ilitteri)a4e2226- l1: end a mempool prewarm slot once it holds the code cache's budget of bytecode (PR #7356 by @ilitteri)2477c96- l1: bound the work and memory of serving block access lists to peers (PR #7352 by @ilitteri)de082c8- l1,l2: bump zkevm tests to v21.0.1 and drop sender public keys from the stateless input (PR #7347 by @ilitteri)214f1e7- l1: snap sync pivots onto the forkchoice head, not a guessed number (PR #7364 by @qu0b)7f251fc- l1: drop responses to requests a connection never sent before decoding them (PR #7358 by @ilitteri)a534de6- l1: return the EIP-2718 envelope from the raw transaction getters (PR #7327 by @ilitteri)5869102- l1: charge each bytecode cache entry its fixed overhead (PR #7362 by @ilitteri)5ea41fd- l1: never mark a canonical block bad because re-executing it failed (PR #7334 by @ilitteri)41f5002- l1: run a block whose BAL is over the EIP-7928 item cap on the sequential path (PR #7357 by @ilitteri)208aba0- l1: keepglobal_asm!blocks from leaking their section state (commit by @MegaRedHand)33c8518- l1: verify eth/71 block access lists against their headers in full sync (PR #7370)