# fusaka-devnet-2 specs :::info :mega: fusaka-devnet-2 targets to launched on 26rd June 2025 ::: :::info We aim to test all validator custody features in this devnet ::: :::info Meta EIP status tracker: https://notes.ethereum.org/@marioevz/fusaka-sfi-tracker ::: :::info We want to test this network without getBlobv2 ::: ### Changes include: - Data column sidecars by root - validator custody (mandatory) - distributed blob building - shifting cell proof computation to transaction sender ### Discussion: - Who is going to work on EELS/EEST for proof computation to tx sender? ## EIP List for fusaka-devnet-2 The list below links the specific commit versions of the EIPs included in devnet-2. Fusaka mega [EIP-7607](https://eips.ethereum.org/EIPS/eip-7607) [EIP-7594: PeerDAS - Peer Data Availability Sampling](https://github.com/ethereum/EIPs/blob/ed447a1105230659fdce084710ae36bc309ff99f/EIPS/eip-7594.md) [EIP-7823: Set upper bounds for MODEXP](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-7823.md) [EIP-7825: Transaction Gas Limit Cap](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-7825.md) [EIP-7883: ModExp Gas Cost Increase](https://eips.ethereum.org/EIPS/eip-7883) [EIP-7892: Blob Parameter Only Hardforks](https://eips.ethereum.org/EIPS/eip-7892) [EIP-7907: Meter Contract Code Size And Increase Limit](https://eips.ethereum.org/EIPS/eip-7907) :new: [EIP-7917: Deterministic proposer lookahead](https://eips.ethereum.org/EIPS/eip-7917) [EIP-7918: Blob base fee bounded by execution cost](https://eips.ethereum.org/EIPS/eip-7918) [EIP-7934: RLP Execution Block Size Limit](https://eips.ethereum.org/EIPS/eip-7934) :new: [EIP-7939: Count leading zeros (CLZ) opcode](https://eips.ethereum.org/EIPS/eip-7939) :new: [EIP-7951: Precompile for secp256r1 Curve Support](https://github.com/ethereum/EIPs/pull/9833) :new: ### Test Releases **Consensus Specs:** Release [v1.6.0-alpha.2](https://github.com/ethereum/consensus-specs/releases/tag/v1.6.0-alpha.2) :heavy_check_mark: + ENR clarifications **Exection Spec Tests:** [[email protected]](https://github.com/ethereum/execution-spec-tests/releases/tag/fusaka-devnet-2%40v1.2.0) or newer :heavy_check_mark: ### Spec versions required & Open PRs **Beacon Metrics** [PeerDAS metrics: add data column, kzg, custody metrics](https://github.com/ethereum/beacon-metrics/pull/14) Open :exclamation: **Beacon API** [Add data_column_sidecar event to eventstream API](https://github.com/ethereum/beacon-APIs/pull/535) Merged :heavy_check_mark: [Add data column sidecars debug endpoint](https://github.com/ethereum/beacon-APIs/pull/537) Merged :heavy_check_mark: **Builder Specs** **Consensus Specs** [Modify fork digest to distinguish BPO forks + add entry to ENR](https://github.com/ethereum/consensus-specs/pull/4354) Merged :heavy_check_mark: [CGC: Update before Fulu](https://github.com/ethereum/consensus-specs/pull/4373) Merged :heavy_check_mark: [PeerDAS validator custody: Introduce Status RPC lowest_slot](https://github.com/ethereum/consensus-specs/pull/4374) Merged :heavy_check_mark: [Remove peer sampling in Fulu consensus-specs](https://github.com/ethereum/consensus-specs/pull/4393) Merged :heavy_check_mark: [Serve DataColumnSidecarsByRoot for finalized epochs consensus-specs](https://github.com/ethereum/consensus-specs/pull/4394) Merged :heavy_check_mark: [Add some clarifications around new ENR changes consensus-specs](https://github.com/ethereum/consensus-specs/pull/4406) Merged :heavy_check_mark: [Clarify peering expectations when nfd values are different consensus-specs](https://github.com/ethereum/consensus-specs/pull/4407) Merged :heavy_check_mark: **Execution APIs** **Execution Spec PRs** [Update EIP-7892: harden the spec with p2p details.](https://github.com/ethereum/EIPs/pull/9840) Merged :heavy_check_mark: [Update EIP-7594: Add blob count per tx limit via blobSchedule](https://github.com/ethereum/EIPs/pull/9623) Merged :heavy_check_mark: [Update EIP-7883: Assume minimal base/mod length of 32](https://github.com/ethereum/EIPs/pull/9855) Merged :heavy_check_mark: **Execution Spec Tests PRs** [feat(tests): peerdas tracking issue](https://github.com/ethereum/execution-spec-tests/issues/1301) Open :exclamation: ### Validator custody | Client | Status | |------------|---------| | Teku | Supports with backfill | | Nimbus | Supports without backfill | | Prysm | Supports without backfill | | Lighthouse | Supports without backfill | | Grandine | Supports without backfill | | Lodestar | Supports without backfill | ## Kurtosis Interop Conifg (Pre-devnet testing) ```yaml participants_matrix: el: - el_type: besu el_image: ethpandaops/besu:fusaka-devnet-2 - el_type: reth el_image: ethpandaops/reth:fusaka-devnet-2 - el_type: nimbus el_image: ethpandaops/nimbus-eth1:fusaka-devnet-2 - el_type: erigon el_image: ethpandaops/erigon:fusaka-devnet-2 - el_type: geth el_image: ethpandaops/geth:fusaka-devnet-2 - el_type: nethermind el_image: ethpandaops/nethermind:fusaka-devnet-2 cl: - cl_type: lighthouse cl_image: ethpandaops/lighthouse:fusaka-devnet-2 supernode: true - cl_type: prysm cl_image: ethpandaops/prysm-beacon-chain:fusaka-devnet-2 supernode: true - cl_type: teku cl_image: ethpandaops/teku:fusaka-devnet-2 supernode: true - cl_type: grandine cl_image: ethpandaops/grandine:fusaka-devnet-2 supernode: true - cl_type: lodestar cl_image: ethpandaops/lodestar:fusaka-devnet-2 supernode: true network_params: fulu_fork_epoch: 1 bpo_1_epoch: 2 bpo_1_max_blobs: 12 bpo_1_target_blobs: 9 bpo_2_epoch: 3 bpo_2_max_blobs: 6 bpo_2_target_blobs: 4 bpo_3_epoch: 4 bpo_3_max_blobs: 9 bpo_3_target_blobs: 6 bpo_4_epoch: 5 bpo_4_max_blobs: 18 bpo_4_target_blobs: 12 bpo_5_epoch: 6 bpo_5_max_blobs: 9 bpo_5_target_blobs: 6 withdrawal_type: "0x02" preset: mainnet additional_services: - dora - spamoor spamoor_params: image: ethpandaops/spamoor:master max_mem: 4000 spammers: - scenario: eoatx config: throughput: 200 - scenario: blobs config: throughput: 20 ``` ### Testing: #### EIP-7594: PeerDAS - Peer Data Availability Sampling * Validator custody testing - kurtosis - add validators and verify cgc value changes * This can be easy by setting validators to 0x02 credential and make manual deposits * MEV workflow testing - pending of flashbots/mock builder * Minimal spec testing * Minimal spec testing with mev workflow * Validator custody testing with assertoor. Have a new assertoor test where 0x02 credentials are toped up 32eth at a time and monitoring the node's cgc value to ensure that its going up as expected. * Sync testing script found [here](https://github.com/ethpandaops/kurtosis-sync-test/blob/main/README.md#peerdas-sync-test) * Figure out proper cgc behaviour, do we want the cgc value to change before fulu? Otherwise we might be without supernodes during fork transition. This would really stress the actual fork * Finalized root bug - what should the genesis root hash be? @potuz @hangleang * Prysm <> Grandine peering bug * What steps can we do to have resource optimization? We see significantly more ram usage with fulu active. * We see very stable 9 blob spamming with pre fulu. * Once fulu active, with the same constant load, we see significantly less blobs included. * We might need some assertoor test for checking the content of blob pool and see if a proposer have included all the blobs that is has seen locally. And then we can investigate if there are any client pairs that are struggling with local blob building with peerdas. * Test blob reconstruction. Have node propose only 50% of the columns, and see if all clients are able to complete reconstruction. #### EIP-7825: Transaction gas limit cap * Spamoor - create a new scenario with aiming to have 30M+ in a single transaction - @pk910 * Assertoor - verify that all ELs reject such tx * Malicous test - get a node that accepts 30M tx+ and see if we can propagate it in the network. Spamoor config: ```yaml= # wallet settings seed: gasburnertx-5 # seed for the wallet refill_amount: 5000000000000000000 # refill 5 ETH when refill_balance: 1000000000000000000 # balance drops below 1 ETH refill_interval: 600 # check every 10 minutes # scenario: gasburnertx total_count: 0 throughput: 1 max_pending: 2 max_wallets: 40 rebroadcast: 120 base_fee: 20 tip_fee: 2 gas_units_to_burn: 31000000 client_group: "" ``` Besu :heavy_check_mark: ``` 04 Jun 12:06:51 | Rejected invalid block 65 (0xcc465caeaca9e0a764bc1229350a61890ae76668a4ee83b19b3f1a15b6bde261), ExtraData: Nethermind v1.33.0a, reason: TxGasLimitCapExceeded: Gas limit 32050000 exceeed cap of 30000000. ``` Nethermind: #### EIP-7823, EIP-7883, EIP-7918 * Hive tests #### EIP-7892: Blob Parameter Only Hardforks * Kurtosis tests, going up, down with max blobs * Figure out final form of BPO [format](https://github.com/ethereum/EIPs/pull/9623) * Figure out future forks in blob schedule planning * Figure out if we want hard fork names in the blob schedule fields. * Test future compatibility, see if we can start with fulu genesis and higher BPO at genesis. * out of order fork execution issues, glamsterdam becoming active without triggering bpos #### EIP-7917: Deterministic proposer lookahead * Kurtosis local test to determine that interop works among all clients ## Client Interop Readiness Manu's test scenarios: https://hackmd.io/@manunalepa/BJzNsCnvyx ### Prysm | Scenario | Grandine | Lighthouse | Lodestar | Nimbus | Prysm | Teku | | -------- | -------- | ---------- | -------- | ------ | ----- | ---- | | 1a | :question: | :question: | :question: | :question: | :question: | :question: | | 1b | :question: | :question: | :question: | :question: | :question: | :question: | | 2a| :question: | :question: | :question: | :question: | :question: | :question: | | 2b | :question: | :question: | :question: | :question: | :question: | :question: | | 3a | :question: | :question: | :question: | :question: | :question: | :question: | | 3b | :question: | :question: | :question: | :question: | :question: | :question: | | 4 | :question: | :question: | :question: | :question: | :question: | :question: | ## Reference spec for previous devnet: https://notes.ethereum.org/@ethpandaops/fusaka-devnet-0 ### Open future Questions: - What values we want to set for maxBlobsPerTx for fulu and going forward