# glamsterdam-devnet-4 spec :::info :mega: glamsterdam-devnet-4 targets to launch in late May 2026. ::: :::info :checkered_flag: **First `glamsterdam-` prefixed CL+EL devnet** combining `consensus-specs` **v1.7.0-alpha.8** with the **bal-devnet-7** EL feature set, plus the new `targetGasLimit` engine API field ([execution-apis#796](https://github.com/ethereum/execution-apis/pull/796) ↔ [consensus-specs#5235](https://github.com/ethereum/consensus-specs/pull/5235)). ::: :::info ❗ **`targetGasLimit` on `PayloadAttributesV4`** — CL now passes the per-validator target gas limit to the EL on `engine_forkchoiceUpdatedV4`, replacing the static EL-side flag. CL also enforces `target_gas_limit` consistency with the block's `gas_limit` (CL PR-5236). ::: :::info ❗ **EIP-8037 final shape:** `cost_per_state_byte` **1174 → 1530** (fixed), `STATE_BYTES_PER_NEW_ACCOUNT` 112 → 120, `STATE_BYTES_PER_STORAGE_SET` 32 → 64. `SYSTEM_CALL_GAS_LIMIT` raised so system calls can't OOG on state-gas alone. Reference block gas limit raised 96M → **150M**. ::: :::info ❗ **eth/70 (EIP-7975) and eth/71 (EIP-8159) are now mandatory** — every EL must implement both (promoted from optional in bal-devnet-7). ::: ## EIP List for glamsterdam-devnet-4 | EIP | Title |Status |--------|-----|-------| |[EIP-7708](https://eips.ethereum.org/EIPS/eip-7708) | ETH transfers emit a log | |[EIP-7732](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-7732.md) | Enshrined Proposer-Builder Separation | :up: |[EIP-7778](https://eips.ethereum.org/EIPS/eip-7778) | Block Gas Accounting without Refunds | |[EIP-7843](https://eips.ethereum.org/EIPS/eip-7843) | SLOTNUM opcode | |[EIP-7928](https://eips.ethereum.org/EIPS/eip-7928) | Block-Level Access Lists | :up: |[EIP-7954](https://eips.ethereum.org/EIPS/eip-7954) | Increase Maximum Contract Size | |[EIP-7975](https://eips.ethereum.org/EIPS/eip-7975) | eth/70 - partial block receipt lists | :exclamation: **required** |[EIP-7976](https://eips.ethereum.org/EIPS/eip-7976) | Increase Calldata Floor Cost (64/64) | |[EIP-7981](https://eips.ethereum.org/EIPS/eip-7981) | Increase Access List Cost | |[EIP-8024](https://eips.ethereum.org/EIPS/eip-8024) | Backward compatible SWAPN, DUPN, EXCHANGE |[EIP-8037](https://eips.ethereum.org/EIPS/eip-8037) | State Creation Gas — **CPSB=1530**, system-call gas bump, halt/revert + SELFDESTRUCT refunds | :up: |[EIP-8061](https://eips.ethereum.org/EIPS/eip-8061) | Increase exit and consolidation churn | |[EIP-8159](https://eips.ethereum.org/EIPS/eip-8159) | eth/71 - Block Access List Exchange | :exclamation: **required** **Key:** - :up: EIP has updated! - :new: New EIP added. - :exclamation: scope changed (now required) ### Implementation tracker EL ## Execution Layer Client Support | EIP | Geth | Besu | Reth | Nethermind | Erigon | Nimbus-EL | Ethrex | |-----| :----:|:----:|:----:|:----------:|:------:|:---------:|:------:| | 7708 / 7778 / 7843 / 7928 / 7954 / 7976 / 7981 / 8024 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | 7975 (eth/70 — **required**) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | | 8037 (CPSB=1530 + #11611) | :hammer: | :hammer: | :hammer: | :hammer: | :hammer: | :hammer: | :hammer: | | 8159 (eth/71 — **required**) | :hammer: | ✅ | :hammer: | ✅ | ✅ | ✅ | :hammer: | | 7732 ePBS | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | | engine: `targetGasLimit` (#796) | :hammer: | :hammer: | :hammer: | :hammer: | :hammer: | :hammer: | :hammer: | ### Implementation tracker CL | Feature/EIP | Lodestar | Lighthouse | Prysm | | ----------- | -------- | ---------- | ----- | | **EIP-7928** | ✅ | ✅ | glamsterdam-devnet-0 | | **alpha.8 rebase** | :hammer: | :hammer: | :hammer: | | **`target_gas_limit` (#5235)** | :hammer: | :hammer: | :hammer: | ### Test Releases **Consensus Specs:** [v1.7.0-alpha.8](https://github.com/ethereum/consensus-specs/releases/tag/v1.7.0-alpha.8) :heavy_check_mark: **Execution Specs (EELS):** [tests-bal@v7.2.0](https://github.com/ethereum/execution-specs/releases/tag/tests-bal@v7.2.0) — branch [`devnets/bal/7`](https://github.com/ethereum/execution-specs/tree/devnets/bal/7) :heavy_check_mark: ### Spec versions required & Open PRs **EIPs** (new since bal-devnet-7) _None — all EIP updates were already incorporated into bal-devnet-7. See [bal-devnet-7](https://notes.ethereum.org/@ethpandaops/bal-devnet-7) for the historical EIP PR list._ **Builder Specs** - [PR-138 - Staked Builder API for Glamsterdam](https://github.com/ethereum/builder-specs/pull/138) Open :exclamation: **Consensus Specs** (consensus-breaking PRs between `v1.7.0-alpha.7` and `v1.7.0-alpha.8`) - [PR-5181 - Add `beacon_blocks_by_head` ReqResp](https://github.com/ethereum/consensus-specs/pull/5181) Merged :heavy_check_mark: - [PR-5186 - Force the proposer to reorg unavailable blocks](https://github.com/ethereum/consensus-specs/pull/5186) Merged :heavy_check_mark: - [PR-5197 - Modify `notify_forkchoice_updated`](https://github.com/ethereum/consensus-specs/pull/5197) Merged :heavy_check_mark: - [PR-5208 - Use `list` instead of `Vector` in the `Store` class](https://github.com/ethereum/consensus-specs/pull/5208) Merged :heavy_check_mark: - [PR-5212 - Introduce separate payload availability deadline](https://github.com/ethereum/consensus-specs/pull/5212) Merged :heavy_check_mark: - [PR-5215 - Use `MIN_SEED_LOOKAHEAD` in proposer preferences](https://github.com/ethereum/consensus-specs/pull/5215) Merged :heavy_check_mark: - [PR-5222 - Count PTC votes from duplicated validators](https://github.com/ethereum/consensus-specs/pull/5222) Merged :heavy_check_mark: - [PR-5223 - Raise `MIN_BUILDER_WITHDRAWABILITY_DELAY` to 8192 epochs](https://github.com/ethereum/consensus-specs/pull/5223) Merged :heavy_check_mark: - [PR-5226 - Split out partial columns feature](https://github.com/ethereum/consensus-specs/pull/5226) Merged :heavy_check_mark: - [PR-5227 - Add note about validating deposit signatures before the fork](https://github.com/ethereum/consensus-specs/pull/5227) Merged :heavy_check_mark: - [PR-5235 - Add `target_gas_limit` to `PayloadAttributes`](https://github.com/ethereum/consensus-specs/pull/5235) Merged :heavy_check_mark: - [PR-5236 - Check gas limit consistency with the target](https://github.com/ethereum/consensus-specs/pull/5236) Merged :heavy_check_mark: - [PR-5254 - Optimize strategy for onboarding builders at the fork](https://github.com/ethereum/consensus-specs/pull/5254) Merged :heavy_check_mark: **Execution APIs** - [PR-778 - engine: move PayloadAttributesV4 into Amsterdam structures](https://github.com/ethereum/execution-apis/pull/778) Merged :heavy_check_mark: - [PR-786 - engine: Restrict no-reorg to the prefix of known finalized](https://github.com/ethereum/execution-apis/pull/786) Merged :heavy_check_mark: - [PR-794 - all: align EIP-7928 spec with latest EIP (uint32 BlockAccessIndex, header hash, debug getter)](https://github.com/ethereum/execution-apis/pull/794) Merged :heavy_check_mark: **required** - [PR-796 - engine: add `targetGasLimit` to `PayloadAttributesV4`](https://github.com/ethereum/execution-apis/pull/796) Merged :heavy_check_mark: **required** - [PR-798 - engine: Deduplicate PayloadAttributesV4](https://github.com/ethereum/execution-apis/pull/798) Merged :heavy_check_mark: **Networking** - [EIP-7928 GetBlockAccessLists, BlockAccessLists p2p](https://github.com/ethereum/devp2p/pull/264) Open :exclamation: **Execution Specs** - [tests-bal@v7.1.1](https://github.com/ethereum/execution-specs/releases/tag/tests-bal@v7.1.1) — EIP-8037 final shape, halt/revert refund bugfixes, EELS branch `devnets/bal/7` **Other** --- ## EIP-8037 spec changes carried in via bal-devnet-7 Per the [`tests-bal@v7.0.0` release notes](https://github.com/ethereum/execution-specs/releases/tag/tests-bal@v7.0.0). EELS branch: `devnets/bal/7`. | # | Change | EIPs PR | EELS PR / commit | |---|--------|---------|------------------| | 1 | Parameters: `CPSB 1174 → 1530`, `NEW_ACCOUNT 112 → 120`, `STORAGE_SET 32 → 64` | [#11616](https://github.com/ethereum/EIPs/pull/11616) | [specs#2827](https://github.com/ethereum/execution-specs/pull/2827) | | 2 | `SYSTEM_CALL_GAS_LIMIT = 30M + STATE_BYTES_PER_STORAGE_SET × CPSB × SYSTEM_MAX_SSTORES_PER_CALL` (16 slots). Extra goes to `state_gas_reservoir` so system calls can't OOG on state-gas alone. | — | commit [`7b3e8016`](https://github.com/ethereum/execution-specs/commit/7b3e8016b1) | | 3 | Top-level exceptional halt: refund full `state_gas_used` back to the reservoir | [#11611](https://github.com/ethereum/EIPs/pull/11611) | [specs#2815](https://github.com/ethereum/execution-specs/pull/2815) | | 4 | EIP-7702 authorization state-gas refund included in `block.state_gas_used` | [#11611](https://github.com/ethereum/EIPs/pull/11611) | [specs#2816](https://github.com/ethereum/execution-specs/pull/2816) | | 5 | Tx-level CREATE halt/revert: refund intrinsic `NEW_ACCOUNT × CPSB` to reservoir | [#11611](https://github.com/ethereum/EIPs/pull/11611) | [specs#2823](https://github.com/ethereum/execution-specs/pull/2823) | | 6 | Isolated `0 → x → 0` SSTORE refund: same-frame revert returns the charge to the reservoir | [#11611](https://github.com/ethereum/EIPs/pull/11611) | [specs#2823](https://github.com/ethereum/execution-specs/pull/2823) | | 7 | CREATE address-collision: regular gas burned is now counted in block regular gas | [#11611](https://github.com/ethereum/EIPs/pull/11611) | [specs#2823](https://github.com/ethereum/execution-specs/pull/2823) | | 8 | Tx-level CREATE + same-tx `SELFDESTRUCT`: refund intrinsic `NEW_ACCOUNT × CPSB` | [#11606](https://github.com/ethereum/EIPs/pull/11606) | [specs#2828](https://github.com/ethereum/execution-specs/pull/2828) | ### Other bal-devnet-7 carry-overs | Area | bal-devnet-6 | bal-devnet-7 / glamsterdam-devnet-4 | |------|--------------|--------------| | Reference block gas limit (for CPSB derivation) | 96M | **150M** — devnet `gas_limit` raised to match | | Target state growth | 100 GiB/yr | **120 GiB/yr** | | eth/70 (EIP-7975) | optional | **mandatory** | | eth/71 (EIP-8159) | optional | **mandatory** | | `STATE_BYTES_PER_AUTH_BASE` | 23 | 23 (unchanged) | --- ## Local testing Kurtosis example: ```yaml title="kurtosis.yaml" participants_matrix: el: - el_type: ethrex el_image: ethpandaops/ethrex:glamsterdam-devnet-4 - el_type: nethermind el_image: ethpandaops/nethermind:glamsterdam-devnet-4 cl: - cl_type: prysm cl_image: ethpandaops/prysm-beacon-chain:glamsterdam-devnet-4 - cl_type: lodestar cl_image: ethpandaops/lodestar:glamsterdam-devnet-4 - cl_type: lighthouse cl_image: ethpandaops/lighthouse:glamsterdam-devnet-4 network_params: gloas_fork_epoch: 1 withdrawal_type: "0x01" validator_balance: 40000 genesis_gaslimit: 150000000 gas_limit: 150000000 additional_services: - dora - assertoor - spamoor - checkpointz spamoor_params: image: ethpandaops/spamoor:master assertoor_params: run_stability_check: false run_block_proposal_check: false tests: - { file: "https://raw.githubusercontent.com/ethpandaops/assertoor/refs/heads/master/playbooks/gloas-dev/builder-lifecycle.yaml" } snooper_enabled: false global_log_level: debug port_publisher: additional_services: enabled: true checkpointz_params: image: ethpandaops/checkpointz:gloas-latest ``` --- ## Client BAL features | EL Client | Exec Par. | Batch IO (required) | State Par. | |-------------|:---------:|:--------:|:----------:| | Geth | ✅ | ✅ | ✅ | | Nethermind | ✅ | ✅ | ✅ | | Erigon | ✅ | ❓ | ❓ | | Besu | ✅ | ✅ | ✅ | | Reth | ✅ | ✅ | ✅ | Per-client BAL flag tables are unchanged from bal-devnet-6: https://notes.ethereum.org/@ethpandaops/bal-devnet-6#Feature-flags. --- ## Metrics https://notes.ethereum.org/@ethpandaops/bal-otel Previous devnet spec sheets for reference: - CL: https://notes.ethereum.org/@ethpandaops/glamsterdam-devnet-2 - EL: https://notes.ethereum.org/@ethpandaops/bal-devnet-7