Over a 24-hour observation period across 35 ethpandaops observation nodes:
Gossipsub is a peer-to-peer messaging protocol designed for reliability. Each node maintains a "mesh" of 6-12 peers per topic. When a message enters the network, it propagates through these meshes independently.
The result: most nodes receive the same message from multiple peers. Only the first arrival is useful—the rest are duplicates that get discarded.
With a mesh degree of 8 (typical), the theoretical minimum duplicate rate would be (8-1)/8 = 87.5%. The observed 80% is actually better than theory because fast propagation prevents some duplicates from arriving before a node has already processed and forwarded the message.
The red area represents wasted bandwidth (duplicates). The green area is useful traffic. The ratio stays remarkably stable around 80/20.
| Topic | Duplicate GB/day | Duplicate % |
|---|---|---|
| Attestations | 8.53 | 79.5% |
| PeerDAS Columns | 4.92 | 87.8% |
| Aggregates | 3.20 | 80.5% |
| Blocks | 1.46 | 80.1% |
| Sync Committee | 0.09 | 72.7% |
Attestations dominate because there are 64 attestation subnets, each producing thousands of messages per slot. PeerDAS columns are the second largest contributor—a sign of growing adoption of data availability sampling.
The 80% duplicate rate is working as intended. Gossipsub prioritizes message reliability over bandwidth efficiency. The tradeoff:
For home stakers on metered connections, this is worth knowing. For cloud-hosted validators, the egress costs are real but probably not dominant.
Source: libp2p_duplicate_message and libp2p_deliver_message tables (xatu cluster)
Network: Ethereum mainnet
Date range: 2026-02-01 10:00 to 2026-02-02 10:00 UTC
Observation nodes: 35 ethpandaops nodes
SELECT
topic_name,
SUM(duplicates) AS total_duplicates,
SUM(delivered) AS total_delivered,
round(SUM(duplicates) * 100.0 /
(SUM(duplicates) + SUM(delivered)), 2) AS duplicate_pct
FROM (
SELECT topic_name, COUNT() AS duplicates, 0 AS delivered
FROM libp2p_duplicate_message
WHERE meta_network_name = 'mainnet'
AND event_date_time >= now() - INTERVAL 24 HOUR
GROUP BY topic_name
UNION ALL
SELECT topic_name, 0 AS duplicates, COUNT() AS delivered
FROM libp2p_deliver_message
WHERE meta_network_name = 'mainnet'
AND event_date_time >= now() - INTERVAL 24 HOUR
GROUP BY topic_name
)
GROUP BY topic_name
ORDER BY total_duplicates DESC
Ethereum's gossipsub protocol is doing exactly what it's designed to do: sacrificing bandwidth efficiency for message reliability. The 80% duplicate rate means the network is robust against peer failures and partitions.
There's no optimization to do here—this is the intended behavior. But it's useful context for understanding the real bandwidth costs of running an Ethereum node.