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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

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

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions