You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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.rscreate_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.
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_forkchoiceUpdatedV4targetGasLimit (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.
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#2898calldata_floor > TX_MAX_GAS_LIMIT, specs#2876gas_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_senderdefault_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.
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.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.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.COLD_ACCOUNT_ACCESS, newACCOUNT_WRITE,COLD_STORAGE_ACCESS,STORAGE_WRITE,WARM_ACCESS, refunds) plus behavioral changes (EXTCODESIZE/EXTCODECOPYextraWARM_ACCESS;CALL_VALUE = ACCOUNT_WRITE + CALL_STIPEND;SELFDESTRUCTextraACCOUNT_WRITE; EIP-7702 auth access table). Depends on EIP-7904. Blocked: published EIP lists all new values as TBD, and the upstream EELSeips/amsterdam/eip-8038branch 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 incrates/vm/levm/src/gas_cost.rs.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).glamsterdam-devnet-6:AMSTERDAM_MAX_CODE_SIZE = 0x10000(64 KiB) incrates/vm/levm/src/constants.rs:40andcrates/blockchain/constants.rs:29; initcode derives as2 * 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.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.Upstream status
glamsterdam-devnet-6integration 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.tests-glamsterdam-devnet@v6.0.0fixture release yet (latest istests-bal@v7.2.0; target 06-12). Upstream tracker execution-specs#2915 open.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
EIP-7954— ✅ done; audit vs 7954 fixtures when v6.0.0 drops.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.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:calldata_floor > TX_MAX_GAS_LIMIT, specs#2876gas_limitcovers 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-410rejectsgas_limit < regular + state. fix(levm): trying out things with eip 7702 #2898:default_hook.rs:458-462rejectsmax(regular, calldata_floor) > TX_MAX_GAS_LIMIT(both arms). Sync full Hoodi testnet viaimportcommand #2875: collision pathexecution_handlers.rs:133-146+refund_senderdefault_hook.rs:265-268subtractsstate_gas_reservoir_initial, so the sender is not charged the reservoir. No code gap; just confirm these fixtures pass on the pin bump.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.