Skip to content

tracking: glamsterdam-devnet-6 alignment #6583

Description

@edg-l

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)
  • EIP-8037 source-based state-gas refunds (dead5fc52) + feat(l1): drop unwraps storage #3002 create-to-existing-target refund (7682525da)
  • EIP-8038 + EIP-2780 Amsterdam gas repricing — confirmed aligned with merged numbers
  • EIP-7997 factory 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 0x00x1 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.

Upstream status (per #2915, as of 2026-06-18)

  • 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_forkchoiceUpdatedV4 targetGasLimit (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.

TODO

Fixture / branch pin bump — ✅ done (committed, pre-emptive)

  • All three .fixtures_url_amsterdam (blockchain/engine/state) → tests-glamsterdam-devnet@v6.0.0; Makefile AMSTERDAM_FIXTURES_BRANCHdevnets/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.
  • 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: genesis alloc bytecode (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_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.

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#2876 gas_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_sender default_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.
  • EIP-8024 gas-boundary + SWAPN invalid-immediate tests (SWAPN 0xE7 impl in crates/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_getRawBlockAccessList RPC + -32001 error code per execution-apis#794.
  • debug receipt fields (PM#2033): optional regularGasUsed/stateGasCharged/stateGasRefunded on debug_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

Metadata

Metadata

Assignees

Labels

UpgradeSupport for eips that are part of an ethereum upgrade/hard fork

Type

No type

Fields

No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions