Bitcoin Core  0.20.99
P2P Digital Currency
Classes | Functions | 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/validation.h>
#include <hash.h>
#include <index/blockfilterindex.h>
#include <merkleblock.h>
#include <netbase.h>
#include <netmessagemaker.h>
#include <policy/fees.h>
#include <policy/policy.h>
#include <primitives/block.h>
#include <primitives/transaction.h>
#include <random.h>
#include <reverse_iterator.h>
#include <scheduler.h>
#include <tinyformat.h>
#include <txmempool.h>
#include <util/check.h>
#include <util/strencodings.h>
#include <util/system.h>
#include <validation.h>
#include <memory>
#include <typeinfo>
Include dependency graph for net_processing.cpp:

Go to the source code of this file.

Classes

struct  COrphanTx
 
class  CNetProcessingCleanup
 

Functions

std::map< uint256, COrphanTx > mapOrphanTransactions GUARDED_BY (g_cs_orphans)
 
void EraseOrphansFor (NodeId peer)
 
void UpdateLastBlockAnnounceTime (NodeId node, int64_t time_in_seconds)
 
static bool IsOutboundDisconnectionCandidate (const CNode &node)
 
bool GetNodeStateStats (NodeId nodeid, CNodeStateStats &stats)
 Get statistics from node state. More...
 
static void AddToCompactExtraTransactions (const CTransactionRef &tx) EXCLUSIVE_LOCKS_REQUIRED(g_cs_orphans)
 
bool AddOrphanTx (const CTransactionRef &tx, NodeId peer) EXCLUSIVE_LOCKS_REQUIRED(g_cs_orphans)
 
static int EraseOrphanTx (uint256 hash) EXCLUSIVE_LOCKS_REQUIRED(g_cs_orphans)
 
unsigned int LimitOrphanTxSize (unsigned int nMaxOrphans)
 
void Misbehaving (const NodeId pnode, const int howmuch, const std::string &message) EXCLUSIVE_LOCKS_REQUIRED(cs_main)
 Increment peer's misbehavior score. More...
 
static bool MaybePunishNodeForBlock (NodeId nodeid, const BlockValidationState &state, bool via_compact_block, const std::string &message="")
 Potentially mark a node discouraged based on the contents of a BlockValidationState object. More...
 
static bool MaybePunishNodeForTx (NodeId nodeid, const TxValidationState &state, const std::string &message="")
 Potentially disconnect and discourage a node based on the contents of a TxValidationState object. More...
 
static bool BlockRequestAllowed (const CBlockIndex *pindex, const Consensus::Params &consensusParams) EXCLUSIVE_LOCKS_REQUIRED(cs_main)
 
static std::shared_ptr< const CBlock > most_recent_block GUARDED_BY (cs_most_recent_block)
 
static bool AlreadyHave (const CInv &inv, const CTxMemPool &mempool) EXCLUSIVE_LOCKS_REQUIRED(cs_main)
 
void RelayTransaction (const uint256 &txid, const uint256 &wtxid, const CConnman &connman)
 Relay transaction to every node. More...
 
static void RelayAddress (const CAddress &addr, bool fReachable, const CConnman &connman)
 
static void ProcessGetBlockData (CNode &pfrom, const CChainParams &chainparams, const CInv &inv, CConnman &connman)
 
static CTransactionRef FindTxForGetData (const CNode &peer, const GenTxid &gtxid, const std::chrono::seconds mempool_req, const std::chrono::seconds now) LOCKS_EXCLUDED(cs_main)
 Determine whether or not a peer can request a transaction, and return it (or nullptr if not found or not allowed). More...
 
static void ProcessGetData (CNode &pfrom, const CChainParams &chainparams, CConnman &connman, CTxMemPool &mempool, const std::atomic< bool > &interruptMsgProc) LOCKS_EXCLUDED(cs_main)
 
static uint32_t GetFetchFlags (const CNode &pfrom) EXCLUSIVE_LOCKS_REQUIRED(cs_main)
 
static void SendBlockTransactions (const CBlock &block, const BlockTransactionsRequest &req, CNode &pfrom, CConnman &connman)
 
static void ProcessHeadersMessage (CNode &pfrom, CConnman &connman, ChainstateManager &chainman, CTxMemPool &mempool, const std::vector< CBlockHeader > &headers, const CChainParams &chainparams, bool via_compact_block)
 
