Skip to content

Commit 5b34060

Browse files
committed
net_processing: Boost inv trickle rate
If transactions are being added to the mempool at a rate faster than 7tx/s (INVENTORY_BROADCAST_PER_SECOND) then peers' inventory_to_send queue can become relatively large. If this happens, increase the number of txids we include in an INV message (normally capped at 35) by 5 for each 1000 txids in the queue. This will tend to clear a temporary excess out reasonably quickly; an excess of 4000 invs to send will be cleared down to 1000 in about 30 minutes, while an excess of 20000 invs would be cleared down to 1000 in about 60 minutes.
1 parent 228e920 commit 5b34060

File tree

1 file changed

+3
-1
lines changed

1 file changed

+3
-1
lines changed

src/net_processing.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5666,7 +5666,9 @@ bool PeerManagerImpl::SendMessages(CNode* pto)
56665666
// especially since we have many peers and some will draw much shorter delays.
56675667
unsigned int nRelayedTransactions = 0;
56685668
LOCK(tx_relay->m_bloom_filter_mutex);
5669-
while (!vInvTx.empty() && nRelayedTransactions < INVENTORY_BROADCAST_MAX) {
5669+
size_t broadcast_max{INVENTORY_BROADCAST_MAX + (tx_relay->m_tx_inventory_to_send.size()/1000)*5};
5670+
broadcast_max = std::min<size_t>(1000, broadcast_max);
5671+
while (!vInvTx.empty() && nRelayedTransactions < broadcast_max) {
56705672
// Fetch the top element from the heap
56715673
std::pop_heap(vInvTx.begin(), vInvTx.end(), compareInvMempoolOrder);
56725674
std::set<uint256>::iterator it = vInvTx.back();

0 commit comments

Comments
 (0)