# 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