# bogota-devnet-1 spec
:::info
:mega: bogota-devnet-1 launch date **TBD**.
:::
:::info
:checkered_flag: **Scope.** Second devnet for [EIP-8141 Frame Transactions](https://eips.ethereum.org/EIPS/eip-8141), adding the frame-tx companion EIPs [EIP-8250 Keyed Nonces](https://eips.ethereum.org/EIPS/eip-8250), [EIP-8272 Recent Roots](https://eips.ethereum.org/EIPS/eip-8272) and [EIP-7906 Transaction Assertions](https://eips.ethereum.org/EIPS/eip-7906). Formerly frames-devnet-1; the frames devnets are now bogota-devnet-*.
EL-only feature devnet: the EL activates **Bogota** at the Heze fork epoch while the CL side of Heze is suppressed (`FRAMES_ENABLED=true` in ethereum-genesis-generator).
Clients at genesis: geth, reth, ethrex (EL) + lighthouse (CL). nethermind and besu join as non-validating nodes until their branches pass (see [Clients](#Clients)).
:::
## Changes vs bogota-devnet-0
- New EIPs: 8250, 8272 and 7906.
- **Consensus change:** each non-zero EIP-8250 nonce key adds `KEYED_NONCE_ACCESS_COST` (12,100 gas) to intrinsic gas and the calldata floor, and consumed keys are recorded in the BAL ([EIPs PR-12457](https://github.com/ethereum/EIPs/pull/12457)).
- The EIP-8141 expiry verifier, EIP-8250 nonce manager and EIP-8272 recent root contract are ordinary contracts predeployed in genesis by ethereum-genesis-generator, at `0x81413f0cF12e9b6a49B1D0439E081c577D57FfFf`, `0x8250968C12e01A19d6F667b9B2F3b3A4d0e51cB7` and `0x8272D9679689Ea2f307140CdF9002D27dC00Ffff`. The fork no longer installs them.
## EIP List for bogota-devnet-1
| EIP | Title | Status |
|--------|-----|:-----:|
|[EIP-8141](https://eips.ethereum.org/EIPS/eip-8141) [`spec@af3a7802`](https://github.com/ethereum/EIPs/blob/af3a7802c8ea516f717c6013e27d0f529046f007/EIPS/eip-8141.md) | Frame Transaction | :up: |
|[EIP-8250](https://eips.ethereum.org/EIPS/eip-8250) [`spec@e3285064`](https://github.com/ethereum/EIPs/blob/e32850647e72d6287b7778c6899007abd1a78b1d/EIPS/eip-8250.md) | Keyed Nonces for Frame Transactions | :new: |
|[EIP-8272](https://eips.ethereum.org/EIPS/eip-8272) [`spec@5e32ce9a`](https://github.com/ethereum/EIPs/blob/5e32ce9abb16d8a8d1a55b65fc2aa55b606b882c/EIPS/eip-8272.md) | Recent Roots for Frame Transactions | :new: |
|[EIP-7906](https://eips.ethereum.org/EIPS/eip-7906) [`spec@4be9e59f`](https://github.com/ethereum/EIPs/blob/4be9e59ff8f1ea0613386eb1756f755a18cb7b51/EIPS/eip-7906.md) | Transaction Assertions via State Diff Opcode | :new: |
**Key:**
- :up: EIP has updated
- :new: New EIP added
Pins match [tests-bogota-devnet@v1.1.0](https://github.com/ethereum/execution-specs/releases/tag/tests-bogota-devnet@v1.1.0). Not in scope: [EIP-8298](https://eips.ethereum.org/EIPS/eip-8298) SETCODEFROM and [EIP-8253](https://eips.ethereum.org/EIPS/eip-8253) (genesis must set `DEPLOY_EIP8253_PRESTATE=false`).
## Clients
| Client | Image | Status |
|--------|-------|--------|
| geth | `ethpandaops/geth:bogota-devnet-1` (`8dfba15`) | ✅ all four EIPs, finalizes in kurtosis |
| reth | `ethpandaops/reth:bogota-devnet-1` (`7bde440`) | ✅ all four EIPs, finalizes in kurtosis |
| ethrex | `ethpandaops/ethrex:bogota-devnet-1` (`325a9be`) | ✅ all four EIPs, finalizes in kurtosis |
| nethermind | `ethpandaops/nethermind:bogota-devnet-1` (`60dab20`, amd64 only so far) | :hourglass: [#14639](https://github.com/NethermindEth/nethermind/pull/14639) (APPROVE edge cases, in v1.1.0 tests) is merged to master but not on `bogota-devnet-1` |
| besu | `ethpandaops/besu:bogota-devnet-1` (`5be59ce`) | :x: no EIP-8250 access cost (forks at the first frame tx with a non-zero nonce key), no 8272/7906 |
| lighthouse (CL) | `ethpandaops/lighthouse:unstable-8e0aeef` | ✅ CL stays on Gloas |
Not participating: erigon, nimbus-eth1 (no `bogota-devnet-1` branch).
**Known issues (RPC/mempool only, no consensus impact)**
- nethermind accepts frame txs over `MAX_VERIFY_GAS` into its public mempool ([nethermind ISSUE-14031](https://github.com/NethermindEth/nethermind/issues/14031)).
- nethermind `debug_traceBlockByHash` fails on blocks with frame txs: "frame transaction nonce too high".
- geth `prestateTracer` and `callTracer` panic on some frame txs.
- besu RPC returns "Invalid transaction type" for frame txs until [besu PR-11581](https://github.com/besu-eth/besu/pull/11581).
## Testing focus
- **Frame tx lifecycle e2e**: submit type-`0x06` txs through the public mempool, land them in blocks, verify per-frame receipts (`SUCCESS`/`FAILURE`/`SKIPPED`) across clients.
- **Atomic batches**: multi-EXECUTE-frame txs, rollback semantics when a later frame fails.
- **Keyed nonces (EIP-8250)**: independent nonce domains per sender through the nonce manager; state gas on a key's first use and the per-key access cost; validation-prefix restores can't revert approval effects.
- **Recent roots (EIP-8272)**: verification gas accounting; txs declaring stale or invalid roots are rejected.
- **Transaction assertions (EIP-7906)**: trailing `POST_TX` frames read the tx outcome via `TXTRACE`/`TXDIFF`/`EVENTDATACOPY`; a failing assertion reverts the execution body while the tx stays valid and pays gas; misplaced `POST_TX` frames make the tx invalid.
- **Fork transition**: EL Bogota at the Heze fork epoch while the CL stays on Gloas.
- **Mempool behavior**: dedicated frame-tx mempool section, replacement rules, blob frame txs.
- **Cross-client consensus**: shake out spec ambiguities before more clients implement (test-case tracker: [execution-specs discussion #3358](https://github.com/ethereum/execution-specs/discussions/3358)). spamoor `frametx` and `frametx-fuzz` both run against the devnet-1 genesis.
### Specs & Tests
**Execution Layer**
- [x] Test release [tests-bogota-devnet@v1.1.0](https://github.com/ethereum/execution-specs/releases/tag/tests-bogota-devnet@v1.1.0) from branch [`devnets/bogota/1`](https://github.com/ethereum/execution-specs/tree/devnets/bogota/1), tracked in [execution-specs ISSUE-3773](https://github.com/ethereum/execution-specs/issues/3773) :heavy_check_mark:. Supersedes `tests-frames-devnet@v1.0.0`; consensus-breaking via the EIP-8250 access cost.
- Hive: [`bogota` / `bogota-quick`](https://github.com/ethpandaops/hive-tests/pull/113) groups :heavy_check_mark:
### Open PRs
**EIPs**
- EIP-8141: [PR-12041 - assembled canonical paymaster reference bytecode](https://github.com/ethereum/EIPs/pull/12041) Open :exclamation:, [PR-12301 - define MAX_VERIFY_GAS as a shared mempool floor](https://github.com/ethereum/EIPs/pull/12301) Open :exclamation:, [PR-12321 - define early rejection and payer revalidation rules](https://github.com/ethereum/EIPs/pull/12321) Open :exclamation:, [PR-12340 - optional sender-keyed authority read](https://github.com/ethereum/EIPs/pull/12340) Open :exclamation:, [PR-12494 - clarify transient storage and deploy targets in trace rules](https://github.com/ethereum/EIPs/pull/12494) Open :exclamation:, [PR-12506 - set code from the default code in SENDER mode](https://github.com/ethereum/EIPs/pull/12506) Open :exclamation:, [PR-12512 - price every data byte the same](https://github.com/ethereum/EIPs/pull/12512) Open :exclamation:, [PR-12486](https://github.com/ethereum/EIPs/pull/12486), [PR-12502](https://github.com/ethereum/EIPs/pull/12502), [PR-12505](https://github.com/ethereum/EIPs/pull/12505) Draft :grey_exclamation:
- EIP-8250: [PR-12039 - define keyed mempool concurrency](https://github.com/ethereum/EIPs/pull/12039) Open :exclamation:, [PR-12352 - include nonce type to distinguish binary nonces](https://github.com/ethereum/EIPs/pull/12352) Open :exclamation:, [PR-12467](https://github.com/ethereum/EIPs/pull/12467), [PR-12511](https://github.com/ethereum/EIPs/pull/12511) Draft :grey_exclamation:
- EIP-8272: [PR-12310 - clarify public mempool scope](https://github.com/ethereum/EIPs/pull/12310) Open :exclamation:
- EIP-7906: [PR-12304 - add POST_TX_EXEMPT frame flag](https://github.com/ethereum/EIPs/pull/12304) Open :exclamation:, [PR-12516 - state the POST_TX rollback point via the EIP-8141 validation prefix](https://github.com/ethereum/EIPs/pull/12516) Open :exclamation:
**Execution APIs**
- [PR-894 - add EIP-8141 frame transaction simulation method](https://github.com/ethereum/execution-apis/pull/894) Open :exclamation:
- [PR-907 - frame transaction definitions](https://github.com/ethereum/execution-apis/pull/907) Open :exclamation:
- [PR-909 - specify callTracer and trace_* output for EIP-8141 frame transactions](https://github.com/ethereum/execution-apis/pull/909) Open :exclamation:
- [PR-910 - specify eth_simulateV1 ETH transfer logs for frame transactions](https://github.com/ethereum/execution-apis/pull/910) Draft :grey_exclamation:
- ethrex stopgap simulate RPC: [ethrex PR-6974 - `ethrex_simulateFrameTransaction`](https://github.com/lambdaclass/ethrex/pull/6974) Open :exclamation:
**Execution Specs**
- [PR-3492 - expose state-independent transaction validation](https://github.com/ethereum/execution-specs/pull/3492) Open :exclamation:
- [PR-3824 - test blob-carrying EIP-8141 frame transactions](https://github.com/ethereum/execution-specs/pull/3824) Open :exclamation:
- [PR-3825 - test blob-carrying EIP-8250 keyed frame transactions in their network wrapper](https://github.com/ethereum/execution-specs/pull/3825) Open :exclamation:
**Clients**
- [go-ethereum ISSUE-35783 - frame tx JSON-RPC: missing frames/frameReceipts/payer, wrong receipt status](https://github.com/ethereum/go-ethereum/issues/35783) Open :exclamation:
- [besu PR-11581 - render EIP-8141 frame transactions and receipts over JSON-RPC](https://github.com/besu-eth/besu/pull/11581) Open :exclamation:, [besu PR-11582 - EIP-8141 public mempool](https://github.com/besu-eth/besu/pull/11582) Draft :grey_exclamation:
**Tooling**
- [ethereum-genesis-generator PR-327 - predeploy the EIP-8272 recent root contract](https://github.com/ethpandaops/ethereum-genesis-generator/pull/327) Merged :heavy_check_mark: but unreleased (latest v6.2.4, which ethereum-package still pins). Use the `master` image until a release ships.
## Local testing
Kurtosis example. ethereum-package only auto-enables frames when an image tag contains `frame`, so keep `frames_enabled: true` explicit:
```yaml
participants:
- el_type: geth
el_image: ethpandaops/geth:bogota-devnet-1
cl_type: lighthouse
cl_image: ethpandaops/lighthouse:unstable-8e0aeef
- el_type: reth
el_image: ethpandaops/reth:bogota-devnet-1
cl_type: lighthouse
cl_image: ethpandaops/lighthouse:unstable-8e0aeef
- el_type: ethrex
el_image: ethpandaops/ethrex:bogota-devnet-1
cl_type: lighthouse
cl_image: ethpandaops/lighthouse:unstable-8e0aeef
network_params:
gloas_fork_epoch: 0
heze_fork_epoch: 1
frames_enabled: true
gas_limit: 200000000
genesis_gaslimit: 200000000
ethereum_genesis_generator_params:
image: ethpandaops/ethereum-genesis-generator:master
extra_env:
DEPLOY_EIP8253_PRESTATE: "false"
additional_services:
- dora
- spamoor
dora_params:
image: ethpandaops/dora:master
spamoor_params:
image: ethpandaops/spamoor:master
start_chainload: false
spammers:
- scenario: frametx
config:
throughput: 20
- scenario: frametx-fuzz
config:
throughput: 20
```
---
Previous devnet spec for reference: https://notes.ethereum.org/@ethpandaops/bogota-devnet-0
Looking for focil? https://notes.ethereum.org/@ethpandaops/heze-devnet-1