@@ -147,8 +147,12 @@ static constexpr auto OUTBOUND_INVENTORY_BROADCAST_INTERVAL{2s};
147147/* * Maximum rate of inventory items to send per second.
148148 * Limits the impact of low-fee transaction floods. */
149149static constexpr unsigned int INVENTORY_BROADCAST_PER_SECOND = 7 ;
150+ /* * Target number of tx inventory items to send per transmission. */
151+ static constexpr unsigned int INVENTORY_BROADCAST_TARGET = INVENTORY_BROADCAST_PER_SECOND * count_seconds (INBOUND_INVENTORY_BROADCAST_INTERVAL);
150152/* * Maximum number of inventory items to send per transmission. */
151- static constexpr unsigned int INVENTORY_BROADCAST_MAX = INVENTORY_BROADCAST_PER_SECOND * count_seconds (INBOUND_INVENTORY_BROADCAST_INTERVAL);
153+ static constexpr unsigned int INVENTORY_BROADCAST_MAX = 1000 ;
154+ static_assert (INVENTORY_BROADCAST_MAX >= INVENTORY_BROADCAST_TARGET, " INVENTORY_BROADCAST_MAX too low" );
155+ static_assert (INVENTORY_BROADCAST_MAX <= MAX_PEER_TX_ANNOUNCEMENTS, " INVENTORY_BROADCAST_MAX too high" );
152156/* * Average delay between feefilter broadcasts in seconds. */
153157static constexpr auto AVG_FEEFILTER_BROADCAST_INTERVAL{10min};
154158/* * Maximum feefilter broadcast delay after significant change. */
@@ -5630,7 +5634,7 @@ bool PeerManagerImpl::SendMessages(CNode* pto)
56305634 std::vector<CInv> vInv;
56315635 {
56325636 LOCK (peer->m_block_inv_mutex );
5633- vInv.reserve (std::max<size_t >(peer->m_blocks_for_inv_relay .size (), INVENTORY_BROADCAST_MAX ));
5637+ vInv.reserve (std::max<size_t >(peer->m_blocks_for_inv_relay .size (), INVENTORY_BROADCAST_TARGET ));
56345638
56355639 // Add blocks
56365640 for (const uint256& hash : peer->m_blocks_for_inv_relay ) {
@@ -5707,8 +5711,8 @@ bool PeerManagerImpl::SendMessages(CNode* pto)
57075711 // especially since we have many peers and some will draw much shorter delays.
57085712 unsigned int nRelayedTransactions = 0 ;
57095713 LOCK (tx_relay->m_bloom_filter_mutex );
5710- size_t broadcast_max{INVENTORY_BROADCAST_MAX + (tx_relay->m_tx_inventory_to_send .size ()/1000 )*5 };
5711- broadcast_max = std::min<size_t >(1000 , broadcast_max);
5714+ size_t broadcast_max{INVENTORY_BROADCAST_TARGET + (tx_relay->m_tx_inventory_to_send .size ()/1000 )*5 };
5715+ broadcast_max = std::min<size_t >(INVENTORY_BROADCAST_MAX , broadcast_max);
57125716 while (!vInvTx.empty () && nRelayedTransactions < broadcast_max) {
57135717 // Fetch the top element from the heap
57145718 std::pop_heap (vInvTx.begin (), vInvTx.end (), compareInvMempoolOrder);
0 commit comments