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 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 🟢 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 🔵 blocked upstream NOT a rename/superset of the 8037 reservoir. It is a state-access gas repricing (COLD_ACCOUNT_ACCESS, new ACCOUNT_WRITE, COLD_STORAGE_ACCESS, STORAGE_WRITE, WARM_ACCESS, refunds) plus behavioral changes (EXTCODESIZE/EXTCODECOPY extra WARM_ACCESS; CALL_VALUE = ACCOUNT_WRITE + CALL_STIPEND; SELFDESTRUCT extra ACCOUNT_WRITE; EIP-7702 auth access table). Depends on EIP-7904. Blocked: published EIP lists all new values as TBD, and the upstream EELS eips/amsterdam/eip-8038 branch still carries EIP-2929 baseline values (COLD_SLOAD=2100, COLD_ACCOUNT_ACCESS=2600, WARM_ACCESS=100) with no repricing impl. ethrex already matches that baseline (gas_cost.rs), so nothing to change until upstream finalizes numbers. Future work lands in crates/vm/levm/src/gas_cost.rs.
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 🟢 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 🔴 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.

Upstream status

  • No glamsterdam-devnet-6 integration branch in EELS yet. 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 (latest is tests-bal@v7.2.0; target 06-12). Upstream tracker execution-specs#2915 open.

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 — ✅ done; audit vs 7954 fixtures when v6.0.0 drops.
  • 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 — ⛔ blocked: repricing values still TBD upstream (see item 4); revisit when EELS lands concrete numbers. No action now.
  • 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 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
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