Bitcoin Core  27.99.0
P2P Digital Currency
Variables
net_processing.cpp File Reference
#include <net_processing.h>
#include <addrman.h>
#include <banman.h>
#include <blockencodings.h>
#include <blockfilter.h>
#include <chainparams.h>
#include <consensus/amount.h>
#include <consensus/validation.h>
#include <deploymentstatus.h>
#include <hash.h>
#include <headerssync.h>
#include <index/blockfilterindex.h>
#include <kernel/chain.h>
#include <kernel/mempool_entry.h>
#include <logging.h>
#include <merkleblock.h>
#include <netbase.h>
#include <netmessagemaker.h>
#include <node/blockstorage.h>
#include <node/txreconciliation.h>
#include <policy/fees.h>
#include <policy/policy.h>
#include <policy/settings.h>
#include <primitives/block.h>
#include <primitives/transaction.h>
#include <random.h>
#include <reverse_iterator.h>
#include <scheduler.h>
#include <streams.h>
#include <sync.h>
#include <timedata.h>
#include <tinyformat.h>
#include <txmempool.h>
#include <txorphanage.h>
#include <txrequest.h>
#include <util/check.h>
#include <util/strencodings.h>
#include <util/time.h>
#include <util/trace.h>
#include <validation.h>
#include <algorithm>
#include <atomic>
#include <future>
#include <memory>
#include <optional>
#include <typeinfo>
#include <utility>
Include dependency graph for net_processing.cpp:

Go to the source code of this file.

Variables

static constexpr auto HEADERS_DOWNLOAD_TIMEOUT_BASE = 15min
 Headers download timeout. More...
 
static constexpr auto HEADERS_DOWNLOAD_TIMEOUT_PER_HEADER = 1ms
 
static constexpr auto HEADERS_RESPONSE_TIME {2min}
 How long to wait for a peer to respond to a getheaders request. More...
 
static constexpr int32_t MAX_OUTBOUND_PEERS_TO_PROTECT_FROM_DISCONNECT = 4
 Protect at least this many outbound peers from disconnection due to slow/ behind headers chain. More...
 
static constexpr auto CHAIN_SYNC_TIMEOUT {20min}
 Timeout for (unprotected) outbound peers to sync to our chainwork. More...
 
static constexpr auto STALE_CHECK_INTERVAL {10min}
 How frequently to check for stale tips. More...
 
static constexpr auto EXTRA_PEER_CHECK_INTERVAL {45s}
 How frequently to check for extra outbound peers and disconnect. More...
 
static constexpr auto MINIMUM_CONNECT_TIME {30s}
 Minimum time an outbound-peer-eviction candidate must be connected for, in order to evict. More...
 
static constexpr uint64_t RANDOMIZER_ID_ADDRESS_RELAY = 0x3cac0035b5866b90ULL
 SHA256("main address relay")[0:8]. More...
 
static constexpr int STALE_RELAY_AGE_LIMIT = 30 * 24 * 60 * 60
 Age after which a stale block will no longer be served if requested as protection against fingerprinting. More...
 
static constexpr int HISTORICAL_BLOCK_AGE = 7 * 24 * 60 * 60
 Age after which a block is considered historical for purposes of rate limiting block relay. More...
 
static constexpr auto PING_INTERVAL {2min}
 Time between pings automatically sent out for latency probing and keepalive. More...
 
static const unsigned int MAX_LOCATOR_SZ = 101
 The maximum number of entries in a locator. More...
 
static const unsigned int MAX_INV_SZ = 50000
 The maximum number of entries in an 'inv' protocol message. More...
 
static constexpr int32_t MAX_PEER_TX_REQUEST_IN_FLIGHT = 100
 Maximum number of in-flight transaction requests from a peer. More...
 
static constexpr int32_t MAX_PEER_TX_ANNOUNCEMENTS = 5000
 Maximum number of transactions to consider for requesting, per peer. More...
 
static constexpr auto TXID_RELAY_DELAY {2s}
 How long to delay requesting transactions via txids, if we have wtxid-relaying peers. More...
 
static constexpr auto NONPREF_PEER_TX_DELAY {2s}
 How long to delay requesting transactions from non-preferred peers. More...
 