static void ProcessOrphanTx (CConnman &connman, CTxMemPool &mempool, std::set< uint256 > &orphan_work_set, std::list< CTransactionRef > &removed_txn) EXCLUSIVE_LOCKS_REQUIRED(cs_main
 
 AssertLockHeld (g_cs_orphans)
 
 while (!done &&!orphan_work_set.empty())
 
static bool PrepareBlockFilterRequest (CNode &pfrom, const CChainParams &chain_params, BlockFilterType filter_type, uint32_t start_height, const uint256 &stop_hash, uint32_t max_height_diff, const CBlockIndex *&stop_index, BlockFilterIndex *&filter_index)
 Validation logic for compact filters request handling. More...
 
static void ProcessGetCFilters (CNode &pfrom, CDataStream &vRecv, const CChainParams &chain_params, CConnman &connman)
 Handle a cfilters request. More...
 
static void ProcessGetCFHeaders (CNode &pfrom, CDataStream &vRecv, const CChainParams &chain_params, CConnman &connman)
 Handle a cfheaders request. More...
 
static void ProcessGetCFCheckPt (CNode &pfrom, CDataStream &vRecv, const CChainParams &chain_params, CConnman &connman)
 Handle a getcfcheckpt request. More...
 
void ProcessMessage (CNode &pfrom, const std::string &msg_type, CDataStream &vRecv, const std::chrono::microseconds time_received, const CChainParams &chainparams, ChainstateManager &chainman, CTxMemPool &mempool, CConnman &connman, BanMan *banman, const std::atomic< bool > &interruptMsgProc)
 

Variables

static constexpr int64_t ORPHAN_TX_EXPIRE_TIME = 20 * 60
 Expiration time for orphan transactions in seconds. More...
 
static constexpr int64_t ORPHAN_TX_EXPIRE_INTERVAL = 5 * 60
 Minimum time between orphan transactions expire time checks in seconds. More...
 
static constexpr std::chrono::seconds RELAY_TX_CACHE_TIME = std::chrono::minutes{15}
 How long to cache transactions in mapRelay for normal relay. More...
 
static constexpr std::chrono::seconds UNCONDITIONAL_RELAY_DELAY = std::chrono::minutes{2}
 How long a transaction has to be in the mempool before it can unconditionally be relayed (even when not in mapRelay). More...
 
static constexpr int64_t HEADERS_DOWNLOAD_TIMEOUT_BASE = 15 * 60 * 1000000
 Headers download timeout expressed in microseconds Timeout = base + per_header * (expected number of headers) More...
 
static constexpr int64_t HEADERS_DOWNLOAD_TIMEOUT_PER_HEADER = 1000
 
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 int64_t CHAIN_SYNC_TIMEOUT = 20 * 60
 Timeout for (unprotected) outbound peers to sync to our chainwork, in seconds. More...
 
static constexpr int64_t STALE_CHECK_INTERVAL = 10 * 60
 How frequently to check for stale tips, in seconds. More...
 
static constexpr int64_t EXTRA_PEER_CHECK_INTERVAL = 45
 How frequently to check for extra outbound peers and disconnect, in seconds. More...
 
static constexpr int64_t MINIMUM_CONNECT_TIME = 30
 Minimum time an outbound-peer-eviction candidate must be connected for, in order to evict, in seconds. 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 std::chrono::minutes PING_INTERVAL {2}
 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_IN_FLIGHT = 100
 Maximum number of in-flight transactions from a peer. More...
 
static constexpr int32_t MAX_PEER_TX_ANNOUNCEMENTS = 2 * MAX_INV_SZ
 Maximum number of announced transactions from a peer. More...
 
static constexpr std::chrono::microseconds TXID_RELAY_DELAY {std::chrono::seconds{2}}
 How many microseconds to delay requesting transactions via txids, if we have wtxid-relaying peers. More...
 
static constexpr std::chrono::microseconds INBOUND_PEER_TX_DELAY {std::chrono::seconds{2}}
 How many microseconds to delay requesting transactions from inbound peers. More...
 
static constexpr std::chrono::microseconds GETDATA_TX_INTERVAL {std::chrono::seconds{60}}
 How long to wait (in microseconds) before downloading a transaction from an additional peer. More...
 
static constexpr std::chrono::microseconds MAX_GETDATA_RANDOM_DELAY {std::chrono::seconds{2}}
 Maximum delay (in microseconds) for transaction requests to avoid biasing some peers over others. More...
 
static constexpr std::chrono::microseconds TX_EXPIRY_INTERVAL {GETDATA_TX_INTERVAL * 10}
 How long to wait (in microseconds) before expiring an in-flight getdata request to a 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 const unsigned int BLOCK_STALLING_TIMEOUT = 2
 Timeout in seconds during which a peer must stall block download progress before being disconnected. 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 const int64_t BLOCK_DOWNLOAD_TIMEOUT_BASE = 1000000
 Block download timeout base, expressed in millionths of the block interval (i.e. More...
 
static const int64_t BLOCK_DOWNLOAD_TIMEOUT_PER_PEER = 500000
 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_UNCONNECTING_HEADERS = 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 constexpr std::chrono::hours AVG_LOCAL_ADDRESS_BROADCAST_INTERVAL {24}
 Average delay between local address broadcasts. More...
 
static constexpr std::chrono::seconds AVG_ADDRESS_BROADCAST_INTERVAL {30}
 Average delay between peer address broadcasts. More...
 
static const unsigned int INVENTORY_BROADCAST_INTERVAL = 5
 Average delay between trickled inventory transmissions in seconds. 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_MAX = INVENTORY_BROADCAST_PER_SECOND * INVENTORY_BROADCAST_INTERVAL
 Maximum number of inventory items to send per transmission. More...
 
static constexpr unsigned int INVENTORY_MAX_RECENT_RELAY = 3500
 The number of most recently announced transactions a peer can request. More...
 
static constexpr unsigned int AVG_FEEFILTER_BROADCAST_INTERVAL = 10 * 60
 Verify that INVENTORY_MAX_RECENT_RELAY is enough to cache everything typically relayed before unconditional relay from the mempool kicks in. More...
 
static constexpr unsigned int MAX_FEEFILTER_CHANGE_DELAY = 5 * 60
 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...
 
RecursiveMutex g_cs_orphans
 
static RecursiveMutex cs_most_recent_block
 
std::set< NodeIdsetMisbehaving
 
bool done = false
 
static CNetProcessingCleanup instance_of_cnetprocessingcleanup
 

Function Documentation

◆ AddOrphanTx()

bool AddOrphanTx ( const CTransactionRef tx,
NodeId  peer 
)

Definition at line 944 of file net_processing.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ AddToCompactExtraTransactions()

static void AddToCompactExtraTransactions ( const CTransactionRef tx)
static

Definition at line 933 of file net_processing.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ AlreadyHave()

static bool AlreadyHave ( const CInv inv,
const CTxMemPool mempool 
)
static

Definition at line 1430 of file net_processing.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ AssertLockHeld()

AssertLockHeld ( g_cs_orphans  )

◆ BlockRequestAllowed()

static bool BlockRequestAllowed ( const CBlockIndex pindex,
const Consensus::Params consensusParams 
)
static

Definition at line 1196 of file net_processing.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ EraseOrphansFor()

void EraseOrphansFor ( NodeId  peer)

Definition at line 1011 of file net_processing.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ EraseOrphanTx()

static int EraseOrphanTx ( uint256  hash)
static

Definition at line 980 of file net_processing.cpp.

Here is the caller graph for this function:

◆ FindTxForGetData()

static CTransactionRef FindTxForGetData ( const CNode peer,
const GenTxid gtxid,
const std::chrono::seconds  mempool_req,
const std::chrono::seconds  now 
)
static

Determine whether or not a peer can request a transaction, and return it (or nullptr if not found or not allowed).

Definition at line 1681 of file net_processing.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetFetchFlags()

static uint32_t GetFetchFlags ( const CNode pfrom)
static

Definition at line 1802 of file net_processing.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetNodeStateStats()

bool GetNodeStateStats ( NodeId  nodeid,
CNodeStateStats stats 
)

Get statistics from node state.

Definition at line 913 of file net_processing.cpp.

Here is the caller graph for this function:

◆ GUARDED_BY() [1/2]

std::map< uint256, std::map< uint256, COrphanTx >::iterator > g_orphans_by_wtxid GUARDED_BY ( g_cs_orphans  )

◆ GUARDED_BY() [2/2]

static bool fWitnessesPresentInMostRecentCompactBlock GUARDED_BY ( cs_most_recent_block  )
static

◆ IsOutboundDisconnectionCandidate()

static bool IsOutboundDisconnectionCandidate ( const CNode node)
static

Definition at line 838 of file net_processing.cpp.

Here is the caller graph for this function:

◆ LimitOrphanTxSize()

unsigned int LimitOrphanTxSize ( unsigned int  nMaxOrphans)

Definition at line 1028 of file net_processing.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ MaybePunishNodeForBlock()

static bool MaybePunishNodeForBlock ( NodeId  nodeid,
const BlockValidationState state,
bool  via_compact_block,
const std::string &  message = "" 
)
static

Potentially mark a node discouraged based on the contents of a BlockValidationState object.

Parameters
[in]via_compact_blockthis bool is passed in because net_processing should punish peers differently depending on whether the data was provided in a compact block message or not. If the compact block had a valid header, but contained invalid txs, the peer should not be punished. See BIP 152.
Returns
Returns true if the peer was punished (probably disconnected)

Definition at line 1096 of file net_processing.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ MaybePunishNodeForTx()

static bool MaybePunishNodeForTx ( NodeId  nodeid,
const TxValidationState state,
const std::string &  message = "" 
)
static

Potentially disconnect and discourage a node based on the contents of a TxValidationState object.

Returns
Returns true if the peer was punished (probably disconnected)

Definition at line 1156 of file net_processing.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ Misbehaving()

void Misbehaving ( const NodeId  pnode,
const int  howmuch,
const std::string &  message 
)

Increment peer's misbehavior score.

If the new value >= DISCOURAGEMENT_THRESHOLD, mark the node to be discouraged, meaning the peer might be disconnected and added to the discouragement filter.

Definition at line 1068 of file net_processing.cpp.

Here is the caller graph for this function:

◆ PrepareBlockFilterRequest()

static bool PrepareBlockFilterRequest ( CNode pfrom,
const CChainParams chain_params,
BlockFilterType  filter_type,
uint32_t  start_height,
const uint256 stop_hash,
uint32_t  max_height_diff,
const CBlockIndex *&  stop_index,
BlockFilterIndex *&  filter_index 
)
static

Validation logic for compact filters request handling.

May disconnect from the peer in the case of a bad request.

Parameters
[in]pfromThe peer that we received the request from
[in]chain_paramsChain parameters
[in]filter_typeThe filter type the request is for. Must be basic filters.
[in]start_heightThe start height for the request
[in]stop_hashThe stop_hash for the request
[in]max_height_diffThe maximum number of items permitted to request, as specified in BIP 157
[out]stop_indexThe CBlockIndex for the stop_hash block, if the request can be serviced.
[out]filter_indexThe filter index, if the request can be serviced.
Returns
True if the request can be serviced.

Definition at line 2109 of file net_processing.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ProcessGetBlockData()

static void ProcessGetBlockData ( CNode pfrom,
const CChainParams chainparams,
const CInv inv,
CConnman connman 
)
static

Definition at line 1523 of file net_processing.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ProcessGetCFCheckPt()

static void ProcessGetCFCheckPt ( CNode pfrom,
CDataStream vRecv,
const CChainParams chain_params,
CConnman connman 
)
static

Handle a getcfcheckpt request.

May disconnect from the peer in the case of a bad request.

Parameters
[in]pfromThe peer that we received the request from
[in]vRecvThe raw message received
[in]chain_paramsChain parameters
[in]connmanPointer to the connection manager

Definition at line 2270 of file net_processing.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ProcessGetCFHeaders()

static void ProcessGetCFHeaders ( CNode pfrom,
CDataStream vRecv,
const CChainParams chain_params,
CConnman connman 
)
static

Handle a cfheaders request.

May disconnect from the peer in the case of a bad request.

Parameters
[in]pfromThe peer that we received the request from
[in]vRecvThe raw message received
[in]chain_paramsChain parameters
[in]connmanPointer to the connection manager

Definition at line 2215 of file net_processing.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ProcessGetCFilters()

static void ProcessGetCFilters ( CNode pfrom,
CDataStream vRecv,
const CChainParams chain_params,
CConnman connman 
)
static

Handle a cfilters request.

May disconnect from the peer in the case of a bad request.

Parameters
[in]pfromThe peer that we received the request from
[in]vRecvThe raw message received
[in]chain_paramsChain parameters
[in]connmanPointer to the connection manager

Definition at line 2172 of file net_processing.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ProcessGetData()

static void ProcessGetData ( CNode pfrom,
const CChainParams chainparams,
CConnman connman,
CTxMemPool mempool,
const std::atomic< bool > &  interruptMsgProc 
)
static

Definition at line 1708 of file net_processing.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ProcessHeadersMessage()

static void ProcessHeadersMessage ( CNode pfrom,
CConnman connman,
ChainstateManager chainman,
CTxMemPool mempool,
const std::vector< CBlockHeader > &  headers,
const CChainParams chainparams,
bool  via_compact_block 
)
static

Definition at line 1826 of file net_processing.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ProcessMessage()

void ProcessMessage ( CNode pfrom,
const std::string &  msg_type,
CDataStream vRecv,
const std::chrono::microseconds  time_received,
const CChainParams chainparams,
ChainstateManager chainman,
CTxMemPool mempool,
CConnman connman,
BanMan banman,
const std::atomic< bool > &  interruptMsgProc 
)

Definition at line 2311 of file net_processing.cpp.

Here is the caller graph for this function:

◆ ProcessOrphanTx()

static void ProcessOrphanTx ( CConnman connman,
CTxMemPool mempool,
std::set< uint256 > &  orphan_work_set,
std::list< CTransactionRef > &  removed_txn 
)
static
Here is the caller graph for this function:

◆ RelayAddress()

static void RelayAddress ( const CAddress addr,
bool  fReachable,
const CConnman connman 
)
static

Definition at line 1487 of file net_processing.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ RelayTransaction()

void RelayTransaction ( const uint256 txid,
const uint256 wtxid,
const CConnman connman 
)

Relay transaction to every node.

Definition at line 1473 of file net_processing.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ SendBlockTransactions()

static void SendBlockTransactions ( const CBlock block,
const BlockTransactionsRequest req,
CNode pfrom,
CConnman connman 
)
inlinestatic

Definition at line 1810 of file net_processing.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ UpdateLastBlockAnnounceTime()

void UpdateLastBlockAnnounceTime ( NodeId  node,
int64_t  time_in_seconds 
)

Definition at line 829 of file net_processing.cpp.

◆ while()

while ( !done &&!orphan_work_set.  empty())

Definition at line 2014 of file net_processing.cpp.

Here is the call graph for this function:

Variable Documentation

◆ AVG_ADDRESS_BROADCAST_INTERVAL

constexpr std::chrono::seconds AVG_ADDRESS_BROADCAST_INTERVAL {30}
static

Average delay between peer address broadcasts.

Definition at line 122 of file net_processing.cpp.

◆ AVG_FEEFILTER_BROADCAST_INTERVAL

constexpr unsigned int AVG_FEEFILTER_BROADCAST_INTERVAL = 10 * 60
static

Verify that INVENTORY_MAX_RECENT_RELAY is enough to cache everything typically relayed before unconditional relay from the mempool kicks in.

This is only a lower bound, and it should be larger to account for higher inv rate to outbound peers, and random variations in the broadcast mechanism. Average delay between feefilter broadcasts in seconds.

Definition at line 139 of file net_processing.cpp.

◆ AVG_LOCAL_ADDRESS_BROADCAST_INTERVAL

constexpr std::chrono::hours AVG_LOCAL_ADDRESS_BROADCAST_INTERVAL {24}
static

Average delay between local address broadcasts.

Definition at line 120 of file net_processing.cpp.

◆ BLOCK_DOWNLOAD_TIMEOUT_BASE

const int64_t BLOCK_DOWNLOAD_TIMEOUT_BASE = 1000000
static

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

10 min)

Definition at line 110 of file net_processing.cpp.

◆ BLOCK_DOWNLOAD_TIMEOUT_PER_PEER

const int64_t BLOCK_DOWNLOAD_TIMEOUT_PER_PEER = 500000
static

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

5 min)

