A Kademlia-inspired modification of Dandelion for use in Grin.


On boot and restart, Grin nodes pick a random 256-bit node id which is broadcast to their peers.

Upon receiving a block, a new epoch begins if block_height % 10 == 0. The epoch id is the 256-bit blake2b hash of the block hash of the block that started the epoch. (I.E. the double blake2b hash of the block header.)

At the start of each epoch, every node:

Then, for every stem transaction received:


"Heavy" peers will naturally be chosen for relay targets, creating agreed-upon stem paths and fluff sinks, and leading to more opportunities for transaction aggregation.