@ -119,17 +119,21 @@ static const int MAX_UNCONNECTING_HEADERS = 10;
/** Minimum blocks required to signal NODE_NETWORK_LIMITED */
static const unsigned int NODE_NETWORK_LIMITED_MIN_BLOCKS = 288 ;
/** Average delay between local address broadcasts */
static constexpr std : : chrono : : hours AVG_LOCAL_ADDRESS_BROADCAST_INTERVAL { 24 } ;
static constexpr auto AVG_LOCAL_ADDRESS_BROADCAST_INTERVAL = 24 h ;
/** Average delay between peer address broadcasts */
static constexpr std : : chrono : : seconds AVG_ADDRESS_BROADCAST_INTERVAL { 30 } ;
/** Average delay between trickled inventory transmissions in seconds.
* Blocks and peers with noban permission bypass this , outbound peers get half this delay . */
static const unsigned int INVENTORY_BROADCAST_INTERVAL = 5 ;
static constexpr auto AVG_ADDRESS_BROADCAST_INTERVAL = 30 s ;
/** Average delay between trickled inventory transmissions for inbound peers.
* Blocks and peers with noban permission bypass this . */
static constexpr auto INBOUND_INVENTORY_BROADCAST_INTERVAL = 5 s ;
/** Average delay between trickled inventory transmissions for outbound peers.
* Use a smaller delay as there is less privacy concern for them .
* Blocks and peers with noban permission bypass this . */
static constexpr auto OUTBOUND_INVENTORY_BROADCAST_INTERVAL = 2 s ;
/** Maximum rate of inventory items to send per second.
* Limits the impact of low - fee transaction floods . */
static constexpr unsigned int INVENTORY_BROADCAST_PER_SECOND = 7 ;
/** Maximum number of inventory items to send per transmission. */
static constexpr unsigned int INVENTORY_BROADCAST_MAX = INVENTORY_BROADCAST_PER_SECOND * INVENTORY_BROADCAST_INTERVAL;
static constexpr unsigned int INVENTORY_BROADCAST_MAX = INVENTORY_BROADCAST_PER_SECOND * count_seconds( INBOUND_ INVENTORY_BROADCAST_INTERVAL) ;
/** The number of most recently announced transactions a peer can request. */
static constexpr unsigned int INVENTORY_MAX_RECENT_RELAY = 3500 ;
/** Verify that INVENTORY_MAX_RECENT_RELAY is enough to cache everything typically
@ -138,9 +142,9 @@ static constexpr unsigned int INVENTORY_MAX_RECENT_RELAY = 3500;
* peers , and random variations in the broadcast mechanism . */
static_assert ( INVENTORY_MAX_RECENT_RELAY > = INVENTORY_BROADCAST_PER_SECOND * UNCONDITIONAL_RELAY_DELAY / std : : chrono : : seconds { 1 } , " INVENTORY_RELAY_MAX too low " ) ;
/** Average delay between feefilter broadcasts in seconds. */
static constexpr unsigned int AVG_FEEFILTER_BROADCAST_INTERVAL = 10 * 60 ;
static constexpr auto AVG_FEEFILTER_BROADCAST_INTERVAL = 10 min ;
/** Maximum feefilter broadcast delay after significant change. */
static constexpr unsigned int MAX_FEEFILTER_CHANGE_DELAY = 5 * 60 ;
static constexpr auto MAX_FEEFILTER_CHANGE_DELAY = 5 min ;
/** Maximum number of compact filters that may be requested with one getcfilters. See BIP 157. */
static constexpr uint32_t MAX_GETCFILTERS_SIZE = 1000 ;
/** Maximum number of cf hashes that may be requested with one getcfheaders. See BIP 157. */
@ -4669,10 +4673,9 @@ bool PeerManagerImpl::SendMessages(CNode* pto)
if ( pto - > m_tx_relay - > nNextInvSend < current_time ) {
fSendTrickle = true ;
if ( pto - > IsInboundConn ( ) ) {
pto - > m_tx_relay - > nNextInvSend = std: : chrono : : microseconds { m_connman. PoissonNextSendInbound ( c ount_microseconds( c urrent_time) , INVENTORY_BROADCAST_INTERVAL) } ;
pto - > m_tx_relay - > nNextInvSend = m_connman. PoissonNextSendInbound ( c urrent_time, INBOUND_ INVENTORY_BROADCAST_INTERVAL) ;
} else {
// Use half the delay for outbound peers, as there is less privacy concern for them.
pto - > m_tx_relay - > nNextInvSend = PoissonNextSend ( current_time , std : : chrono : : seconds { INVENTORY_BROADCAST_INTERVAL > > 1 } ) ;
pto - > m_tx_relay - > nNextInvSend = PoissonNextSend ( current_time , OUTBOUND_INVENTORY_BROADCAST_INTERVAL ) ;
}
}
@ -4927,10 +4930,10 @@ bool PeerManagerImpl::SendMessages(CNode* pto)
if ( pto - > m_tx_relay - > lastSentFeeFilter = = MAX_FILTER ) {
// Send the current filter if we sent MAX_FILTER previously
// and made it out of IBD.
pto - > m_tx_relay - > nextSendTimeFeeFilter = count_microseconds ( current_time ) - 1 ;
pto - > m_tx_relay - > m_next_send_feefilter = 0u s ;
}
}
if ( c ount_microseconds( c urrent_time) > pto - > m_tx_relay - > nextSendTimeFeeF ilter) {
if ( c urrent_time > pto - > m_tx_relay - > m_next_send_feef ilter) {
CAmount filterToSend = g_filter_rounder . round ( currentFilter ) ;
// We always have a fee filter of at least minRelayTxFee
filterToSend = std : : max ( filterToSend , : : minRelayTxFee . GetFeePerK ( ) ) ;
@ -4938,13 +4941,13 @@ bool PeerManagerImpl::SendMessages(CNode* pto)
m_connman . PushMessage ( pto , msgMaker . Make ( NetMsgType : : FEEFILTER , filterToSend ) ) ;
pto - > m_tx_relay - > lastSentFeeFilter = filterToSend ;
}
pto - > m_tx_relay - > nextSendTimeFeeF ilter = PoissonNextSend ( c ount_microseconds( c urrent_time) , AVG_FEEFILTER_BROADCAST_INTERVAL ) ;
pto - > m_tx_relay - > m_next_send_feef ilter = PoissonNextSend ( c urrent_time, AVG_FEEFILTER_BROADCAST_INTERVAL ) ;
}
// If the fee filter has changed substantially and it's still more than MAX_FEEFILTER_CHANGE_DELAY
// until scheduled broadcast, then move the broadcast to within MAX_FEEFILTER_CHANGE_DELAY.
else if ( c ount_microseconds( c urrent_time) + MAX_FEEFILTER_CHANGE_DELAY * 1000000 < pto - > m_tx_relay - > nextSendTimeFeeF ilter & &
else if ( c urrent_time + MAX_FEEFILTER_CHANGE_DELAY < pto - > m_tx_relay - > m_next_send_feef ilter & &
( currentFilter < 3 * pto - > m_tx_relay - > lastSentFeeFilter / 4 | | currentFilter > 4 * pto - > m_tx_relay - > lastSentFeeFilter / 3 ) ) {
pto - > m_tx_relay - > nextSendTimeFeeFilter = count_microseconds ( current_time ) + GetRandInt ( MAX_FEEFILTER_CHANGE_DELAY ) * 1000000 ;
pto - > m_tx_relay - > m_next_send_feefilter = current_time + GetRandomDuration < std : : chrono : : microseconds > ( MAX_FEEFILTER_CHANGE_DELAY ) ;
}
}
} // release cs_main