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/7 → glamsterdam-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
Tracking issue for aligning ethrex's
glamsterdam-devnet-6branch with theglamsterdam-devnet@v6.0.0release. Spec baseline: EELS branchglamsterdam-devnet-6(built onforks/amsterdam), fixture releasetests-glamsterdam-devnet@v6.0.0(target 2026-06-12). Upstream tracker: execution-specs#2915.First
glamsterdam-prefixed devnet. The precedingbal-devnet-7alignment (state-gas reservoir + BAL baseline, items 1-10) is complete and merged tomain— 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.e92fd97cfonglamsterdam-devnet-6: balance preserved on destruction, no burn log, EIP-6780 pre-Amsterdam path unchanged.crates/vm/levm/src/account.rscreate_would_collide()checkshas_code() || has_nonce() || has_storage; collision revert inexecution_handlers.rs. Audit against the 7610 fixtures when v6.0.0 drops.crates/vm/levm/src/vm.rs(state_gas_reservoir,state_gas_used,state_gas_reservoir_initial); auth refunds inutils.rs. Audit any glam-6 8037 deltas vs the bal-7 baseline.state_access_gas_reservoir)state_gas_reservoirmodel; confirm naming and any parameter deltas (SYSTEM_MAX_SSTORES_PER_CALL, reservoir sizing). Likely no code change beyond renames + new test coverage.crates/vm/levm/src/opcode_handlers/system.rs(record_bal_call_touch), checkpoint/restore incall_frame.rs/utils.rs. Carried action: EIP-7702 delegation BAL exclusion on call failure (see below).crates/vm/levm/src/constants.rs:40AMSTERDAM_MAX_CODE_SIZE = 0x8000(32 KiB) but spec wants0x10000(64 KiB);constants.rs:42init-code is2 * 0x8000(64 KiB) but spec wants0x20000(128 KiB). Action: bump both constants and re-check size-limit enforcement inexecution_handlers.rs.TX_BASE_COST 21000→4500(constants.rs:31),GAS_NEW_ACCOUNT=25000, splitCOLD_ACCOUNT_COST_CODE=2600/COLD_ACCOUNT_COST_NOCODE=500,STATE_UPDATE=1000, repriceCALL_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.crates/vm/system_contracts.rs(only Pectra-era predeploys). Action: inject the deterministic factory predeploy at the genesis/fork-activation address.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 ontoglamsterdam-devnet-6. Infra-only — gated and inert by default.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 (do first once v6.0.0 drops)
tooling/ef_tests/blockchain/.fixtures_url_amsterdam— currentlytests-bal@v7.2.0→ bump totests-glamsterdam-devnet@v6.0.0.Makefile:152AMSTERDAM_FIXTURES_BRANCH ?= devnets/bal/7→glamsterdam-devnet-6.eels/consume-engineAmsterdam; extend the targeted--sim.limitregex (Makefile:157) with8038|2780|7997|7610|7954.Per-EIP work
AMSTERDAM_MAX_CODE_SIZEto0x10000andAMSTERDAM_INIT_CODE_MAX_SIZEto0x20000(constants.rs:40,42); verify deploy/initcode size checks.CALL_VALUE_COST, transfer-log charge). Coordinate with EIP-7708 (transfer log) and EIP-7928 (cold-access ordering / BAL). Gas estimators / RPC that assume21000base must update.state_gas_reservoir; apply renames/param deltas; add fixtures coverage.feat/l1-eip8070.Carried from bal-7 (still open, forward-looking)
code_addressis added to the BAL only if all hold: (a) sufficient gas for delegatedaccess_cost, (b) for value-transferringCALL/CALLCODE,sender_balance >= value, (c) call-stack depth not violated. ethrex currently matches the old spec. Action when EELS merges:code_addressBAL recording fromrecord_bal_call_touch(crates/vm/levm/src/opcode_handlers/system.rs:889) to after thesender_balance/depth guards insidegeneric_call(~system.rs:962).test/tests/levm/eip7928_tests.rs: 7702 + insufficient balance, 7702 + max depth.delegated-*variants oftest_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-7and inherits the v7.3.0 fixtures, but ethrex's pin never advanced pasttests-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:crates/vm/backends/levm/mod.rsagainst the strict rule before pinning.calldata_floor > TX_MAX_GAS_LIMIT(specs#2898),gas_limitcovers regular but not state intrinsic (specs#2876), CREATE-tx collision refunds state-gas reservoir (specs#2875).0xE7impl incrates/vm/levm/src/opcode_handlers/exchange.rs).crates/vm/backends/levm/mod.rs).Out of scope / tracked separately (protocol-side, forward-looking)
debug_getRawBlockAccessListRPC +-32001error code per execution-apis#794.regularGasUsed/stateGasCharged/stateGasRefundedondebug_getBlockReceipts; cross-client debugging aid, not glam-6 consensus scope.Reference
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.glamsterdam-devnet-6; upstream tracker execution-specs#2915.