Repository navigation
tracking: glamsterdam-devnet-6 alignment #6583
Description
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-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.0
2026-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 alloc bytecode + 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.
| # | 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.rs create_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. |
| 3 | EIP-8037 | State-gas gas-inclusion + authorization accounting | 🟢 done (aligned) | 2D state-gas reservoir in vm.rs + source-based refunds (per-frame frame_state_gas_spilled, LIFO credit_state_gas_refund, refill_frame_state_gas on revert/halt) matching merged EELS #2999; #3002 create-to-existing-target refund (target_alive). dead5fc52/7682525da, 12 unit tests, reviewed. |
| 4 | EIP-8038 | State-access gas cost update | 🟢 done (aligned, merged #11802) | 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. |
| 7 | EIP-2780 | Reduce intrinsic transaction gas | 🟢 done (aligned, merged #11645) | 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. alloc bytecode (Phase 3 deferred). EELS #2990 still uses placeholder 7732/7733 → 8282 ef-tests mismatch until finalized. EIPs #11760. |
Upstream status (per #2915, as of 2026-06-18)
- EELS integration branch
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. - No
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. - 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_commitneed 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) — 🟢 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)
- All three
.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. ⚠️ 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 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.- EIP-8070 — merge decision + rebase of
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
- EIPs#11699 / EELS #2900 — EIP-7702 delegation BAL exclusion on call failure. Would have reordered the CALL family so the target/delegation
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:
- EIP-8037 strict rejects (specs#2898
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. - EIP-7928 extended BAL coverage: withdrawal-predeploy balance read across txs, self-destruct to system address with 0 value.
- EIP-8024 gas-boundary + SWAPN invalid-immediate tests (SWAPN
0xE7impl incrates/vm/levm/src/opcode_handlers/exchange.rs). - EIP-7778 tx-level exception handling for over-budget blocks (block-level gas overflow check already in
crates/vm/backends/levm/mod.rs).
Out of scope / tracked separately (protocol-side, forward-looking)
- eth/71 (EIP-8159) Block Access List Exchange — required for the devnet protocol matrix; tracked separately.
debug_getRawBlockAccessListRPC +-32001error code per execution-apis#794.- debug receipt fields (PM#2033): optional
regularGasUsed/stateGasCharged/stateGasRefundedondebug_getBlockReceipts; cross-client debugging aid, not glam-6 consensus scope. - EIP-8025 optional-proofs: witness fixtures skipped pending a zkevm bundle regenerated against glam-6.
Reference
- ethrex branch:
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. - EELS: integration on
forks/amsterdam(branchdevnets/glamsterdam/6not yet created); upstream tracker execution-specs#2915.
Activity
feat(l1): bal-devnet-7 v7.2.0 (lambdaclass#6671)
[-]tracking: bal-devnet-7 alignment delta from bal-devnet-6[/-][+]tracking: bal-devnet-7 alignment[/+][-]tracking: bal-devnet-7 alignment[/-][+]tracking: glamsterdam-devnet-6 alignment[/+]docs(l1): refresh forks roadmap (lambdaclass#6728)
feat(l1): bal-devnet-7 v7.2.0 (lambdaclass#6671)
ilitteri commentedon Aug 31, 2026
Superseded by #7244 — the devnet-6 alignment completed through the devnet-7/-8 cycles and the feature wave is on main; the remaining Glamsterdam work is tracked there.