Simulating decoupled consensus

The test network

Mapping the devnet to mainnet: one attestation subnet

Mainnet model
447nodes in the subnet
Super 196 · 44%Home 251 · 56%
Our devnet
500nodes in the subnet
Super 200 · 40%Home 300 · 60%
MainnetDevnetchange
Nodes in a subnet447500 +12%
Validators per subnet per slot1,9682,518 +28%
Super node, down / up512 / 512 Mbps
Home node, down / up50 / 25 Mbps

A note on gossipsub

Subnet structure same as mainnet today

0 s 1 s 2 s 3 s 4 s 5 s 6 s 7 s 8 s 9 s 10 s 11 s 0 s 1 s 2 s 3 s 4 s 5 s 6 s 7 s 8 s 9 s 10 s 11 s Slot n Slot n + 1 Block Goldfish votes FFG votes FFG aggregates

Scenario 1 · staggered voting

0 s 1 s 2 s 3 s 4 s 5 s 6 s 7 s 8 s 9 s 10 s 11 s 12 s Block Payload Data columns Goldfish votes FFG votes FFG aggregates PTC votes

Scenario 1: arrival times

0 s 1 s 2 s 3 s 4 s 5 s 6 s 7 s 8 s 9 s 10 s 11 s 12 s arrival time after slot start Block Payload Data columns Goldfish votes FFG votes FFG aggregates PTC votes

Scenario 1: data usage, super node

objectFFG votesGoldfish votesPayloadPTC votesData columnsSync committeeBlockFFG aggregatesOther topics and control
kinddata (publish / partial message)IHAVEparts metadataIWANT
2026-10-13T11:48:34.130738 image/svg+xml Matplotlib v3.10.8, https://matplotlib.org/ 0 s 2 s 4 s 6 s 8 s 10 s 12 s 10.0 5.0 0.0 5.0 10.0 MB/s sent ↑ 25.3 MB in slot received ↓ 28.1 MB in slot slot 355

Scenario 1: data usage, home node

objectFFG votesGoldfish votesPayloadPTC votesData columnsSync committeeBlockFFG aggregatesOther topics and control
kinddata (publish / partial message)IHAVEparts metadataIWANT
2026-10-13T11:48:34.277050 image/svg+xml Matplotlib v3.10.8, https://matplotlib.org/ 0 s 2 s 4 s 6 s 8 s 10 s 12 s 6.0 4.0 2.0 0.0 2.0 4.0 6.0 MB/s sent ↑ 20.7 MB in slot received ↓ 21.7 MB in slot slot 355

EIP-8334: bundled attestation propagation

Attestation data and committee index, 136 BSignature, 96 BValidator index, 8 B
4 single attestations960 B
Attestation dataSignatureAttestation dataSignatureAttestation dataSignatureAttestation dataSignature
Bundle of 4 votes552 B
Attestation dataSignature 1Signature 2Signature 3Signature 4
Bytes per vote
240 B → 138 B

Scenario 2 · staggered voting + EIP-8334

Caveat: these numbers are worse than they would be in practice. The queues in this implementation were too small, and some messages were dropped.

0 s 1 s 2 s 3 s 4 s 5 s 6 s 7 s 8 s 9 s 10 s 11 s 12 s Block Payload Data columns Goldfish votes FFG votes FFG aggregates PTC votes

Scenario 2: arrival times

0 s 1 s 2 s 3 s 4 s 5 s 6 s 7 s 8 s 9 s 10 s 11 s 12 s arrival time after slot start Block Payload Data columns Goldfish votes FFG votes FFG aggregates PTC votes

Scenario 2: data usage, super node

objectFFG votesGoldfish votesPayloadPTC votesData columnsSync committeeBlockFFG aggregatesOther topics and control
kinddata (publish / partial message)IHAVEparts metadataIWANT
2026-10-13T11:48:34.451686 image/svg+xml Matplotlib v3.10.8, https://matplotlib.org/ 0 s 2 s 4 s 6 s 8 s 10 s 12 s 7.5 5.0 2.5 0.0 2.5 5.0 7.5 MB/s sent ↑ 15.1 MB in slot received ↓ 14.7 MB in slot slot 593

Scenario 2: data usage, home node

objectFFG votesGoldfish votesPayloadPTC votesData columnsSync committeeBlockFFG aggregatesOther topics and control
kinddata (publish / partial message)IHAVEparts metadataIWANT
2026-10-13T11:48:34.591486 image/svg+xml Matplotlib v3.10.8, https://matplotlib.org/ 0 s 2 s 4 s 6 s 8 s 10 s 12 s 3.0 2.0 1.0 0.0 1.0 2.0 3.0 MB/s sent ↑ 8.3 MB in slot received ↓ 10.2 MB in slot slot 593

Home node: FFG vote delay, scenario 1 vs 2

All FFG votes 0 250 500 750 1000 delay (ms) 0 p50 p90 p99 ━ Scenario 1 ━ Scenario 2

Caveat: scenario 2 is worse than it would be in practice. The queues in this implementation were too small, and some messages were dropped.