static constexpr auto OVERLOADED_PEER_TX_DELAY {2s}
 How long to delay requesting transactions from overloaded peers (see MAX_PEER_TX_REQUEST_IN_FLIGHT). More...
 
static constexpr auto GETDATA_TX_INTERVAL {60s}
 How long to wait before downloading a transaction from an additional peer. More...
 
static const unsigned int MAX_GETDATA_SZ = 1000
 Limit to avoid sending big packets. More...
 
static const int MAX_BLOCKS_IN_TRANSIT_PER_PEER = 16
 Number of blocks that can be requested at any given time from a single peer. More...
 
static constexpr auto BLOCK_STALLING_TIMEOUT_DEFAULT {2s}
 Default time during which a peer must stall block download progress before being disconnected. More...
 
static constexpr auto BLOCK_STALLING_TIMEOUT_MAX {64s}
 Maximum timeout for stalling block download. More...
 
static const unsigned int MAX_HEADERS_RESULTS = 2000
 Number of headers sent in one getheaders result. More...
 
static const int MAX_CMPCTBLOCK_DEPTH = 5
 Maximum depth of blocks we're willing to serve as compact blocks to peers when requested. More...
 
static const int MAX_BLOCKTXN_DEPTH = 10
 Maximum depth of blocks we're willing to respond to GETBLOCKTXN requests for. More...
 
static const unsigned int BLOCK_DOWNLOAD_WINDOW = 1024
 Size of the "block download window": how far ahead of our current height do we fetch? Larger windows tolerate larger download speed differences between peer, but increase the potential degree of disordering of blocks on disk (which make reindexing and pruning harder). More...
 
