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?


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.

  • 8
    Trickling was removed in 0.13.0. All transactions are now delayed until their next broadcast events, which happen at Poisson-distributed times. Sep 7 '17 at 23:48
  • @PieterWuille can you point me to the implementation of this? Is it the PoissonNextSend() ?
    – Albert s
    Sep 8 '17 at 17:34
  • 1
    Indeed, that's the function to compute Poisson-distributed intervals between send events. Oct 8 '17 at 0:39
  • 1
    It'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 '17 at 15:31
  • 1
    lambda is the rate. rate is the inverse of the time between events. Nov 7 '17 at 18:00

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.