You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Tracking issue for aligning ethrex's glamsterdam-devnet-6 branch with the glamsterdam-devnet@v6.0.0 release. Spec baseline: integration on EELS forks/amsterdam (branch devnets/glamsterdam/6 not yet created), fixture release tests-glamsterdam-devnet@v6.0.0 (target 2026-06-22, not yet cut). Upstream tracker: execution-specs#2915.
First glamsterdam-prefixed devnet. The preceding bal-devnet-7 alignment (state-gas reservoir + BAL baseline, items 1-10) is complete and merged to main — see the history of this issue; that work is the baseline glam-6 builds on and is not re-listed here.
Status — 🟢 EL delta implemented; aligned with upstream merges (2026-06-18)
Implemented + pushed to glamsterdam-devnet-6:
EIP-8282 builder requests EL wiring; addresses swapped to sys-asm#43 vanity (808b13f4c)
2026-06-19: verified every EL PR in the devnet-6 spec sheet against GitHub. All merged ones confirmed merged; ethrex alignment unchanged. Two movements since 06-18, neither needs ethrex code: EIP-8282 left draft (EIPs #11760 open, EELS #2990 non-draft and mergeable, now with contract bins + tests) but #2990 still uses placeholder addresses 0x7732/0x7733, so the 8282 ef-test mismatch caveat below still holds until it adopts the vanity addresses. EELS #2900 (7702 delegate warming) is still open as a draft, not yet closed; ethrex matches the default so no action.
#
EIP
Title
ethrex status
Notes / action
1
EIP-8246
Remove SELFDESTRUCT burn
🟢 done
On glamsterdam-devnet-6: balance preserved on destruction, no burn log, EIP-6780 pre-Amsterdam path unchanged. Audit vs 8246 fixtures when v6.0.0 drops.
2
EIP-7610
Revert creation for non-empty storage
🟢 done (audit)
crates/vm/levm/src/account.rscreate_would_collide() checks has_code() || has_nonce() || has_storage; collision revert in execution_handlers.rs. Audit against the 7610 fixtures when v6.0.0 drops.
Amsterdam-gated repricing in gas_cost.rs: COLD_ACCOUNT/STORAGE 3000, access-list 3000/3000, SSTORE surcharge 10000 / refunds 12480 clear / 9900 restore, CALL value 10300, EXTCODESIZE/COPY +WARM_ACCESS, SELFDESTRUCT +ACCOUNT_WRITE(8000). All constants confirmed match merged #11802. The warm-first-change 10000-vs-10100 question resolved — ethrex follows the executable EELS spec (10000); the EIP prose table's 10100 is a text-vs-impl discrepancy.
5
EIP-7928
BAL (storage change-set + EIP-7702 integration)
🟢 baseline done
Recording in crates/vm/levm/src/opcode_handlers/system.rs (record_bal_call_touch), checkpoint/restore in call_frame.rs/utils.rs. The proposed 7702-delegation-BAL-exclusion tightening (EELS #2900) is likely dropped — ethrex already matches the default; no action (see below).
6
EIP-7954
Increase max contract size to 64 KiB
🟢 done
On glamsterdam-devnet-6: AMSTERDAM_MAX_CODE_SIZE = 0x10000 (64 KiB) in crates/vm/levm/src/constants.rs:40 and crates/blockchain/constants.rs:29; initcode derives as 2 * code_size = 0x20000 (128 KiB). All 4 enforcement sites (execution_handlers.rs, system.rs, default_hook.rs, blockchain.rs) reference the constants and are fork-gated. Audit vs 7954 fixtures when v6.0.0 drops.
Resource-based rework: TX_BASE_COST_AMSTERDAM=12000, TX_VALUE_COST=4244, TRANSFER_LOG_COST=1756, COLD_ACCOUNT_ACCESS=3000/CREATE_ACCESS=11000, NEW_ACCOUNT×CPSB=183600. Decomposition in get_intrinsic_gas/intrinsic_gas_dimensions + top-level post-7702 charges in default_hook.rs; calldata-floor base kept at 21000; self-transfer no-op. All constants + rules confirmed match merged #11645 (numbers kept). 9 tests + parity guard.
8
EIP-7997
Deterministic Factory Predeploy
🟢 done
Factory 0x4e59…4956c is present in fixtures/genesis/l1-bal.json with the exact EIP-7997 runtime code; nonce aligned 0x0→0x1 per spec ("MUST include FACTORY_ADDRESS with nonce 1"). No client code needed (genesis-state requirement, no system call). Upstream spec done (#2802, EIPs#11783). Note: l1.json/load-test.json still carry the factory at nonce 0 (not Amsterdam-scheduled; out of glam-6 scope).
9
EIP-8070
Sparse blob pool (eth/72)
🔵 implemented off-branch
Full impl on feat/l1-eip8070 (eth/72 wire, provider/sampler blobpool behind CLI flag default-off, forkchoiceUpdatedV4 custodyColumns, engine_getBlobsV4). Action: decide inclusion in glam-6; rebase/merge onto glamsterdam-devnet-6. Infra-only — gated and inert by default. Upstream optional (specs/tests PR #2948).
10
EIP-8282
Builder execution requests
🟢 EL wiring + addresses done
Builder deposit (0x03) / exit (0x04) request types; two Amsterdam predeploys + end-of-block system calls in extract_all_requests_levm; empty/reverting predeploy ⇒ block invalid; 12 tests. Addresses swapped to sys-asm#43 Nick's-method vanity (0x…884d…8282 deposit / 0x…14574A…8282 exit, 808b13f4c) matching genesis-gen #297 + the devnet spec sheet. ⚠️ Still pending sys-asm#43 merge: address freeze + genesis alloc bytecode (Phase 3 deferred). EELS #2990 still uses placeholder 7732/7733 → 8282 ef-tests mismatch until finalized. EIPs #11760.
EELS integration branch devnets/glamsterdam/6 not yet created (built from forks/amsterdam once per-EIP eips/amsterdam/eip-xxxx branches merge). Per-EIP working branches exist to reference in advance: eips/amsterdam/eip-2780, eip-7954, eip-7997, eip-7928, eip-7708, eip-7778, eip-7843, eip-7904, eip-7976, eip-7981, eip-8037, eip-8038.
No tests-glamsterdam-devnet@v6.0.0 fixture release yet (test-release target 2026-06-22, devnet launch TBD). EIP-7904 will likely be dropped (excluded upstream). Upstream tracker execution-specs#2915 open.
ethrex fixture pin has been moved to tests-glamsterdam-devnet@v6.0.0 (pre-emptively, before the release is cut) — all three .fixtures_url_amsterdam + hive config + Makefile branch. Until v6.0.0 is published (target 06-22) the fixtures 404; the asset name + eels_commit need verifying on release.
Known/accepted: the EIP-8282 EL wiring uses faithful semantics (a missing builder predeploy invalidates an Amsterdam block), and 8038/2780 reprice Amsterdam gas against preliminary numbers. Amsterdam ef-tests will fail on this branch until v6.0.0 fixtures (with the builder predeploys + final gas numbers) are downloadable — intentional, no presence-gate/inert-mode workaround was added.
EIP-7928 7702-delegation BAL change (EELS #2900) is still open (draft) as of 06-19, expected to close keeping the default. Author keeping the default; reviewers flagged it breaks "BAL ⊆ access list". ethrex matches the default (warm + record both call target and 7702 delegate) → no action.
Engine API / execution-apis
engine_forkchoiceUpdatedV4targetGasLimit (execution-apis#796, consensus-specs#5235) — 🟢 done 40c11957e (landed for glamsterdam-devnet-4). PayloadAttributesV4.target_gas_limit is now the authoritative per-block gas target; validate_attributes_v4 strictly rejects FCUv4 omitting it; build_payload_v4 feeds it to gas_ceil. V1-V3 and non-engine callers keep --builder.gas-limit. Carried forward unchanged on glamsterdam-devnet-6.
All three .fixtures_url_amsterdam (blockchain/engine/state) → tests-glamsterdam-devnet@v6.0.0; MakefileAMSTERDAM_FIXTURES_BRANCH → devnets/glamsterdam/6; hive amsterdam.yaml fixtures + --sim.limit regex extended with 8038|2780|7997|7610|8246|8282.
⚠️v6.0.0 is not cut yet (target 2026-06-22), so downloads 404 until release. The asset filename (fixtures_glamsterdam-devnet.tar.gz) and the hive eels_commit are best-guess/stale — verify both when the release + devnets/glamsterdam/6 branch land, then re-run the ef-test + hive suites.
Per-EIP work
EIP-7954 — ✅ done; audit vs 7954 fixtures when v6.0.0 drops.
EIP-7997 — ✅ done; factory present in l1-bal.json with EIP runtime code, nonce aligned to 1.
EIPs#11699 / EELS #2900 — EIP-7702 delegation BAL exclusion on call failure. Would have reordered the CALL family so the target/delegation code_address is warmed + added to the BAL only after depth/balance preconditions pass. PR sentiment is against it: author (nerolation) — "it looks like we won't go for this change anyway… I'll let clients take the shot on this with the default — closing this PR"; reviewers flagged it breaks the "BAL ⊆ access list" assumption and the warm-gas-before-balance-check rule. The default (no reorder) stays, and ethrex already matches it. No code change. Monitor fix(levm): fix precompiles problem with eip7702 #2900 / the ACDE-18 outcome only; act only if it unexpectedly revives.
The pin is at tests-bal@v7.3.2 (#6842), so these v7.3.x test/coverage additions (over existing impls, no new glam-6 EIP) are now in the active fixture set — confirm they pass on this branch (and that the CI/hive runs actually exercise them) rather than treating them as future work:
EIP-8037 strict rejects (specs#2898calldata_floor > TX_MAX_GAS_LIMIT, specs#2876gas_limit covers regular but not state intrinsic, specs#2875 CREATE-tx collision refunds state-gas reservoir) — ✅ audited compliant, verify-fixtures-only. POC: Try to integrate builder playground #2876: default_hook.rs:404-410 rejects gas_limit < regular + state. fix(levm): trying out things with eip 7702 #2898: default_hook.rs:458-462 rejects max(regular, calldata_floor) > TX_MAX_GAS_LIMIT (both arms). Sync full Hoodi testnet via import command #2875: collision path execution_handlers.rs:133-146 + refund_senderdefault_hook.rs:265-268 subtracts state_gas_reservoir_initial, so the sender is not charged the reservoir. No code gap; just confirm these fixtures pass on the pin bump.
EIP-7928 extended BAL coverage: withdrawal-predeploy balance read across txs, self-destruct to system address with 0 value.
Tracking issue for aligning ethrex's
glamsterdam-devnet-6branch with theglamsterdam-devnet@v6.0.0release. Spec baseline: integration on EELSforks/amsterdam(branchdevnets/glamsterdam/6not yet created), fixture releasetests-glamsterdam-devnet@v6.0.0(target 2026-06-22, not yet cut). Upstream tracker: execution-specs#2915.First
glamsterdam-prefixed devnet. The precedingbal-devnet-7alignment (state-gas reservoir + BAL baseline, items 1-10) is complete and merged tomain— see the history of this issue; that work is the baseline glam-6 builds on and is not re-listed here.Status — 🟢 EL delta implemented; aligned with upstream merges (2026-06-18)
Implemented + pushed to
glamsterdam-devnet-6:EIP-8282builder requests EL wiring; addresses swapped to sys-asm#43 vanity (808b13f4c)EIP-8037source-based state-gas refunds (dead5fc52) + feat(l1): drop unwraps storage #3002 create-to-existing-target refund (7682525da)EIP-8038 + EIP-2780Amsterdam gas repricing — confirmed aligned with merged numbersEIP-7997factory nonce → 1; fixture/CI pin →tests-glamsterdam-devnet@v6.0.02026-06-18: 8037 (#11807/#2999 + #3002), 2780 (#11645), 8038 (#11802) all merged upstream; ethrex re-audited and aligned (numbers kept unchanged). Remaining: 8070 (merge decision); 8282 genesis
allocbytecode + address freeze pending sys-asm#43; re-run ef-tests/hive on v6.0.0.2026-06-19: verified every EL PR in the devnet-6 spec sheet against GitHub. All merged ones confirmed merged; ethrex alignment unchanged. Two movements since 06-18, neither needs ethrex code: EIP-8282 left draft (EIPs #11760 open, EELS #2990 non-draft and mergeable, now with contract bins + tests) but #2990 still uses placeholder addresses
0x7732/0x7733, so the 8282 ef-test mismatch caveat below still holds until it adopts the vanity addresses. EELS #2900 (7702 delegate warming) is still open as a draft, not yet closed; ethrex matches the default so no action.glamsterdam-devnet-6: balance preserved on destruction, no burn log, EIP-6780 pre-Amsterdam path unchanged. Audit vs 8246 fixtures when v6.0.0 drops.crates/vm/levm/src/account.rscreate_would_collide()checkshas_code() || has_nonce() || has_storage; collision revert inexecution_handlers.rs. Audit against the 7610 fixtures when v6.0.0 drops.vm.rs+ source-based refunds (per-frameframe_state_gas_spilled, LIFOcredit_state_gas_refund,refill_frame_state_gason revert/halt) matching merged EELS #2999; #3002 create-to-existing-target refund (target_alive).dead5fc52/7682525da, 12 unit tests, reviewed.gas_cost.rs: COLD_ACCOUNT/STORAGE 3000, access-list 3000/3000, SSTORE surcharge 10000 / refunds 12480 clear / 9900 restore, CALL value 10300, EXTCODESIZE/COPY +WARM_ACCESS, SELFDESTRUCT +ACCOUNT_WRITE(8000). All constants confirmed match merged #11802. The warm-first-change 10000-vs-10100 question resolved — ethrex follows the executable EELS spec (10000); the EIP prose table's 10100 is a text-vs-impl discrepancy.crates/vm/levm/src/opcode_handlers/system.rs(record_bal_call_touch), checkpoint/restore incall_frame.rs/utils.rs. The proposed 7702-delegation-BAL-exclusion tightening (EELS #2900) is likely dropped — ethrex already matches the default; no action (see below).glamsterdam-devnet-6:AMSTERDAM_MAX_CODE_SIZE = 0x10000(64 KiB) incrates/vm/levm/src/constants.rs:40andcrates/blockchain/constants.rs:29; initcode derives as2 * code_size=0x20000(128 KiB). All 4 enforcement sites (execution_handlers.rs,system.rs,default_hook.rs,blockchain.rs) reference the constants and are fork-gated. Audit vs 7954 fixtures when v6.0.0 drops.TX_BASE_COST_AMSTERDAM=12000,TX_VALUE_COST=4244,TRANSFER_LOG_COST=1756,COLD_ACCOUNT_ACCESS=3000/CREATE_ACCESS=11000,NEW_ACCOUNT×CPSB=183600. Decomposition inget_intrinsic_gas/intrinsic_gas_dimensions+ top-level post-7702 charges indefault_hook.rs; calldata-floor base kept at 21000; self-transfer no-op. All constants + rules confirmed match merged #11645 (numbers kept). 9 tests + parity guard.0x4e59…4956cis present infixtures/genesis/l1-bal.jsonwith the exact EIP-7997 runtime code; nonce aligned0x0→0x1per spec ("MUST include FACTORY_ADDRESS with nonce 1"). No client code needed (genesis-state requirement, no system call). Upstream spec done (#2802, EIPs#11783). Note:l1.json/load-test.jsonstill carry the factory at nonce 0 (not Amsterdam-scheduled; out of glam-6 scope).feat/l1-eip8070(eth/72 wire, provider/sampler blobpool behind CLI flag default-off,forkchoiceUpdatedV4 custodyColumns,engine_getBlobsV4). Action: decide inclusion in glam-6; rebase/merge ontoglamsterdam-devnet-6. Infra-only — gated and inert by default. Upstream optional (specs/tests PR #2948).0x03) / exit (0x04) request types; two Amsterdam predeploys + end-of-block system calls inextract_all_requests_levm; empty/reverting predeploy ⇒ block invalid; 12 tests. Addresses swapped to sys-asm#43 Nick's-method vanity (0x…884d…8282deposit /0x…14574A…8282exit,808b13f4c) matching genesis-gen #297 + the devnet spec sheet.allocbytecode (Phase 3 deferred). EELS #2990 still uses placeholder7732/7733→ 8282 ef-tests mismatch until finalized. EIPs #11760.Upstream status (per #2915, as of 2026-06-18)
devnets/glamsterdam/6not yet created (built fromforks/amsterdamonce per-EIPeips/amsterdam/eip-xxxxbranches merge). Per-EIP working branches exist to reference in advance:eips/amsterdam/eip-2780,eip-7954,eip-7997,eip-7928,eip-7708,eip-7778,eip-7843,eip-7904,eip-7976,eip-7981,eip-8037,eip-8038.tests-glamsterdam-devnet@v6.0.0fixture release yet (test-release target 2026-06-22, devnet launch TBD). EIP-7904 will likely be dropped (excluded upstream). Upstream tracker execution-specs#2915 open.tests-glamsterdam-devnet@v6.0.0(pre-emptively, before the release is cut) — all three.fixtures_url_amsterdam+ hive config + Makefile branch. Until v6.0.0 is published (target 06-22) the fixtures 404; the asset name +eels_commitneed verifying on release.Engine API / execution-apis
engine_forkchoiceUpdatedV4targetGasLimit(execution-apis#796, consensus-specs#5235) — 🟢 done40c11957e(landed for glamsterdam-devnet-4).PayloadAttributesV4.target_gas_limitis now the authoritative per-block gas target;validate_attributes_v4strictly rejects FCUv4 omitting it;build_payload_v4feeds it togas_ceil. V1-V3 and non-engine callers keep--builder.gas-limit. Carried forward unchanged onglamsterdam-devnet-6.TODO
Fixture / branch pin bump — ✅ done (committed, pre-emptive)
.fixtures_url_amsterdam(blockchain/engine/state) →tests-glamsterdam-devnet@v6.0.0;MakefileAMSTERDAM_FIXTURES_BRANCH→devnets/glamsterdam/6; hiveamsterdam.yamlfixtures +--sim.limitregex extended with8038|2780|7997|7610|8246|8282.fixtures_glamsterdam-devnet.tar.gz) and the hiveeels_commitare best-guess/stale — verify both when the release +devnets/glamsterdam/6branch land, then re-run the ef-test + hive suites.Per-EIP work
EIP-7954— ✅ done; audit vs 7954 fixtures when v6.0.0 drops.EIP-7997— ✅ done; factory present inl1-bal.jsonwith EIP runtime code, nonce aligned to 1.EIP-8037— ✅ source-based refunds (feat(l2): based P2P #2999) + feat(l1): drop unwraps storage #3002 create-to-existing-target, aligned with merged EELS.EIP-8038— ✅ aligned with merged #11802; 10000-vs-10100 resolved (follows EELS).EIP-2780— ✅ aligned with merged #11645.feat/l1-eip8070. (This conversation's PR.)EIP-8282— ✅ EL wiring + addresses (sys-asm#43 vanity,808b13f4c). Remaining: genesisallocbytecode (Phase 3) + address freeze when sys-asm#43 merges.Carried from bal-7 — ❌ likely dropped, no action
code_addressis warmed + added to the BAL only after depth/balance preconditions pass. PR sentiment is against it: author (nerolation) — "it looks like we won't go for this change anyway… I'll let clients take the shot on this with the default — closing this PR"; reviewers flagged it breaks the "BAL ⊆ access list" assumption and the warm-gas-before-balance-check rule. The default (no reorder) stays, and ethrex already matches it. No code change. Monitor fix(levm): fix precompiles problem with eip7702 #2900 / the ACDE-18 outcome only; act only if it unexpectedly revives.From bal-devnet@v7.3.x (#2912) — now on the active pin, confirm green
The pin is at
tests-bal@v7.3.2(#6842), so these v7.3.x test/coverage additions (over existing impls, no new glam-6 EIP) are now in the active fixture set — confirm they pass on this branch (and that the CI/hive runs actually exercise them) rather than treating them as future work:calldata_floor > TX_MAX_GAS_LIMIT, specs#2876gas_limitcovers regular but not state intrinsic, specs#2875 CREATE-tx collision refunds state-gas reservoir) — ✅ audited compliant, verify-fixtures-only. POC: Try to integrate builder playground #2876:default_hook.rs:404-410rejectsgas_limit < regular + state. fix(levm): trying out things with eip 7702 #2898:default_hook.rs:458-462rejectsmax(regular, calldata_floor) > TX_MAX_GAS_LIMIT(both arms). Sync full Hoodi testnet viaimportcommand #2875: collision pathexecution_handlers.rs:133-146+refund_senderdefault_hook.rs:265-268subtractsstate_gas_reservoir_initial, so the sender is not charged the reservoir. No code gap; just confirm these fixtures pass on the pin bump.0xE7impl incrates/vm/levm/src/opcode_handlers/exchange.rs).crates/vm/backends/levm/mod.rs).Out of scope / tracked separately (protocol-side, forward-looking)
debug_getRawBlockAccessListRPC +-32001error code per execution-apis#794.regularGasUsed/stateGasCharged/stateGasRefundedondebug_getBlockReceipts; cross-client debugging aid, not glam-6 consensus scope.Reference
glamsterdam-devnet-6. bal-7 baseline (items 1-10) merged tomainvia feat(l1): bal-devnet-6 support (EIP-7928 BAL + EIP-8037 2D gas) #6574, feat(l1): support bal-devnet-7 (bal@v7.1.1) #6653, feat(l1): bal-devnet-7 v7.2.0 #6671.forks/amsterdam(branchdevnets/glamsterdam/6not yet created); upstream tracker execution-specs#2915.