# Plataberget spec
:::info
:mega: Plataberget launched 13.08 2026 with the gloas fork happening in 7 days (20.08.26 20:08) at epoch 1536. **
:::
:::info
:checkered_flag: **Scope.** Short-lived fork-transition devnet: all clients fork together from a big pre-fork state (config similar to devnet-7). EL discovery runs **discv5-only** (per-client flags under Networking); QUIC stays enabled on the CL. The new **builder API** flow (Beacon API / Keymanager / Builder Specs PRs below) is **best effort**. **Repricing numbers are frozen** (ACDT #90) and the EIP has merged; EELS still needs a follow-up release to carry them. Stress goals: SSZ/stable-container performance and builder lifecycle at scale (see Testing focus). devnet-9 (non-finality testing) follows within the month.
:::
:::info
8282 system contracts are unchanged from devnet-7 (no sys-asm bytecode changes since):
| Req | type | Address |
|---------|------|--------------------------------------------|
| deposit | 0x03 | 0x0000bff46984e3725691fa540a8c7589300d8282 |
| exit | 0x04 | 0x000064d678505ad48f8ccb093bc65613800e8282 |
:::
## EIP List for Plataberget testnet
| EIP | Title |Status
|--------|-----|:-----:|
|[EIP-2780](https://eips.ethereum.org/EIPS/eip-2780) [`spec@36c409e7`](https://github.com/ethereum/EIPs/blob/36c409e70e4117fc708f02da7d58cd7e5d075f7c/EIPS/eip-2780.md) | Reduce intrinsic transaction gas — transfer log cost folded into `TX_VALUE_COST`; **intrinsic contract-creation 23,000 → 24,000** (tracks `CREATE_ACCESS`) | :up:
|[EIP-7610](https://eips.ethereum.org/EIPS/eip-7610) | Revert creation in case of non-empty storage
|[EIP-7688](https://eips.ethereum.org/EIPS/eip-7688) | Forward compatible consensus data structures |
|[EIP-7708](https://eips.ethereum.org/EIPS/eip-7708) [`spec@f7230c46`](https://github.com/ethereum/EIPs/blob/f7230c46a743313957d8f38a159bda934cc735b2/EIPS/eip-7708.md) | ETH transfers emit a log |
|[EIP-7732](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-7732.md) | Enshrined Proposer-Builder Separation |
|[EIP-7778](https://eips.ethereum.org/EIPS/eip-7778) [`spec@ce17d00b`](https://github.com/ethereum/EIPs/blob/ce17d00b8341032a946301944124c4a6013032d6/EIPS/eip-7778.md) | Block Gas Accounting without Refunds |
|[EIP-7843](https://eips.ethereum.org/EIPS/eip-7843) [`spec@c3bfd4ba`](https://github.com/ethereum/EIPs/blob/c3bfd4ba41cf0fcbfe8c404f33ba89f5174971e0/EIPS/eip-7843.md) | SLOTNUM opcode |
|[EIP-7904](https://eips.ethereum.org/EIPS/eip-7904) | Compute Gas Cost Analysis (informational only) | ℹ️ |
|[EIP-7928](https://eips.ethereum.org/EIPS/eip-7928) [`spec@aca88aa0`](https://github.com/ethereum/EIPs/blob/aca88aa0932580c29d0233f902cb4390e88b8c41/EIPS/eip-7928.md) | Block-Level Access Lists — recipient excluded when a runtime halt precedes | :up:
|[EIP-7954](https://eips.ethereum.org/EIPS/eip-7954) [`spec@1dc9bc87`](https://github.com/ethereum/EIPs/blob/1dc9bc870f864d7ad1095fc73ba8ca098d02c732/EIPS/eip-7954.md) | Increase Maximum Contract Size (**→ 64 KiB**) |
|[EIP-7975](https://eips.ethereum.org/EIPS/eip-7975) | eth/70 - partial block receipt lists |
|[EIP-7976](https://eips.ethereum.org/EIPS/eip-7976) [`spec@c998ef94`](https://github.com/ethereum/EIPs/blob/c998ef94eb16a6af8a9b8e2084f947b17ea14865/EIPS/eip-7976.md) | Increase Calldata Floor Cost (64/64) |
|[EIP-7981](https://eips.ethereum.org/EIPS/eip-7981) [`spec@747b78c0`](https://github.com/ethereum/EIPs/blob/747b78c0edfdf04e9e2933ad1bec592d3318e1d9/EIPS/eip-7981.md) | Increase Access List Cost |
|[EIP-7997](https://eips.ethereum.org/EIPS/eip-7997) [`spec@a0a7f5ad`](https://github.com/ethereum/EIPs/blob/a0a7f5adb491fc6ad4b008f307899c30f348db22/EIPS/eip-7997.md) | Deterministic Factory Predeploy — spec unchanged; clients **must not** check contract existence at the fork boundary (no BAL read, no witness) | :up:
|[EIP-8024](https://eips.ethereum.org/EIPS/eip-8024) [`spec@34b49095`](https://github.com/ethereum/EIPs/blob/34b49095ca5f7343045da279f04e7ecd1e451393/EIPS/eip-8024.md) | Backward compatible SWAPN, DUPN, EXCHANGE
|[EIP-8037](https://eips.ethereum.org/EIPS/eip-8037) [`spec@a12902ae`](https://github.com/ethereum/EIPs/blob/a12902ae1b811c45a81b51bfce671cf7a1fb27f3/EIPS/eip-8037.md) | State Creation Gas — CPSB=1530, source-based refunds; "regular gas" renamed to **"execution gas"** (terminology only) | :up:
|[EIP-8038](https://eips.ethereum.org/EIPS/eip-8038) [`spec@fc232285`](https://github.com/ethereum/EIPs/blob/fc2322854d047ba1fd6e3ae9e61fb7a915535cb7/EIPS/eip-8038.md) | State-access gas cost update — **`COLD_STORAGE_ACCESS` stays 2,100** (no longer raised); `ACCOUNT_WRITE` **9,000**, `CREATE_ACCESS` **12,000**, `STORAGE_CLEAR_REFUND` **11,616**, `ACCESS_LIST_STORAGE_KEY_COST` **2,000**, `ACCESS_LIST_ADDRESS_COST` **2,900**, `CALL_VALUE` **11,300**; `COLD_ACCOUNT_ACCESS` 3,000 and `STORAGE_WRITE` 10,000 unchanged | :up:
|[EIP-8045](https://eips.ethereum.org/EIPS/eip-8045) | Exclude slashed validators from proposing |
|[EIP-8061](https://eips.ethereum.org/EIPS/eip-8061) | Increase exit and consolidation churn |
|[EIP-8070](https://eips.ethereum.org/EIPS/eip-8070) [`spec@43c7af02`](https://github.com/ethereum/EIPs/blob/43c7af020f1641924bed60565fde86f6ad3469df/EIPS/eip-8070.md) | Sparse Blobpool — **Engine API half now required**: `engine_getBlobsV3` *and* `V4` both served, FCU v4 `custody_columns`. eth/72 cell exchange stays optional; cell-level DAS deferred | :exclamation:
|[EIP-8136](https://eips.ethereum.org/EIPS/eip-8136) | Cell-Level Deltas for Data Column Broadcast | :new: :sparkles:
|[EIP-8159](https://eips.ethereum.org/EIPS/eip-8159) | eth/71 - Block Access List Exchange |
|[EIP-8189](https://eips.ethereum.org/EIPS/eip-8189) | snap/2 - BAL-Based State Healing | :new: :sparkles:
|[EIP-8246](https://eips.ethereum.org/EIPS/eip-8246) [`spec@3b30ff82`](https://github.com/ethereum/EIPs/blob/3b30ff829e5e698f1c6f69427111d194b80af38d/EIPS/eip-8246.md) | Remove SELFDESTRUCT Burn |
|[EIP-8261](https://eips.ethereum.org/EIPS/eip-8261) | Gas Limit Schedule (informational only) | :new: :sparkles: ℹ️ |
|[EIP-8282](https://github.com/ethereum/EIPs/pull/11760) [`spec@35ab20cb`](https://github.com/ethereum/EIPs/blob/35ab20cb31a416c50600da00125d262e1756850c/EIPS/eip-8282.md) | Add builder execution requests |
**Key:**
- :up: EIP has updated
- :new: New EIP added
- :exclamation: scope changed (now required)
- :sparkles: Optional (nice to have)
## Final gas limit changes
| Constant | Osaka | Amsterdam | Δ |
|----------|------:|----------:|--:|
| **Execution gas** | | | |
| `COLD_ACCOUNT_ACCESS` | 2,600 | 3,000 | +15.4% |
| `STORAGE_WRITE` | 2,800 | 10,000 | +257% |
| `CALL_VALUE` | 9,000 | 11,300 | +25.6% |
| `ACCOUNT_WRITE` | — | 9,000 | new |
| `CREATE_ACCESS` | — | 12,000 | new |
| `REFUND_STORAGE_CLEAR` | 4,800 | 11,616 | +142% |
| **Intrinsic tx gas (2780)** | | | |
| `TX_BASE` | 21,000 | 12,000 | −42.9% |
| `TX_VALUE_COST` | — | 6,000 | new |
| `TX_DATA_TOKEN_FLOOR` | 10 | 16 | +60% |
| `TX_ACCESS_LIST_ADDRESS` | 2,400 | 2,900 | +20.8% |
| `TX_ACCESS_LIST_STORAGE_KEY` | 1,900 | 2,000 | +5.3% |
| **State gas (new dimension)** | | | |
| `COST_PER_STATE_BYTE` | — | 1,530 | new |
| `NEW_ACCOUNT` | 25,000 | 183,600 | +634.4% |
| `STORAGE_SET` | 20,000 | 97,920 | +389.6% |
| `AUTH_BASE` | 12,500 | 35,190 | +181.5% |
## Testing focus
- **Fork transition** (primary goal): all clients through the fork without restarts. Regression checks from devnet-7: Lodestar+Besu/Erigon post-fork head hang, Teku rejecting valid buildoor bids, `debug_traceBlockByHash`, ePBS payload-body reconstruction.
- **SSZ / stable containers (EIP-7688) performance**: devnet-7 showed 10–20% slower processing across clients plus large-Merkle-tree issues with the big validator set. Verify the optimization round landed; compare block-processing/hashing metrics against devnet-7.
- **Builder lifecycle at scale**: each builder can only bid once per slot, so stressing the exit/withdrawal path needs breadth — deposit a few thousand builders, exit them en masse, drain the full-withdrawal sweep. Throughput bounds: deposits target 8/block on the 8282 contract (fee ramps exponentially above target; CL cap `MAX_BUILDER_DEPOSIT_REQUESTS_PER_PAYLOAD` = 64), exits ≤ `MAX_BUILDER_EXIT_REQUESTS_PER_PAYLOAD` = 16/payload, withdrawability +64 epochs, sweep scans ≤ `MAX_BUILDERS_PER_WITHDRAWALS_SWEEP` = 16,384 builders/block, sharing the withdrawal pipeline with the exited-validator sweep. Also stresses the `ProgressiveList` builder registry (ties into the SSZ goal). Note: assertoor `builder-lifecycle.yaml` skips its full-withdrawal step when `MIN_BUILDER_WITHDRAWABILITY_DELAY` ≥ 10 epochs — playbook needs extending for this scenario.
- **discv5-only verification**: each EL must publish — and refresh at the fork — the `eth` forkid ENR entry on its discv5 record; geth's dial-candidate filter drops nodes without it. Confirm bootnode ENR distribution, and watch for besu's silent V4 fallback masking failures.
- **Txpool across the fork**: start spamming before the fork (devnet-7 started post-fork) so pools full of pre-fork-priced txs (EIP-2780 intrinsic gas, create-with-value change) get revalidated at the boundary.
### Specs & Tests
**Consensus Layer**
- [x] target [`v1.7.0-alpha.14`](https://github.com/ethereum/consensus-specs/releases/tag/v1.7.0-alpha.14)
**Execution Layer**
- [x] target [tests-glamsterdam-devnet@v8.1.1](https://github.com/ethereum/execution-specs/releases/tag/tests-glamsterdam-devnet@v8.1.1)
- [x] follow-up release carrying the frozen repricing — [PR-12083](https://github.com/ethereum/EIPs/pull/12083) Merged :heavy_check_mark:
### Open PRs
**EIPs**
- [PR-11902 - EIP-7928: exclude the recipient when a runtime halt precedes](https://github.com/ethereum/EIPs/pull/11902) Merged :heavy_check_mark:
- [PR-11997 - EIP-2780: fold transfer log cost into TX_VALUE_COST](https://github.com/ethereum/EIPs/pull/11997) Merged :heavy_check_mark:
- [PR-11998 - EIP-8037: rename "regular gas" to "execution gas"](https://github.com/ethereum/EIPs/pull/11998) Merged :heavy_check_mark:
- [PR-12083 - EIP-8038: revise `COLD_STORAGE_ACCESS` and `ACCOUNT_WRITE` values](https://github.com/ethereum/EIPs/pull/12083) Merged :heavy_check_mark:
**Builder Specs**
[ethereum/builder-specs](https://github.com/ethereum/builder-specs) — best effort for devnet-8
- [PR-165 - request auth clarifications](https://github.com/ethereum/builder-specs/pull/165) Open :exclamation:
- Will there be a release?
**Beacon API**
- [ISSUE-599 - event to signal the builder that its bid was accepted](https://github.com/ethereum/beacon-APIs/issues/599) Open :exclamation:
- [PR-606 - feat: extend /eth/v1/node/peers with peer scoring and disconnect reasons](https://github.com/ethereum/beacon-APIs/pull/606) Open :exclamation:
- [PR-624 - remove BlindedExecutionPayloadEnvelope](https://github.com/ethereum/beacon-APIs/pull/624) Merged :heavy_check_mark:
- [PR-627 - Add `produceBlockV4WithBid`](https://github.com/ethereum/beacon-APIs/pull/627) Open :exclamation:
- [PR-629 - Add `head_v2` edge-case emissions note](https://github.com/ethereum/beacon-APIs/pull/629) Merged :heavy_check_mark:
- [PR-630 - Update Beacon API for parity with Builder API and KeyManager API](https://github.com/ethereum/beacon-APIs/pull/630) Open :exclamation:
- [PR-631 - Add execution_payload_value to produceBlockV4](https://github.com/ethereum/beacon-APIs/pull/631) Merged :heavy_check_mark:
**Keymanager API**
Best effort for devnet-8.
- [PR-87 - Deprecate prior and add /validator/config endpoint](https://github.com/ethereum/keymanager-APIs/pull/87) Closed :x:
- [PR-88 - add per-key builders endpoints](https://github.com/ethereum/keymanager-APIs/pull/88) Merged :heavy_check_mark:
**Review order for the builder-config stack:** keymanager (#87/#88) first — builder-specs#165 and beacon-APIs#630 both depend on the shape it lands on. Open points: whether to cut per-builder p2p config options; overloading `builder_pubkey` for p2p builders (makes `url` optional, which SSZ handles badly without a first-class `Optional`); `min_bid`/boost-factor are VC-local hints the beacon node must not forward. At least one client must implement e2e before merge — the reason this flow stays best effort for devnet-8.
**Consensus Specs**
*Builder-bid fork-choice — PR-5472 vs PR-5491, pick one before the freeze.* :exclamation:
- [PR-5294 - Add executable gossip validation functions for gloas](https://github.com/ethereum/consensus-specs/pull/5294) Merged :heavy_check_mark:
- [PR-5443 - Add dependent root check to `proposer_preferences` validation](https://github.com/ethereum/consensus-specs/pull/5443) Merged :heavy_check_mark:
- [PR-5459 - Add p2p helper functions for epoch inclusivity check](https://github.com/ethereum/consensus-specs/pull/5459) Merged :heavy_check_mark:
- [PR-5462 - Correct `MIN_SLOTS_FOR_INCLUSION_LISTS_REQUESTS` value](https://github.com/ethereum/consensus-specs/pull/5462) Merged :heavy_check_mark:
- [PR-5473 - Fix payload availability lookup using the parent block's slot](https://github.com/ethereum/consensus-specs/pull/5473) Merged :heavy_check_mark:
- [PR-5495 - Preserve PTC votes when a known block is re-delivered in Gloas](https://github.com/ethereum/consensus-specs/pull/5495) Merged :heavy_check_mark:
- [PR-5533 - Add optional EIP-8261 gas limit schedule](https://github.com/ethereum/consensus-specs/pull/5533) Merged :heavy_check_mark:
- [PR-5550 - Set the slot of the upgraded execution payload bid](https://github.com/ethereum/consensus-specs/pull/5550) Merged :heavy_check_mark:
**Execution APIs**
JSON-RPC alignment targeted for devnet-8.
- [PR-851 - eth/debug: specify block access list getter semantics](https://github.com/ethereum/execution-apis/pull/851) Open :exclamation:
- [PR-852 - debug: specify callTracer output and add EIP-8037 two-dimensional gas to tracing](https://github.com/ethereum/execution-apis/pull/852) Open :exclamation:
- [PR-854 - eth_createAccessList: clarify gas-fee affordability when fee fields omitted](https://github.com/ethereum/execution-apis/pull/854) Draft :exclamation:
- [PR-855 - debug: standardize callTracer output and add debug_traceCall](https://github.com/ethereum/execution-apis/pull/855) Draft :exclamation:
- **`rpc-compat` / hivechain**: blocked on the fork definition being stable enough to generate a chain loadable by production clients. A combined execution-apis branch is being assembled. **Action: declare the EL fork definition frozen modulo the repricing constants so hivechain generation can start.*
**Execution Specs**
- [PR-2948 - EIP-8070 sparse blobpool execute-only tests](https://github.com/ethereum/execution-specs/pull/2948) Merged :heavy_check_mark:
- [PR-3214 - fold transfer log cost into value transfer cost](https://github.com/ethereum/execution-specs/pull/3214) Merged :heavy_check_mark:
## Local testing
Kurtosis example:
```yaml
participants_matrix:
el:
- el_type: geth
el_image: ethpandaops/geth:glamsterdam-devnet-8
- el_type: ethrex
el_image: ethpandaops/ethrex:glamsterdam-devnet-8
- el_type: nethermind
el_image: ethpandaops/nethermind:glamsterdam-devnet-8
cl:
- cl_type: lodestar
cl_image: ethpandaops/lodestar:glamsterdam-devnet-8
network_params:
preset: minimal
gloas_fork_epoch: 1
additional_services:
- assertoor
- spamoor
- dora
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" }
- { file: "https://raw.githubusercontent.com/ethpandaops/assertoor/refs/heads/master/playbooks/gloas-dev/builder-deposit.yaml" }
global_log_level: debug
```
---
## Metrics
https://notes.ethereum.org/@ethpandaops/bal-otel
Previous devnet spec sheets for reference: https://notes.ethereum.org/@ethpandaops/glamsterdam-devnet-7