Definition at line 112 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 108 of file net_processing.cpp.

◆ BLOCK_STALLING_TIMEOUT

const unsigned int BLOCK_STALLING_TIMEOUT = 2
static

Timeout in seconds during which a peer must stall block download progress before being disconnected.

Definition at line 95 of file net_processing.cpp.

◆ CHAIN_SYNC_TIMEOUT

constexpr int64_t CHAIN_SYNC_TIMEOUT = 20 * 60
static

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

Definition at line 53 of file net_processing.cpp.

◆ cs_most_recent_block

RecursiveMutex cs_most_recent_block
static

Definition at line 1302 of file net_processing.cpp.

◆ done

bool done = false

Definition at line 2013 of file net_processing.cpp.

◆ EXTRA_PEER_CHECK_INTERVAL

constexpr int64_t EXTRA_PEER_CHECK_INTERVAL = 45
static

How frequently to check for extra outbound peers and disconnect, in seconds.

Definition at line 57 of file net_processing.cpp.

◆ g_cs_orphans

static void g_cs_orphans
Initial value:
{
RecursiveMutex cs_main
Mutex to guard access to validation specific variables, such as reading or changing the chainstate...
Definition: validation.cpp:128
AssertLockHeld(g_cs_orphans)

Definition at line 154 of file net_processing.cpp.

◆ GETDATA_TX_INTERVAL

constexpr std::chrono::microseconds GETDATA_TX_INTERVAL {std::chrono::seconds{60}}
static

How long to wait (in microseconds) before downloading a transaction from an additional peer.

Definition at line 83 of file net_processing.cpp.

◆ HEADERS_DOWNLOAD_TIMEOUT_BASE

constexpr int64_t HEADERS_DOWNLOAD_TIMEOUT_BASE = 15 * 60 * 1000000
static

Headers download timeout expressed in microseconds Timeout = base + per_header * (expected number of headers)

Definition at line 46 of file net_processing.cpp.

◆ HEADERS_DOWNLOAD_TIMEOUT_PER_HEADER

constexpr int64_t HEADERS_DOWNLOAD_TIMEOUT_PER_HEADER = 1000
static

Definition at line 47 of file net_processing.cpp.

◆ HISTORICAL_BLOCK_AGE

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

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 67 of file net_processing.cpp.

◆ INBOUND_PEER_TX_DELAY

constexpr std::chrono::microseconds INBOUND_PEER_TX_DELAY {std::chrono::seconds{2}}
static

How many microseconds to delay requesting transactions from inbound peers.

Definition at line 81 of file net_processing.cpp.

◆ instance_of_cnetprocessingcleanup

CNetProcessingCleanup instance_of_cnetprocessingcleanup
static

Definition at line 4688 of file net_processing.cpp.

◆ INVENTORY_BROADCAST_INTERVAL

const unsigned int INVENTORY_BROADCAST_INTERVAL = 5
static

Average delay between trickled inventory transmissions in seconds.

Blocks and peers with noban permission bypass this, outbound peers get half this delay.

Definition at line 125 of file net_processing.cpp.

◆ INVENTORY_BROADCAST_MAX

constexpr unsigned int INVENTORY_BROADCAST_MAX = INVENTORY_BROADCAST_PER_SECOND * INVENTORY_BROADCAST_INTERVAL
static

Maximum number of inventory items to send per transmission.

Definition at line 130 of file net_processing.cpp.

◆ INVENTORY_BROADCAST_PER_SECOND

constexpr unsigned int INVENTORY_BROADCAST_PER_SECOND = 7
static

Maximum rate of inventory items to send per second.

Limits the impact of low-fee transaction floods.

Definition at line 128 of file net_processing.cpp.

◆ INVENTORY_MAX_RECENT_RELAY

constexpr unsigned int INVENTORY_MAX_RECENT_RELAY = 3500
static

The number of most recently announced transactions a peer can request.

Definition at line 132 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 93 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 114 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 103 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 101 of file net_processing.cpp.

◆ MAX_FEEFILTER_CHANGE_DELAY

constexpr unsigned int MAX_FEEFILTER_CHANGE_DELAY = 5 * 60
static

Maximum feefilter broadcast delay after significant change.

Definition at line 141 of file net_processing.cpp.

◆ MAX_GETCFHEADERS_SIZE

constexpr uint32_t MAX_GETCFHEADERS_SIZE = 2000
static

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

See BIP 157.

Definition at line 145 of file net_processing.cpp.

◆ MAX_GETCFILTERS_SIZE

constexpr uint32_t MAX_GETCFILTERS_SIZE = 1000
static

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

See BIP 157.

Definition at line 143 of file net_processing.cpp.

◆ MAX_GETDATA_RANDOM_DELAY

constexpr std::chrono::microseconds MAX_GETDATA_RANDOM_DELAY {std::chrono::seconds{2}}
static

Maximum delay (in microseconds) for transaction requests to avoid biasing some peers over others.

Definition at line 85 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 91 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 98 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 73 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 71 of file net_processing.cpp.

◆ MAX_OUTBOUND_PEERS_TO_PROTECT_FROM_DISCONNECT

constexpr int32_t MAX_OUTBOUND_PEERS_TO_PROTECT_FROM_DISCONNECT = 4
static

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

Definition at line 51 of file net_processing.cpp.

◆ MAX_PEER_TX_ANNOUNCEMENTS

constexpr int32_t MAX_PEER_TX_ANNOUNCEMENTS = 2 * MAX_INV_SZ
static

Maximum number of announced transactions from a peer.

Definition at line 77 of file net_processing.cpp.

◆ MAX_PEER_TX_IN_FLIGHT

constexpr int32_t MAX_PEER_TX_IN_FLIGHT = 100
static

Maximum number of in-flight transactions from a peer.

Definition at line 75 of file net_processing.cpp.

◆ MAX_UNCONNECTING_HEADERS

const int MAX_UNCONNECTING_HEADERS = 10
static

Maximum number of unconnecting headers announcements before DoS score.

Definition at line 116 of file net_processing.cpp.

◆ MINIMUM_CONNECT_TIME

constexpr int64_t MINIMUM_CONNECT_TIME = 30
static

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

Definition at line 59 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 118 of file net_processing.cpp.

◆ ORPHAN_TX_EXPIRE_INTERVAL

constexpr int64_t ORPHAN_TX_EXPIRE_INTERVAL = 5 * 60
static

Minimum time between orphan transactions expire time checks in seconds.

Definition at line 39 of file net_processing.cpp.

◆ ORPHAN_TX_EXPIRE_TIME

constexpr int64_t ORPHAN_TX_EXPIRE_TIME = 20 * 60
static

Expiration time for orphan transactions in seconds.

Definition at line 37 of file net_processing.cpp.

◆ PING_INTERVAL

constexpr std::chrono::minutes PING_INTERVAL {2}
static

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

Definition at line 69 of file net_processing.cpp.

◆ RANDOMIZER_ID_ADDRESS_RELAY

constexpr uint64_t RANDOMIZER_ID_ADDRESS_RELAY = 0x3cac0035b5866b90ULL
static

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

Definition at line 61 of file net_processing.cpp.

◆ RELAY_TX_CACHE_TIME

constexpr std::chrono::seconds RELAY_TX_CACHE_TIME = std::chrono::minutes{15}
static

How long to cache transactions in mapRelay for normal relay.

Definition at line 41 of file net_processing.cpp.

◆ setMisbehaving

std::set<NodeId> setMisbehaving

Definition at line 2012 of file net_processing.cpp.

◆ STALE_CHECK_INTERVAL

constexpr int64_t STALE_CHECK_INTERVAL = 10 * 60
static

How frequently to check for stale tips, in seconds.

Definition at line 55 of file net_processing.cpp.

◆ STALE_RELAY_AGE_LIMIT

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

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 64 of file net_processing.cpp.

◆ TX_EXPIRY_INTERVAL

constexpr std::chrono::microseconds TX_EXPIRY_INTERVAL {GETDATA_TX_INTERVAL * 10}
static

How long to wait (in microseconds) before expiring an in-flight getdata request to a peer.

Definition at line 87 of file net_processing.cpp.

◆ TXID_RELAY_DELAY

constexpr std::chrono::microseconds TXID_RELAY_DELAY {std::chrono::seconds{2}}
static

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

Definition at line 79 of file net_processing.cpp.

◆ UNCONDITIONAL_RELAY_DELAY

constexpr std::chrono::seconds UNCONDITIONAL_RELAY_DELAY = std::chrono::minutes{2}
static

How long a transaction has to be in the mempool before it can unconditionally be relayed (even when not in mapRelay).

Definition at line 43 of file net_processing.cpp.