![]() |
Bitcoin Core 28.99.0
P2P Digital Currency
|
#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/timeoffsets.h>
#include <node/txdownloadman.h>
#include <node/txreconciliation.h>
#include <node/warnings.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 <scheduler.h>
#include <streams.h>
#include <sync.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 <ranges>
#include <typeinfo>
#include <utility>
Go to the source code of this file.
Functions | |
TRACEPOINT_SEMAPHORE (net, inbound_message) | |
TRACEPOINT_SEMAPHORE (net, misbehaving_connection) | |
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 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 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 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... | |
TRACEPOINT_SEMAPHORE | ( | net | , |
inbound_message | |||
) |
TRACEPOINT_SEMAPHORE | ( | net | , |
misbehaving_connection | |||
) |
|
staticconstexpr |
Average delay between peer address broadcasts.
Definition at line 128 of file net_processing.cpp.
|
staticconstexpr |
Average delay between feefilter broadcasts in seconds.
Definition at line 148 of file net_processing.cpp.
|
staticconstexpr |
Average delay between local address broadcasts.
Definition at line 126 of file net_processing.cpp.
|
staticconstexpr |
Block download timeout base, expressed in multiples of the block interval (i.e.
10 min)
Definition at line 116 of file net_processing.cpp.
|
staticconstexpr |
Additional block download timeout per parallel downloading peer (i.e.
5 min)
Definition at line 118 of file net_processing.cpp.
|
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 114 of file net_processing.cpp.
|
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 101 of file net_processing.cpp.
|
staticconstexpr |
Maximum timeout for stalling block download.
Definition at line 103 of file net_processing.cpp.
|
staticconstexpr |
Timeout for (unprotected) outbound peers to sync to our chainwork.
Definition at line 74 of file net_processing.cpp.
|
staticconstexpr |
The compactblocks version we support.
See BIP 152.
Definition at line 167 of file net_processing.cpp.
|
staticconstexpr |
How frequently to check for extra outbound peers and disconnect.
Definition at line 78 of file net_processing.cpp.
|
staticconstexpr |
Headers download timeout.
Timeout = base + per_header * (expected number of headers)
Definition at line 65 of file net_processing.cpp.
|
staticconstexpr |
Definition at line 66 of file net_processing.cpp.
|
staticconstexpr |
How long to wait for a peer to respond to a getheaders request.
Definition at line 68 of file net_processing.cpp.
|
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 88 of file net_processing.cpp.
|
staticconstexpr |
Average delay between trickled inventory transmissions for inbound peers.
Blocks and peers with NetPermissionFlags::NoBan permission bypass this.
Definition at line 133 of file net_processing.cpp.
|
staticconstexpr |
Maximum number of inventory items to send per transmission.
Definition at line 144 of file net_processing.cpp.
|
staticconstexpr |
Maximum rate of inventory items to send per second.
Limits the impact of low-fee transaction floods.
Definition at line 140 of file net_processing.cpp.
|
staticconstexpr |
Target number of tx inventory items to send per transmission.
Definition at line 142 of file net_processing.cpp.
|
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 165 of file net_processing.cpp.
|
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 161 of file net_processing.cpp.
|
staticconstexpr |
The maximum number of address records permitted in an ADDR message.
Definition at line 158 of file net_processing.cpp.
|
static |
Number of blocks that can be requested at any given time from a single peer.
Definition at line 98 of file net_processing.cpp.
|
static |
Maximum number of headers to announce when relaying blocks with headers message.
Definition at line 120 of file net_processing.cpp.
|
static |
Maximum depth of blocks we're willing to respond to GETBLOCKTXN requests for.
Definition at line 108 of file net_processing.cpp.
|
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 106 of file net_processing.cpp.
|
staticconstexpr |
Maximum feefilter broadcast delay after significant change.
Definition at line 150 of file net_processing.cpp.
|
staticconstexpr |
Maximum number of cf hashes that may be requested with one getcfheaders.
See BIP 157.
Definition at line 154 of file net_processing.cpp.
|
staticconstexpr |
Maximum number of compact filters that may be requested with one getcfilters.
See BIP 157.
Definition at line 152 of file net_processing.cpp.
|
static |
Limit to avoid sending big packets.
Not used in processing incoming GETDATA for compatibility
Definition at line 96 of file net_processing.cpp.
|
static |
The maximum number of entries in an 'inv' protocol message.
Definition at line 94 of file net_processing.cpp.
|
static |
The maximum number of entries in a locator.
Definition at line 92 of file net_processing.cpp.
|
staticconstexpr |
Protect at least this many outbound peers from disconnection due to slow/ behind headers chain.
Definition at line 72 of file net_processing.cpp.
|
staticconstexpr |
the maximum percentage of addresses from our addrman to return in response to a getaddr message.
Definition at line 156 of file net_processing.cpp.
|
staticconstexpr |
Minimum time an outbound-peer-eviction candidate must be connected for, in order to evict.
Definition at line 80 of file net_processing.cpp.
|
static |
Window, in blocks, for connecting to NODE_NETWORK_LIMITED peers.
Definition at line 124 of file net_processing.cpp.
|
static |
Minimum blocks required to signal NODE_NETWORK_LIMITED.
Definition at line 122 of file net_processing.cpp.
|
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 137 of file net_processing.cpp.
|
staticconstexpr |
Time between pings automatically sent out for latency probing and keepalive.
Definition at line 90 of file net_processing.cpp.
|
staticconstexpr |
SHA256("main address relay")[0:8].
Definition at line 82 of file net_processing.cpp.
|
staticconstexpr |
Delay between rotating the peers we relay a particular address to.
Definition at line 130 of file net_processing.cpp.
|
staticconstexpr |
How frequently to check for stale tips.
Definition at line 76 of file net_processing.cpp.
|
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 85 of file net_processing.cpp.