When a node receives a transaction it verifies it and then sends it to its neighbors.
My question is: does the node broadcast the transaction right away or is there a delay built in (privacy concerns) and if there is a delay built in can anyone point me to the code where that happens?
1 Answer
Yes, there is what is called transaction trickling. This is a mechanism to select a random peer for immediate forwarding of all transactions, while others receive the transaction after a random timeout. This is done in order to reduce the chances of fingerprinting the origin of a transaction. Similar to the proposed dandelion paper, it forwards a transaction through a conduit of peers before spreading it widely in the network, and observers cannot identify the origin by simply timing the time peers announce the transaction's availability.
-
8Trickling was removed in 0.13.0. All transactions are now delayed until their next broadcast events, which happen at Poisson-distributed times. Sep 7, 2017 at 23:48
-
@PieterWuille can you point me to the implementation of this? Is it the PoissonNextSend() ?– Albert SSep 8, 2017 at 17:34
-
1Indeed, that's the function to compute Poisson-distributed intervals between send events. Oct 8, 2017 at 0:39
-
1It's a product with the precomputed inverse, because that is faster. And with u uniform in [0..1], log(u) and log(1-u) are equivalent. +0.5 is for rounding before converting to an integer. Nov 6, 2017 at 15:31
-
1lambda is the rate. rate is the inverse of the time between events. Nov 7, 2017 at 18:00