Messages through a peer graph

Left: a normal service. The origin fills edge caches, and every viewer pulls every chunk from an edge. Right: a swarm. Viewers fetch chunks from nearby viewers that already have them, and only fall back to the seeder when no peer has the chunk.

Last message

payload (first copy)
duplicate payload (wasted)
IHAVE / digest (ids only)
GRAFT / IWANT / solicit (pull + repair)
tree link (Plumtree, static tree, bimodal)
message lost on a link
✕dead node
bad peer
Illustrative model. Toy latencies (10–100 ms per link), one message at a time, layout chosen for legibility (real overlays have no geography). Plumtree timers follow the client code (IHAVE every 200 ms to 3 lazy links, GRAFT after 500 ms, retry 300 ms). Gossipsub uses the libp2p spec defaults (D 6, D_lo 4, D_hi 12, D_lazy 6, 1 s heartbeat) without scoring. Real numbers are in the write-up. bignorth / 大北