How does the bitcoin core efficiently distribute transactions so that they are added to node transaction pools to be inserted into a future block?

I understand that each bitcoin node has a list of peers which they are in communication with. As an originating node makes a payment, they send the payment across their peer network, which then continues the distribution process by forwarding the transactions to the peers within their peer list.

How is this process effeciently executed, such that transactions sent from one peer, sent numerous times across the network as it is distributed? (For further clarification of the problem, see my Problem Outline below.)

In other words, how does a node resolve which peers to send new transactions to so that the transactions can be included into their local transaction pool? If peer filtering doesn't take place, then the result would be a considerable amount of redundant, network traffic.


Consider the following...

  1. Distribution level #1 - Originator (A) sends a transaction to peers (B) & (C).
  2. Distribution level #2 - Peer (B) forwards the transaction to peers (D) & (E), & peer (C) forwards the transaction to peers (F) & (G).
  3. Distribution level #3 (Partial) - Peer (D) forwards the transaction to (C) and (G).

This is where we see the problem! Peer (D) is completely unaware that nodes (C) and (G) have already received this transaction. At best, (D) can only know that nodes (A)->(B)->(D) have received this transaction. Since (D) is completely unaware of the state of the transaction in nodes (C), (E) & (F), peer (D) can potentially forward the transaction along to a high number of peers that are aware of the transaction.

Scale this to thousands of nodes and thousands of transactions and you could have a BIG problem. How is this resolved?


Have a look into the specifications https://en.bitcoin.it/wiki/Protocol_specification

Check the "inv" --> "getdata" --> "tx" sequence of transaction distribution

  • Thank you. Wow, that is how I mentally outlined the possibility. I guess this is efficient, but it seems like advertising data can become a huge network bloat, with time. – RLH Aug 22 '14 at 12:27
  • Each node advertises data only to its peers. So, the incoming & outgoing traffic depends on the number (and size) of transactions, but does not depends on the size of network itself. – amaclin Aug 22 '14 at 12:32
  • Yes, I understand. However, as the network increase and the number of transactions increase, total-network traffic should expand exponentially, correct? This is ultimately a graphing issue but I'm not to familiar with graphs. I was just curious of how BTC solves this problem (or if I'm missing something and it's not an issue at all!) – RLH Aug 22 '14 at 12:44
  • The effective number of transactions is also limited by current protocol rules. Bitcoin miners solve ~6 blocks per hour, block can not be larger than 1 megabyte. Also there are some anti-flood mechanisms which prevent flood. – amaclin Aug 22 '14 at 12:58
  • Would you happen to have any links to articles/wiki details, regarding the flood prevention? – RLH Aug 22 '14 at 13:09

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.