@@ -147,8 +147,12 @@ static constexpr auto OUTBOUND_INVENTORY_BROADCAST_INTERVAL{2s};
147
147
/* * Maximum rate of inventory items to send per second.
148
148
* Limits the impact of low-fee transaction floods. */
149
149
static 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);
150
152
/* * 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" );
152
156
/* * Average delay between feefilter broadcasts in seconds. */
153
157
static constexpr auto AVG_FEEFILTER_BROADCAST_INTERVAL{10min};
154
158
/* * Maximum feefilter broadcast delay after significant change. */
@@ -5630,7 +5634,7 @@ bool PeerManagerImpl::SendMessages(CNode* pto)
5630
5634
std::vector<CInv> vInv;
5631
5635
{
5632
5636
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 ));
5634
5638
5635
5639
// Add blocks
5636
5640
for (const uint256& hash : peer->m_blocks_for_inv_relay ) {
@@ -5707,8 +5711,8 @@ bool PeerManagerImpl::SendMessages(CNode* pto)
5707
5711
// especially since we have many peers and some will draw much shorter delays.
5708
5712
unsigned int nRelayedTransactions = 0 ;
5709
5713
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);
5712
5716
while (!vInvTx.empty () && nRelayedTransactions < broadcast_max) {
5713
5717
// Fetch the top element from the heap
5714
5718
std::pop_heap (vInvTx.begin (), vInvTx.end (), compareInvMempoolOrder);
0 commit comments