static constexpr double BLOCK_DOWNLOAD_TIMEOUT_BASE = 1
 Block download timeout base, expressed in multiples of the block interval (i.e. More...
 
static constexpr double BLOCK_DOWNLOAD_TIMEOUT_PER_PEER = 0.5
 Additional block download timeout per parallel downloading peer (i.e. More...
 
static const unsigned int MAX_BLOCKS_TO_ANNOUNCE = 8
 Maximum number of headers to announce when relaying blocks with headers message. More...
 
static const int MAX_NUM_UNCONNECTING_HEADERS_MSGS = 10
 Maximum number of unconnecting headers announcements before DoS score. More...
 
static const unsigned int NODE_NETWORK_LIMITED_MIN_BLOCKS = 288
 Minimum blocks required to signal NODE_NETWORK_LIMITED. More...
 
static const unsigned int NODE_NETWORK_LIMITED_ALLOW_CONN_BLOCKS = 144
 Window, in blocks, for connecting to NODE_NETWORK_LIMITED peers. More...
 
static constexpr auto AVG_LOCAL_ADDRESS_BROADCAST_INTERVAL {24h}
 Average delay between local address broadcasts. More...
 
static constexpr auto AVG_ADDRESS_BROADCAST_INTERVAL {30s}
 Average delay between peer address broadcasts. More...
 
static constexpr auto ROTATE_ADDR_RELAY_DEST_INTERVAL {24h}
 Delay between rotating the peers we relay a particular address to. More...
 
static constexpr auto INBOUND_INVENTORY_BROADCAST_INTERVAL {5s}
 Average delay between trickled inventory transmissions for inbound peers. More...
 
static constexpr auto OUTBOUND_INVENTORY_BROADCAST_INTERVAL {2s}
 Average delay between trickled inventory transmissions for outbound peers. More...
 
static constexpr unsigned int INVENTORY_BROADCAST_PER_SECOND = 7
 Maximum rate of inventory items to send per second. More...
 
static constexpr unsigned int INVENTORY_BROADCAST_TARGET = INVENTORY_BROADCAST_PER_SECOND * count_seconds(INBOUND_INVENTORY_BROADCAST_INTERVAL)
 Target number of tx inventory items to send per transmission. More...
 
static constexpr unsigned int INVENTORY_BROADCAST_MAX = 1000
 Maximum number of inventory items to send per transmission. More...
 
static constexpr auto AVG_FEEFILTER_BROADCAST_INTERVAL {10min}
 Average delay between feefilter broadcasts in seconds. More...
 
static constexpr auto MAX_FEEFILTER_CHANGE_DELAY {5min}
 Maximum feefilter broadcast delay after significant change. More...
 
static constexpr uint32_t MAX_GETCFILTERS_SIZE = 1000
 Maximum number of compact filters that may be requested with one getcfilters. More...
 
static constexpr uint32_t MAX_GETCFHEADERS_SIZE = 2000
 Maximum number of cf hashes that may be requested with one getcfheaders. More...
 
static constexpr size_t MAX_PCT_ADDR_TO_SEND = 23
 the maximum percentage of addresses from our addrman to return in response to a getaddr message. More...
 
static constexpr size_t MAX_ADDR_TO_SEND {1000}
 The maximum number of address records permitted in an ADDR message. More...
 
static constexpr double MAX_ADDR_RATE_PER_SECOND {0.1}
 The maximum rate of address records we're willing to process on average. More...
 
static constexpr size_t MAX_ADDR_PROCESSING_TOKEN_BUCKET {MAX_ADDR_TO_SEND}
 The soft limit of the address processing token bucket (the regular MAX_ADDR_RATE_PER_SECOND based increments won't go above this, but the MAX_ADDR_TO_SEND increment following GETADDR is exempt from this limit). More...
 
static constexpr uint64_t CMPCTBLOCKS_VERSION {2}
 The compactblocks version we support. More...
 

Variable Documentation

◆ AVG_ADDRESS_BROADCAST_INTERVAL

constexpr auto AVG_ADDRESS_BROADCAST_INTERVAL {30s}
staticconstexpr

Average delay between peer address broadcasts.

Definition at line 141 of file net_processing.cpp.

◆ AVG_FEEFILTER_BROADCAST_INTERVAL

constexpr auto AVG_FEEFILTER_BROADCAST_INTERVAL {10min}
staticconstexpr

Average delay between feefilter broadcasts in seconds.

Definition at line 161 of file net_processing.cpp.

◆ AVG_LOCAL_ADDRESS_BROADCAST_INTERVAL

constexpr auto AVG_LOCAL_ADDRESS_BROADCAST_INTERVAL {24h}
staticconstexpr

Average delay between local address broadcasts.

Definition at line 139 of file net_processing.cpp.

◆ BLOCK_DOWNLOAD_TIMEOUT_BASE

constexpr double BLOCK_DOWNLOAD_TIMEOUT_BASE = 1
staticconstexpr

Block download timeout base, expressed in multiples of the block interval (i.e.

10 min)

Definition at line 127 of file net_processing.cpp.

◆ BLOCK_DOWNLOAD_TIMEOUT_PER_PEER

constexpr double BLOCK_DOWNLOAD_TIMEOUT_PER_PEER = 0.5
staticconstexpr

Additional block download timeout per parallel downloading peer (i.e.

5 min)

Definition at line 129 of file net_processing.cpp.

◆ BLOCK_DOWNLOAD_WINDOW

const unsigned int BLOCK_DOWNLOAD_WINDOW = 1024
static

Size of the "block download window": how far ahead of our current height do we fetch? Larger windows tolerate larger download speed differences between peer, but increase the potential degree of disordering of blocks on disk (which make reindexing and pruning harder).

We'll probably want to make this a per-peer adaptive value at some point.

Definition at line 125 of file net_processing.cpp.

◆ BLOCK_STALLING_TIMEOUT_DEFAULT

constexpr auto BLOCK_STALLING_TIMEOUT_DEFAULT {2s}
staticconstexpr

Default time during which a peer must stall block download progress before being disconnected.

the actual timeout is increased temporarily if peers are disconnected for hitting the timeout

Definition at line 110 of file net_processing.cpp.

◆ BLOCK_STALLING_TIMEOUT_MAX

constexpr auto BLOCK_STALLING_TIMEOUT_MAX {64s}
staticconstexpr

Maximum timeout for stalling block download.

Definition at line 112 of file net_processing.cpp.

◆ CHAIN_SYNC_TIMEOUT

constexpr auto CHAIN_SYNC_TIMEOUT {20min}
staticconstexpr

Timeout for (unprotected) outbound peers to sync to our chainwork.

Definition at line 67 of file net_processing.cpp.

◆ CMPCTBLOCKS_VERSION

constexpr uint64_t CMPCTBLOCKS_VERSION {2}
staticconstexpr

The compactblocks version we support.

See BIP 152.

Definition at line 180 of file net_processing.cpp.

◆ EXTRA_PEER_CHECK_INTERVAL

constexpr auto EXTRA_PEER_CHECK_INTERVAL {45s}
staticconstexpr

How frequently to check for extra outbound peers and disconnect.

Definition at line 71 of file net_processing.cpp.

◆ GETDATA_TX_INTERVAL

constexpr auto GETDATA_TX_INTERVAL {60s}
staticconstexpr

How long to wait before downloading a transaction from an additional peer.

Definition at line 103 of file net_processing.cpp.

◆ HEADERS_DOWNLOAD_TIMEOUT_BASE

constexpr auto HEADERS_DOWNLOAD_TIMEOUT_BASE = 15min
staticconstexpr

Headers download timeout.

Timeout = base + per_header * (expected number of headers)

Definition at line 58 of file net_processing.cpp.

◆ HEADERS_DOWNLOAD_TIMEOUT_PER_HEADER

constexpr auto HEADERS_DOWNLOAD_TIMEOUT_PER_HEADER = 1ms
staticconstexpr

Definition at line 59 of file net_processing.cpp.

◆ HEADERS_RESPONSE_TIME

constexpr auto HEADERS_RESPONSE_TIME {2min}
staticconstexpr

How long to wait for a peer to respond to a getheaders request.

Definition at line 61 of file net_processing.cpp.

◆ HISTORICAL_BLOCK_AGE

constexpr int HISTORICAL_BLOCK_AGE = 7 * 24 * 60 * 60
staticconstexpr

Age after which a block is considered historical for purposes of rate limiting block relay.

Set to one week, denominated in seconds.

Definition at line 81 of file net_processing.cpp.

◆ INBOUND_INVENTORY_BROADCAST_INTERVAL

constexpr auto INBOUND_INVENTORY_BROADCAST_INTERVAL {5s}
staticconstexpr

Average delay between trickled inventory transmissions for inbound peers.

Blocks and peers with NetPermissionFlags::NoBan permission bypass this.

Definition at line 146 of file net_processing.cpp.

◆ INVENTORY_BROADCAST_MAX

constexpr unsigned int INVENTORY_BROADCAST_MAX = 1000
staticconstexpr

Maximum number of inventory items to send per transmission.

Definition at line 157 of file net_processing.cpp.

◆ INVENTORY_BROADCAST_PER_SECOND

constexpr unsigned int INVENTORY_BROADCAST_PER_SECOND = 7
staticconstexpr

Maximum rate of inventory items to send per second.

Limits the impact of low-fee transaction floods.

Definition at line 153 of file net_processing.cpp.

◆ INVENTORY_BROADCAST_TARGET

constexpr unsigned int INVENTORY_BROADCAST_TARGET = INVENTORY_BROADCAST_PER_SECOND * count_seconds(INBOUND_INVENTORY_BROADCAST_INTERVAL)
staticconstexpr

Target number of tx inventory items to send per transmission.

Definition at line 155 of file net_processing.cpp.

◆ MAX_ADDR_PROCESSING_TOKEN_BUCKET

constexpr size_t MAX_ADDR_PROCESSING_TOKEN_BUCKET {MAX_ADDR_TO_SEND}
staticconstexpr

The soft limit of the address processing token bucket (the regular MAX_ADDR_RATE_PER_SECOND based increments won't go above this, but the MAX_ADDR_TO_SEND increment following GETADDR is exempt from this limit).

Definition at line 178 of file net_processing.cpp.

◆ MAX_ADDR_RATE_PER_SECOND

constexpr double MAX_ADDR_RATE_PER_SECOND {0.1}
staticconstexpr

The maximum rate of address records we're willing to process on average.

Can be bypassed using the NetPermissionFlags::Addr permission.

Definition at line 174 of file net_processing.cpp.

◆ MAX_ADDR_TO_SEND

constexpr size_t MAX_ADDR_TO_SEND {1000}
staticconstexpr

The maximum number of address records permitted in an ADDR message.

Definition at line 171 of file net_processing.cpp.

◆ MAX_BLOCKS_IN_TRANSIT_PER_PEER

const int MAX_BLOCKS_IN_TRANSIT_PER_PEER = 16
static

Number of blocks that can be requested at any given time from a single peer.

Definition at line 107 of file net_processing.cpp.

◆ MAX_BLOCKS_TO_ANNOUNCE

const unsigned int MAX_BLOCKS_TO_ANNOUNCE = 8
static

Maximum number of headers to announce when relaying blocks with headers message.

Definition at line 131 of file net_processing.cpp.

◆ MAX_BLOCKTXN_DEPTH

const int MAX_BLOCKTXN_DEPTH = 10
static

Maximum depth of blocks we're willing to respond to GETBLOCKTXN requests for.

Definition at line 120 of file net_processing.cpp.

◆ MAX_CMPCTBLOCK_DEPTH

const int MAX_CMPCTBLOCK_DEPTH = 5
static

Maximum depth of blocks we're willing to serve as compact blocks to peers when requested.

For older blocks, a regular BLOCK response will be sent.

Definition at line 118 of file net_processing.cpp.

◆ MAX_FEEFILTER_CHANGE_DELAY

constexpr auto MAX_FEEFILTER_CHANGE_DELAY {5min}
staticconstexpr

Maximum feefilter broadcast delay after significant change.

Definition at line 163 of file net_processing.cpp.

◆ MAX_GETCFHEADERS_SIZE

constexpr uint32_t MAX_GETCFHEADERS_SIZE = 2000
staticconstexpr

Maximum number of cf hashes that may be requested with one getcfheaders.

See BIP 157.

Definition at line 167 of file net_processing.cpp.

◆ MAX_GETCFILTERS_SIZE

constexpr uint32_t MAX_GETCFILTERS_SIZE = 1000
staticconstexpr

Maximum number of compact filters that may be requested with one getcfilters.

See BIP 157.

Definition at line 165 of file net_processing.cpp.

◆ MAX_GETDATA_SZ

const unsigned int MAX_GETDATA_SZ = 1000
static

Limit to avoid sending big packets.

Not used in processing incoming GETDATA for compatibility

Definition at line 105 of file net_processing.cpp.

◆ MAX_HEADERS_RESULTS

const unsigned int MAX_HEADERS_RESULTS = 2000
static

Number of headers sent in one getheaders result.

We rely on the assumption that if a peer sends less than this number, we reached its tip. Changing this value is a protocol upgrade.

Definition at line 115 of file net_processing.cpp.

◆ MAX_INV_SZ

const unsigned int MAX_INV_SZ = 50000
static

The maximum number of entries in an 'inv' protocol message.

Definition at line 87 of file net_processing.cpp.

◆ MAX_LOCATOR_SZ

const unsigned int MAX_LOCATOR_SZ = 101
static

The maximum number of entries in a locator.

Definition at line 85 of file net_processing.cpp.

◆ MAX_NUM_UNCONNECTING_HEADERS_MSGS

const int MAX_NUM_UNCONNECTING_HEADERS_MSGS = 10
static

Maximum number of unconnecting headers announcements before DoS score.

Definition at line 133 of file net_processing.cpp.

◆ MAX_OUTBOUND_PEERS_TO_PROTECT_FROM_DISCONNECT

constexpr int32_t MAX_OUTBOUND_PEERS_TO_PROTECT_FROM_DISCONNECT = 4
staticconstexpr

Protect at least this many outbound peers from disconnection due to slow/ behind headers chain.

Definition at line 65 of file net_processing.cpp.

◆ MAX_PCT_ADDR_TO_SEND

constexpr size_t MAX_PCT_ADDR_TO_SEND = 23
staticconstexpr

the maximum percentage of addresses from our addrman to return in response to a getaddr message.

Definition at line 169 of file net_processing.cpp.

◆ MAX_PEER_TX_ANNOUNCEMENTS

constexpr int32_t MAX_PEER_TX_ANNOUNCEMENTS = 5000
staticconstexpr

Maximum number of transactions to consider for requesting, per peer.

It provides a reasonable DoS limit to per-peer memory usage spent on announcements, while covering peers continuously sending INVs at the maximum rate (by our own policy, see INVENTORY_BROADCAST_PER_SECOND) for several minutes, while not receiving the actual transaction (from any peer) in response to requests for them.

Definition at line 95 of file net_processing.cpp.

◆ MAX_PEER_TX_REQUEST_IN_FLIGHT

constexpr int32_t MAX_PEER_TX_REQUEST_IN_FLIGHT = 100
staticconstexpr

Maximum number of in-flight transaction requests from a peer.

It is not a hard limit, but the threshold at which point the OVERLOADED_PEER_TX_DELAY kicks in.

Definition at line 90 of file net_processing.cpp.

◆ MINIMUM_CONNECT_TIME

constexpr auto MINIMUM_CONNECT_TIME {30s}
staticconstexpr

Minimum time an outbound-peer-eviction candidate must be connected for, in order to evict.

Definition at line 73 of file net_processing.cpp.

◆ NODE_NETWORK_LIMITED_ALLOW_CONN_BLOCKS

const unsigned int NODE_NETWORK_LIMITED_ALLOW_CONN_BLOCKS = 144
static

Window, in blocks, for connecting to NODE_NETWORK_LIMITED peers.

Definition at line 137 of file net_processing.cpp.

◆ NODE_NETWORK_LIMITED_MIN_BLOCKS

const unsigned int NODE_NETWORK_LIMITED_MIN_BLOCKS = 288
static

Minimum blocks required to signal NODE_NETWORK_LIMITED.

Definition at line 135 of file net_processing.cpp.

◆ NONPREF_PEER_TX_DELAY

constexpr auto NONPREF_PEER_TX_DELAY {2s}
staticconstexpr

How long to delay requesting transactions from non-preferred peers.

Definition at line 99 of file net_processing.cpp.

◆ OUTBOUND_INVENTORY_BROADCAST_INTERVAL

constexpr auto OUTBOUND_INVENTORY_BROADCAST_INTERVAL {2s}
staticconstexpr

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 NetPermissionFlags::NoBan permission bypass this.

Definition at line 150 of file net_processing.cpp.

◆ OVERLOADED_PEER_TX_DELAY

constexpr auto OVERLOADED_PEER_TX_DELAY {2s}
staticconstexpr

How long to delay requesting transactions from overloaded peers (see MAX_PEER_TX_REQUEST_IN_FLIGHT).

Definition at line 101 of file net_processing.cpp.

◆ PING_INTERVAL

constexpr auto PING_INTERVAL {2min}
staticconstexpr

Time between pings automatically sent out for latency probing and keepalive.

Definition at line 83 of file net_processing.cpp.

◆ RANDOMIZER_ID_ADDRESS_RELAY

constexpr uint64_t RANDOMIZER_ID_ADDRESS_RELAY = 0x3cac0035b5866b90ULL
staticconstexpr

SHA256("main address relay")[0:8].

Definition at line 75 of file net_processing.cpp.

◆ ROTATE_ADDR_RELAY_DEST_INTERVAL

constexpr auto ROTATE_ADDR_RELAY_DEST_INTERVAL {24h}
staticconstexpr

Delay between rotating the peers we relay a particular address to.

Definition at line 143 of file net_processing.cpp.

◆ STALE_CHECK_INTERVAL

constexpr auto STALE_CHECK_INTERVAL {10min}
staticconstexpr

How frequently to check for stale tips.

Definition at line 69 of file net_processing.cpp.

◆ STALE_RELAY_AGE_LIMIT

constexpr int STALE_RELAY_AGE_LIMIT = 30 * 24 * 60 * 60
staticconstexpr

Age after which a stale block will no longer be served if requested as protection against fingerprinting.

Set to one month, denominated in seconds.

Definition at line 78 of file net_processing.cpp.

◆ TXID_RELAY_DELAY

constexpr auto TXID_RELAY_DELAY {2s}
staticconstexpr

How long to delay requesting transactions via txids, if we have wtxid-relaying peers.

Definition at line 97 of file net_processing.cpp.