Important
Sepolia operators must upgrade before Glamsterdam activates on Sepolia at 1791294816 (2026-10-06 13:53:36 UTC, epoch 353024). This release schedules the fork and carries the consensus fixes a node needs to follow Sepolia past it; an earlier version will not follow the fork. Mainnet and Hoodi have no Glamsterdam time scheduled yet and are not affected by this deadline.
Note
What's new
- Glamsterdam scheduled on Sepolia: the fork time ships in the bundled network config, so no configuration change is needed — only the upgrade.
- Glamsterdam consensus fixes: block access lists are now validated in the pre-block system calls and the post-block withdrawal/request phase, not only during transactions; withdrawals are applied before the request system calls when indexing access lists; access-list code changes above the maximum code size are rejected before execution; parallel block execution enforces the block gas limit; and total transaction gas is capped per EIP-8037. Together these align ethrex with the Glamsterdam specification on blocks it previously accepted.
- Snap sync: BAL-based state healing (EIP-8189, snap/2), and storage ranges keep downloading when the pending set is too large to heal rather than stalling on it.
- Engine API and RPC:
engine_getBlobsV4returns compact cell matrices;eth_estimateGasandeth_createAccessListaccept a block hash;callTracerreports correct log indices underonlyTopCalland indebug_traceCall. - Performance: less redundant work around the block pipeline on the Engine API path, no per-payload block copy, single-pass
engine_newPayloadV5deserialization, and faster JUMPDEST analysis. - Fixes: the initcode admission cap is gated on the fork ordinal, imported execution witnesses carry the correct first block number, the fused
JUMPDESTtrace step is emitted when its own gas charge exhausts the frame, and the precompile cache is memory-bounded. - L2: gas estimation for commit transactions no longer fails on some nodes.
No resync is needed.
Installation and running instructions can be found in our docs
🐛 Bug Fixes
5647bf3- l1: enforce block gas limit during parallel block execution (PR #7306 by @ilitteri)9f624cb- l1: bound precompile cache memory (PR #6249 by @ilitteri)07d8cf8- l1: reject BAL code changes above the maximum code size before execution (PR #7309 by @ilitteri)da74c87- l1: apply withdrawals before the request system calls when indexing block access lists (PR #7316 by @ilitteri)fb10af7- l1: fix callTracer log index under onlyTopCall and in debug_traceCall (PR #7294 by @MysticRyuujin)352df46- l1: accept a block hash in eth_estimateGas and eth_createAccessList (PR #7321 by @MysticRyuujin)aec8a77- l1,levm: bump ef-test fixtures to tests@v21.0.0 and cap total transaction gas per EIP-8037 (PR #7320 by @ilitteri)d7cffc1- l1: keep downloading storage ranges when the pending set is too large to heal (PR #7272 by @MegaRedHand)
⚡ Performance Improvements
39497ec- l1: stop copying the stateless input one byte at a time (PR #7277 by @jotabulacios)4f257f9- l1: stop redoing work around the block pipeline on the engine path (PR #7300 by @ilitteri)c802f28- l1: run JUMPDEST analysis on 64-byte blocks (PR #7311 by @MegaRedHand)1cbd2be- l1: stop cloning every payload's block in case it is invalid (PR #7302 by @ilitteri)66cb0cc- l1: deserialize engine_newPayloadV5 params in a single pass (PR #7301 by @ilitteri)