# bal-devnet-7 spec
:::info
:mega: bal-devnet-7 target launch: **Monday 18.05** (subject to ACDT today).
:::
:::info
:checkered_flag: **Last `bal-` prefixed devnet.** Consolidates the bal-devnet-3 optimisations with the EIP-8037 spec changes finalised since bal-devnet-6 — confirmed in [`tests-bal@v7.0.0`](https://github.com/ethereum/execution-specs/releases/tag/tests-bal@v7.0.0). Future devnet releases will be prefixed `glamsterdam-`.
:::
:::info
❗ **EIP-8037 final shape** — all spec changes for the EIP land here, pulled from four EIPs PRs: [#11573](https://github.com/ethereum/EIPs/pull/11573) (fixed CPSB + frame accounting, **merged**), [#11606](https://github.com/ethereum/EIPs/pull/11606) (SELFDESTRUCT charges, **merged**), [#11611](https://github.com/ethereum/EIPs/pull/11611) (bal-devnet-6 bug fixes, open), [#11616](https://github.com/ethereum/EIPs/pull/11616) (parameter recalibration, open). EELS reference branch: [`devnets/bal/7`](https://github.com/ethereum/execution-specs/tree/devnets/bal/7).
:::
:::info
❗ **Parameters:** `cost_per_state_byte` **`1174 → 1530`** (fixed), `STATE_BYTES_PER_NEW_ACCOUNT` `112 → 120`, `STATE_BYTES_PER_STORAGE_SET` `32 → 64`, `STATE_BYTES_PER_AUTH_BASE` unchanged at `23`. `SYSTEM_CALL_GAS_LIMIT` raised from `30M` to `30M + STATE_BYTES_PER_STORAGE_SET × CPSB × SYSTEM_MAX_SSTORES_PER_CALL` (`SYSTEM_MAX_SSTORES_PER_CALL = 16`); the extra is allocated to `state_gas_reservoir` so system calls cannot OOG on state-gas growth alone.
:::
:::info
❗ **eth/70 (EIP-7975) and eth/71 (EIP-8159) are now mandatory** — moved from `optional` after the SFI check in #block-access-lists (2026-05-08). Every EL must support both for bal-devnet-7.
:::
## EIP List for bal-devnet-7
| EIP | Title | Status |
|--------|------|--------|
| [EIP-7708](https://eips.ethereum.org/EIPS/eip-7708) | ETH transfers emit a log (incl. CREATE/CREATE2) | |
| [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 | |
| [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-8159](https://eips.ethereum.org/EIPS/eip-8159) | eth/71 – Block Access List Exchange | :exclamation: **required** |
**Key:** :up: updated since bal-devnet-6 · :exclamation: scope changed
---
## EIP-8037 spec changes in 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` (whole-suite recalibration) | [#11616](https://github.com/ethereum/EIPs/pull/11616) (open) | [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`, including the portion that spilled into `gas_left`, back to the reservoir | [#11611](https://github.com/ethereum/EIPs/pull/11611) (open) | [specs#2815](https://github.com/ethereum/execution-specs/pull/2815) |
| 4 | EIP-7702 authorization state-gas refund is included in `block.state_gas_used` — block-level 2D accounting now matches per-tx | [#11611](https://github.com/ethereum/EIPs/pull/11611) (open) | [specs#2816](https://github.com/ethereum/execution-specs/pull/2816) |
| 5 | Tx-level CREATE halt/revert: refund intrinsic `NEW_ACCOUNT × CPSB` charge to the reservoir | [#11611](https://github.com/ethereum/EIPs/pull/11611) (open) | [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 (no propagation as refund) | [#11611](https://github.com/ethereum/EIPs/pull/11611) (open) | [specs#2823](https://github.com/ethereum/execution-specs/pull/2823) |
| 7 | CREATE address-collision: regular gas burned by the collision is now counted in block regular gas | [#11611](https://github.com/ethereum/EIPs/pull/11611) (open) | [specs#2823](https://github.com/ethereum/execution-specs/pull/2823) |
| 8 | Tx-level CREATE + same-tx `SELFDESTRUCT`: refund intrinsic `NEW_ACCOUNT × CPSB` so a non-persisting account isn't over-charged | [#11606](https://github.com/ethereum/EIPs/pull/11606) (merged) | [specs#2828](https://github.com/ethereum/execution-specs/pull/2828) |
Changes 3–8 directly close the bugs Dragan reported in `#el-testing` on 2026-05-04 against `snobal-devnet-6@v1.1.x` (tx-CREATE halt/revert, 7702-in-`block.state_gas_used`, isolated `0→x→0`, CREATE-collision). The `SELFDESTRUCT` charge clarification (#11606) was an outcome of the bal-devnet-6 review and is now spec-canonical.
### Other changes vs. bal-devnet-6
| Area | bal-devnet-6 | bal-devnet-7 |
|------|--------------|--------------|
| 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; called out for completeness) |
---
## 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: (draft PR) | ✅ | :hammer: (newPayload wiring) | ✅ | ✅ | ✅ | :hammer: (in review) |
---
## Consensus Layer
Unchanged from bal-devnet-6. CL teams rebuild against `devnets/bal/7` images.
| Feature/EIP | Lodestar | Lighthouse | Prysm |
|-------------|:--------:|:----------:|:-----:|
| EIP-7928 | ✅ | ✅ | bal-devnet-1 |
| EIP-7843 | ✅ | ✅ | ❌ |
`consensus-specs` stays on [`v1.6.1`](https://github.com/ethereum/consensus-specs/releases/tag/v1.6.1).
---
## Test releases
- **Consensus specs:** [`v1.6.1`](https://github.com/ethereum/consensus-specs/releases/tag/v1.6.1) — unchanged.
- **Execution specs (EELS):** [`tests-bal@v7.1.1`](https://github.com/ethereum/execution-specs/releases/tag/tests-bal@v7.1.1). Branch [`devnets/bal/7`](https://github.com/ethereum/execution-specs/tree/devnets/bal/7).
---
## Open execution-apis PRs
| PR | Author | Note |
|----|--------|------|
| [#794](https://github.com/ethereum/execution-apis/pull/794) | `nero_eth` | `BlockAccessIndex` `uint64 → uint32`, `blockAccessListHash` on block header, `debug_getRawBlockAccessList`, error code → `-32001 Resource not found`. **Required for bal-devnet-7.** |
| [#786](https://github.com/ethereum/execution-apis/pull/786) | `mkalinin` | Engine: restrict no-reorg to known-finalized prefix. Required for Glamsterdam, optional here. |
---
## Client BAL features
Unchanged from bal-devnet-6 — per-client flag tables are at https://notes.ethereum.org/@ethpandaops/bal-devnet-6#Feature-flags.
| EL Client | Exec Par. | Batch IO | State Par. |
|-----------|:---------:|:--------:|:----------:|
| Geth | ✅ | ✅ | ✅ |
| Nethermind | ✅ | ✅ | ✅ |
| Erigon | ✅ | ❓ | ❓ |
| Besu | ✅ | ✅ | ✅ |
| Reth | ✅ | ✅ | ✅ |
---
## Local testing
```yaml
participants:
- cl_type: lighthouse
cl_image: ethpandaops/lighthouse:bal-devnet-7
supernode: true
el_type: geth
el_image: ethpandaops/geth:bal-devnet-7
el_extra_params: ["--history.state=0", "--gcmode=archive", "--syncmode=full"]
count: 1
- cl_type: lighthouse
cl_image: ethpandaops/lighthouse:bal-devnet-7
supernode: true
el_type: besu
el_image: ethpandaops/besu:bal-devnet-7
count: 1
- cl_type: lighthouse
cl_image: ethpandaops/lighthouse:bal-devnet-7
supernode: true
el_type: reth
el_image: ethpandaops/reth:bal-devnet-7
el_extra_params: ["--txpool.max-account-slots=256"]
count: 1
- cl_type: lighthouse
cl_image: ethpandaops/lighthouse:bal-devnet-7
supernode: true
el_type: nethermind
el_image: ethpandaops/nethermind:bal-devnet-7
count: 1
- cl_type: lighthouse
cl_image: ethpandaops/lighthouse:bal-devnet-7
supernode: true
el_type: erigon
el_image: ethpandaops/erigon:bal-devnet-7
count: 1
- cl_type: lighthouse
cl_image: ethpandaops/lighthouse:bal-devnet-7
supernode: true
el_type: ethrex
el_image: ethpandaops/ethrex:bal-devnet-7
el_extra_params: ["--syncmode=full", "--http.api=eth,net,web3,debug,admin,txpool"]
count: 1
- cl_type: lighthouse
cl_image: ethpandaops/lighthouse:bal-devnet-7
supernode: true
el_type: nimbus
el_image: ethpandaops/nimbus-eth1:bal-devnet-7
count: 1
network_params:
preset: minimal
seconds_per_slot: 6
genesis_delay: 30
fulu_fork_epoch: 0
gloas_fork_epoch: 2
# 150M matches the EIP-8037 reference gas limit used to derive CPSB=1530.
genesis_gaslimit: 150000000
gas_limit: 150000000
snooper_enabled: true
dora_params:
image: ethpandaops/dora:eip7928-support
spamoor_params:
image: ethpandaops/spamoor:master
spammers:
- scenario: evm-fuzz
config: {funding_gas_limit: 2000000, throughput: 50, payload_seed: "0x0400"}
- scenario: eoatx
config: {funding_gas_limit: 2000000, throughput: 50, gas_limit: 200000}
- scenario: deploytx
config: {funding_gas_limit: 2000000, throughput: 10, bytecodes: "0x6000", gas_limit: 10000000}
- scenario: storagerefundtx
config: {funding_gas_limit: 2000000, throughput: 20, slots_per_call: 500}
- scenario: setcodetx
config: {funding_gas_limit: 2000000, throughput: 20}
ethereum_genesis_generator_params:
image: ethpandaops/ethereum-genesis-generator:6.0.2
additional_services: [dora, spamoor]
port_publisher:
additional_services:
enabled: true
public_port_start: 64400
```
---
## Metrics
https://notes.ethereum.org/@ethpandaops/bal-otel
Previous devnet spec sheet: https://notes.ethereum.org/@ethpandaops/bal-devnet-6