EthResearch Technical Report ·

Number Duplicate Messages in Ethereum’s Gossipsub Network

Mikel Cortes · Yiannis Psaras

Abstract

This duplicate message analysis by Yiannis Psaras from ProbeLab investigates the prevalence and characteristics of duplicate messages in Ethereum's GossipSub network using the Hermes monitoring tool over a 3.5-hour period on Holesky testnet. The study establishes a theoretical framework predicting that with a mesh degree (k) of 8, nodes should receive approximately 3 duplicates per message (calculated as (k-2)/2), and confirms this for certain message types while revealing significant variations across different topics: beacon_block messages show almost no non-duplicated instances (1-2%) with 54% receiving the expected 3 duplicates but outliers reaching 34-40 copies, while smaller, more frequent messages like beacon_aggregate_and_proof show 32-45% with no duplicates and 50% with fewer than 2 duplicates. The analysis finds no correlation between message size and duplicate count, and reveals a critical temporal pattern where 50% of duplicate arrivals occur within 73 milliseconds of the original message, enabling potential optimization. The study identifies that numerous duplicates originate from IWANT messages sent milliseconds before the same message arrives through mesh propagation, leading to two key recommendations: implementing a concurrency limiter on IWANT messages (similar to Kademlia's alpha parameter) and increasing the heartbeat interval from 0.7 to 1.0 seconds to reduce excessive IHAVE messages and duplicate-generating race conditions. The authors conclude that GossipSub 1.2's proposed IDONTWANT control message would be valuable for preventing the majority of duplicates.

Citation

@misc{psaras2024duplicates,
	title        = {Number Duplicate Messages in Ethereum's {GossipSub} Network},
	author       = {Mikel Cortes, Yiannis Psaras},
	year         = 2024,
	month        = {June},
	url          = {https://ethresear.ch/t/number-duplicate-messages-in-ethereums-gossipsub-network/19921},
	note         = {Accessed: \today},
	organization = {Ethereum Research}
}