Skip to content

tracking: glamsterdam-devnet-6 alignment #6583

@edg-l

Description

@edg-l

Tracking issue for aligning ethrex's glamsterdam-devnet-6 branch with the glamsterdam-devnet@v6.0.0 release. Spec baseline: EELS branch glamsterdam-devnet-6 (built on forks/amsterdam), fixture release tests-glamsterdam-devnet@v6.0.0 (target 2026-06-12). 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 — 🟡 in progress

glam-6 adds six new EIPs and updates three. State-gas (EIP-8037/8038) and BAL (EIP-7928) land from the bal-7 baseline already on main; this tracker covers only the glam-6 delta.

# EIP Title ethrex status Notes / action
1 EIP-8246 Remove SELFDESTRUCT burn 🟢 done e92fd97cf on glamsterdam-devnet-6: balance preserved on destruction, no burn log, EIP-6780 pre-Amsterdam path unchanged.
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 🟢 baseline done 2D state-gas reservoir in crates/vm/levm/src/vm.rs (state_gas_reservoir, state_gas_used, state_gas_reservoir_initial); auth refunds in utils.rs. Audit any glam-6 8037 deltas vs the bal-7 baseline.
4 EIP-8038 State-access gas cost update (state_access_gas_reservoir) 🟡 audit needed Appears to be a rename/superset of the EIP-8037 reservoir already implemented. Action: diff EIP-8038 vs our state_gas_reservoir model; confirm naming and any parameter deltas (SYSTEM_MAX_SSTORES_PER_CALL, reservoir sizing). Likely no code change beyond renames + new test coverage.
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. Carried action: EIP-7702 delegation BAL exclusion on call failure (see below).
6 EIP-7954 Increase max contract size to 64 KiB 🔴 value mismatch crates/vm/levm/src/constants.rs:40 AMSTERDAM_MAX_CODE_SIZE = 0x8000 (32 KiB) but spec wants 0x10000 (64 KiB); constants.rs:42 init-code is 2 * 0x8000 (64 KiB) but spec wants 0x20000 (128 KiB). Action: bump both constants and re-check size-limit enforcement in execution_handlers.rs.
7 EIP-2780 Reduce intrinsic transaction gas 🔴 not started Full intrinsic-gas repricing. TX_BASE_COST 21000→4500 (constants.rs:31), GAS_NEW_ACCOUNT=25000, split COLD_ACCOUNT_COST_CODE=2600/COLD_ACCOUNT_COST_NOCODE=500, STATE_UPDATE=1000, reprice CALL_VALUE_COST (9000→3756/27756/self 1000), TRANSFER_LOG_COST=1756. Ties into EIP-7708 (transfer log) and EIP-7928 (two-tier cold access + BAL). Largest item; overrides EIP-2929 blanket-warm rule.
8 EIP-7997 Deterministic Factory Predeploy 🔴 not started No factory predeploy in crates/vm/system_contracts.rs (only Pectra-era predeploys). Action: inject the deterministic factory predeploy at the genesis/fork-activation address.
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.

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 (do first once v6.0.0 drops)

  • tooling/ef_tests/blockchain/.fixtures_url_amsterdam — currently tests-bal@v7.2.0 → bump to tests-glamsterdam-devnet@v6.0.0.
  • Makefile:152 AMSTERDAM_FIXTURES_BRANCH ?= devnets/bal/7glamsterdam-devnet-6.
  • Re-run blockchain ef-tests + hive eels/consume-engine Amsterdam; extend the targeted --sim.limit regex (Makefile:157) with 8038|2780|7997|7610|7954.

Per-EIP work

  • EIP-7954 — bump AMSTERDAM_MAX_CODE_SIZE to 0x10000 and AMSTERDAM_INIT_CODE_MAX_SIZE to 0x20000 (constants.rs:40,42); verify deploy/initcode size checks.
  • EIP-2780 — implement intrinsic-gas repricing + EVM gas-schedule adjustments (cold-account split, CALL_VALUE_COST, transfer-log charge). Coordinate with EIP-7708 (transfer log) and EIP-7928 (cold-access ordering / BAL). Gas estimators / RPC that assume 21000 base must update.
  • EIP-7997 — add the deterministic factory predeploy (genesis injection + activation guard).
  • EIP-8038 — audit vs current state_gas_reservoir; apply renames/param deltas; add fixtures coverage.
  • EIP-8070 — merge decision + rebase of feat/l1-eip8070.

Carried from bal-7 (still open, forward-looking)

  • EIPs#11699 — EIP-7702 delegation BAL exclusion on call failure. Tightens EIP-7928 so the delegated code_address is added to the BAL only if all hold: (a) sufficient gas for delegated access_cost, (b) for value-transferring CALL/CALLCODE, sender_balance >= value, (c) call-stack depth not violated. ethrex currently matches the old spec. Action when EELS merges:
    • Move the delegation code_address BAL recording from record_bal_call_touch (crates/vm/levm/src/opcode_handlers/system.rs:889) to after the sender_balance/depth guards inside generic_call (~system.rs:962).
    • Extend test/tests/levm/eip7928_tests.rs: 7702 + insufficient balance, 7702 + max depth.
    • The fixture update rewrites the 4 delegated-* variants of test_bal_call_revert_insufficient_funds (now expecting the target NOT in the BAL).

Subsumed from bal-devnet@v7.3.0 (#2912) — verify on bump

v6.0.0 builds on bal-devnet-7 and inherits the v7.3.0 fixtures, but ethrex's pin never advanced past tests-bal@v7.2.0, so these added test cases have never run here. They are test/coverage additions over existing impls (no new glam-6 EIP), but must pass when the pin moves to v6.0.0:

  • EIP-8037 strict block-gas inclusion rule (specs#2892) — flagged as a spec gap we missed. Audit block-gas accounting in crates/vm/backends/levm/mod.rs against the strict rule before pinning.
  • EIP-8037 extra rejects: calldata_floor > TX_MAX_GAS_LIMIT (specs#2898), gas_limit covers regular but not state intrinsic (specs#2876), CREATE-tx collision refunds state-gas reservoir (specs#2875).
  • 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
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