Home node: Goldfish vote delay, scenario 1 vs 2

All Goldfish votes 0 250 500 750 1000 1250 delay (ms) 0 p50 p90 p99 ━ Scenario 1 ━ Scenario 2

Caveat: scenario 2 is worse than it would be in practice. The queues in this implementation were too small, and some messages were dropped.

Home node: data usage, scenario 1 vs 2

FFG · scenario 1 16.9 MB sent · 17.7 MB receivedFFG · scenario 2 4.8 MB sent · 6.5 MB receivedEverything else · scenario 1 3.8 MB sent · 4.0 MB receivedEverything else · scenario 2 3.5 MB sent · 3.7 MB received
2026-10-13T11:48:34.714110 image/svg+xml Matplotlib v3.10.8, https://matplotlib.org/ 0 s 2 s 4 s 6 s 8 s 10 s 12 s 4.0 2.0 0.0 2.0 4.0 MB/s sent ↑ received ↓

Scenario 3 · three committees per subnet per slot

0 s 1 s 2 s 3 s 4 s 5 s 6 s 7 s 8 s 9 s 10 s 11 s 12 s Block Payload Data columns Goldfish votes FFG votes FFG aggregates PTC votes

Scenario 3: arrival times

0 s 1 s 2 s 3 s 4 s 5 s 6 s 7 s 8 s 9 s 10 s 11 s 12 s arrival time after slot start Block Payload Data columns Goldfish votes FFG votes · committee 1 FFG aggregates · committee 1 FFG votes · committee 2 FFG aggregates · committee 2 FFG votes · committee 3 FFG aggregates · committee 3 PTC votes

Scenario 3: data usage, super node

objectFFG votesGoldfish votesPayloadPTC votesData columnsSync committeeBlockFFG aggregatesOther topics and control
kinddata (publish / partial message)IHAVEparts metadataIWANT
2026-10-13T11:48:34.873572 image/svg+xml Matplotlib v3.10.8, https://matplotlib.org/ 0 s 2 s 4 s 6 s 8 s 10 s 12 s 10.0 5.0 0.0 5.0 10.0 MB/s sent ↑ 33.0 MB in slot received ↓ 36.8 MB in slot slot 331

Scenario 3: data usage, home node

objectFFG votesGoldfish votesPayloadPTC votesData columnsSync committeeBlockFFG aggregatesOther topics and control
kinddata (publish / partial message)IHAVEparts metadataIWANT
2026-10-13T11:48:35.013447 image/svg+xml Matplotlib v3.10.8, https://matplotlib.org/ 0 s 2 s 4 s 6 s 8 s 10 s 12 s 4.0 2.0 0.0 2.0 4.0 MB/s sent ↑ 14.2 MB in slot received ↓ 16.0 MB in slot slot 331

Staggered publishing vs multiple committees

Simulation for 4-slot round and 8-slot finality

eth-slot-sim on Shadow · 1,000 nodes (200 super, 800 home) · 1M validators · 64 FFG subnets · EIP-8334

0 s 1 s 2 s 3 s 4 s 5 s 6 s 7 s 8 s 9 s 10 s 11 s 12 s Block Payload Data columns Goldfish votes FFG votes FFG aggregates PTC votes

Arrival times: super nodes

eth-slot-sim on Shadow · 1,000 nodes (200 super, 800 home) · 1M validators · 64 FFG subnets · EIP-8334

0 s 1 s 2 s 3 s 4 s 5 s 6 s 7 s 8 s 9 s 10 s 11 s 12 s arrival time after slot start Block Payload Data columns Goldfish votes FFG votes FFG aggregates PTC votes

Arrival times: home nodes

eth-slot-sim on Shadow · 1,000 nodes (200 super, 800 home) · 1M validators · 64 FFG subnets · EIP-8334

0 s 1 s 2 s 3 s 4 s 5 s 6 s 7 s 8 s 9 s 10 s 11 s 12 s arrival time after slot start Block Payload Data columns Goldfish votes FFG votes FFG aggregates PTC votes

Data usage: super node

objectFFG votesGoldfish votesPayloadPTC votesData columnsBlockFFG aggregatesOther topics and control
kinddata (publish / partial message)parts metadataIHAVEIWANT
2026-10-13T11:22:58.398186 image/svg+xml Matplotlib v3.10.9, https://matplotlib.org/ 0 s 2 s 4 s 6 s 8 s 10 s 12 s 20.0 10.0 0.0 10.0 20.0 MB/s sent ↑ 88.3 MB in slot received ↓ 72.3 MB in slot super node 783 (median)

Data usage: home node

objectFFG votesGoldfish votesPayloadPTC votesData columnsBlockFFG aggregatesOther topics and control
kinddata (publish / partial message)parts metadataIHAVEIWANT
2026-10-13T11:22:58.524825 image/svg+xml Matplotlib v3.10.9, https://matplotlib.org/ 0 s 2 s 4 s 6 s 8 s 10 s 12 s 4.0 2.0 0.0 2.0 4.0 MB/s sent ↑ 22.6 MB in slot received ↓ 23.9 MB in slot home node 173 (median)