![]() |
Bitcoin Core
0.19.99
P2P Digital Currency
|
#include <net_processing.h>
#include <addrman.h>
#include <banman.h>
#include <blockencodings.h>
#include <chainparams.h>
#include <consensus/validation.h>
#include <hash.h>
#include <validation.h>
#include <merkleblock.h>
#include <netmessagemaker.h>
#include <netbase.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/system.h>
#include <util/strencodings.h>
#include <util/validation.h>
#include <memory>
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 | Misbehaving (NodeId nodeid, int howmuch, const std::string &message="") EXCLUSIVE_LOCKS_REQUIRED(cs_main) |
Increase a node's misbehavior score. More... | |
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) |
static bool | TxRelayMayResultInDisconnect (const TxValidationState &state) |
Returns true if the given validation state result may result in a peer banning/disconnecting us. More... | |
static bool | MaybePunishNodeForBlock (NodeId nodeid, const BlockValidationState &state, bool via_compact_block, const std::string &message="") |
Potentially ban a node based on the contents of a BlockValidationState object. More... | |
static bool | MaybePunishNodeForTx (NodeId nodeid, const TxValidationState &state, const std::string &message="") |
Potentially ban 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) EXCLUSIVE_LOCKS_REQUIRED(cs_main) |
void | RelayTransaction (const uint256 &txid, const CConnman &connman) |
Relay transaction to every node. More... | |
static void | RelayAddress (const CAddress &addr, bool fReachable, CConnman *connman) |
static void | ProcessGetBlockData (CNode *pfrom, const CChainParams &chainparams, const CInv &inv, CConnman *connman) |
static void | ProcessGetData (CNode *pfrom, const CChainParams &chainparams, CConnman *connman, const std::atomic< bool > &interruptMsgProc) LOCKS_EXCLUDED(cs_main) |
static uint32_t | GetFetchFlags (CNode *pfrom) EXCLUSIVE_LOCKS_REQUIRED(cs_main) |
static void | SendBlockTransactions (const CBlock &block, const BlockTransactionsRequest &req, CNode *pfrom, CConnman *connman) |
static bool | ProcessHeadersMessage (CNode *pfrom, CConnman *connman, const std::vector< CBlockHeader > &headers, const CChainParams &chainparams, bool via_compact_block) |
static void | ProcessOrphanTx (CConnman *connman, 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 | ProcessMessage (CNode *pfrom, const std::string &strCommand, CDataStream &vRecv, int64_t nTimeReceived, const CChainParams &chainparams, 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 {15 * 60} |
How long to cache transactions in mapRelay for normal relay. 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 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 | 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... | |
CCriticalSection | g_cs_orphans |
static constexpr unsigned int | AVG_LOCAL_ADDRESS_BROADCAST_INTERVAL = 24 * 60 * 60 |
Average delay between local address broadcasts in seconds. More... | |
static const unsigned int | AVG_ADDRESS_BROADCAST_INTERVAL = 30 |
Average delay between peer address broadcasts in seconds. More... | |
static const unsigned int | INVENTORY_BROADCAST_INTERVAL = 5 |
Average delay between trickled inventory transmissions in seconds. More... | |
static constexpr unsigned int | INVENTORY_BROADCAST_MAX = 7 * INVENTORY_BROADCAST_INTERVAL |
Maximum number of inventory items to send per transmission. More... | |
static constexpr unsigned int | AVG_FEEFILTER_BROADCAST_INTERVAL = 10 * 60 |
Average delay between feefilter broadcasts in seconds. More... | |
static constexpr unsigned int | MAX_FEEFILTER_CHANGE_DELAY = 5 * 60 |
Maximum feefilter broadcast delay after significant change. More... | |
static CCriticalSection | cs_most_recent_block |
std::set< NodeId > | setMisbehaving |
bool | done = false |
static CNetProcessingCleanup | instance_of_cnetprocessingcleanup |
bool AddOrphanTx | ( | const CTransactionRef & | tx, |
NodeId | peer | ||
) |
Definition at line 840 of file net_processing.cpp.
|
static |
Definition at line 829 of file net_processing.cpp.
|
static |
Definition at line 1291 of file net_processing.cpp.
AssertLockHeld | ( | g_cs_orphans | ) |
|
static |
Definition at line 1103 of file net_processing.cpp.
void EraseOrphansFor | ( | NodeId | peer | ) |
Definition at line 904 of file net_processing.cpp.
|
static |
|
static |
bool GetNodeStateStats | ( | NodeId | nodeid, |
CNodeStateStats & | stats | ||
) |
Get statistics from node state.
Definition at line 809 of file net_processing.cpp.
std::map<uint256, COrphanTx> mapOrphanTransactions GUARDED_BY | ( | g_cs_orphans | ) |
|
static |
|
static |
unsigned int LimitOrphanTxSize | ( | unsigned int | nMaxOrphans | ) |
Definition at line 921 of file net_processing.cpp.
|
static |
Potentially ban a node based on the contents of a BlockValidationState object.
[in] | via_compact_block | this 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. |
Definition at line 999 of file net_processing.cpp.
|
static |
Potentially ban a node based on the contents of a TxValidationState object.
Changes here may need to be reflected in TxRelayMayResultInDisconnect().
Definition at line 1061 of file net_processing.cpp.
void Misbehaving | ( | NodeId | nodeid, |
int | howmuch, | ||
const std::string & | message = "" |
||
) |
Increase a node's misbehavior score.
Mark a misbehaving peer to be banned depending upon the value of -banscore
.
Definition at line 960 of file net_processing.cpp.
|
static |
Definition at line 1373 of file net_processing.cpp.
|
static |
Definition at line 1528 of file net_processing.cpp.
|
static |
Definition at line 1641 of file net_processing.cpp.
|
static |
|
static |
Definition at line 1337 of file net_processing.cpp.
Relay transaction to every node.
Definition at line 1328 of file net_processing.cpp.
|
inlinestatic |
Definition at line 1625 of file net_processing.cpp.
|
static |
Returns true if the given validation state result may result in a peer banning/disconnecting us.
We use this to determine which unaccepted transactions from a whitelisted peer that we can safely relay.
Definition at line 985 of file net_processing.cpp.
void UpdateLastBlockAnnounceTime | ( | NodeId | node, |
int64_t | time_in_seconds | ||
) |
Definition at line 748 of file net_processing.cpp.
while | ( | !done &&!orphan_work_set. | empty() | ) |
|
static |
Average delay between peer address broadcasts in seconds.
Definition at line 103 of file net_processing.cpp.
|
static |
Average delay between feefilter broadcasts in seconds.
Definition at line 111 of file net_processing.cpp.
|
static |
Average delay between local address broadcasts in seconds.
Definition at line 101 of file net_processing.cpp.
|
static |
Timeout for (unprotected) outbound peers to sync to our chainwork, in seconds.
Definition at line 52 of file net_processing.cpp.
|
static |
Definition at line 1164 of file net_processing.cpp.
bool done = false |
Definition at line 1828 of file net_processing.cpp.
|
static |
How frequently to check for extra outbound peers and disconnect, in seconds.
Definition at line 56 of file net_processing.cpp.
static void g_cs_orphans |
Definition at line 92 of file net_processing.cpp.
|
static |
How long to wait (in microseconds) before downloading a transaction from an additional peer.
Definition at line 74 of file net_processing.cpp.
|
static |
Headers download timeout expressed in microseconds Timeout = base + per_header * (expected number of headers)
Definition at line 45 of file net_processing.cpp.
|
static |
Definition at line 46 of file net_processing.cpp.
|
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 66 of file net_processing.cpp.
|
static |
How many microseconds to delay requesting transactions from inbound peers.
Definition at line 72 of file net_processing.cpp.
|
static |
Definition at line 4112 of file net_processing.cpp.
|
static |
Average delay between trickled inventory transmissions in seconds.
Blocks and whitelisted receivers bypass this, outbound peers get half this delay.
Definition at line 106 of file net_processing.cpp.
|
static |
Maximum number of inventory items to send per transmission.
Limits the impact of low-fee transaction floods.
Definition at line 109 of file net_processing.cpp.
|
static |
Maximum feefilter broadcast delay after significant change.
Definition at line 113 of file net_processing.cpp.
|
static |
Maximum delay (in microseconds) for transaction requests to avoid biasing some peers over others.
Definition at line 76 of file net_processing.cpp.
|
static |
Limit to avoid sending big packets.
Not used in processing incoming GETDATA for compatibility
Definition at line 82 of file net_processing.cpp.
|
static |
Protect at least this many outbound peers from disconnection due to slow/ behind headers chain.
Definition at line 50 of file net_processing.cpp.
|
static |
Maximum number of announced transactions from a peer.
Definition at line 70 of file net_processing.cpp.
|
static |
Maximum number of in-flight transactions from a peer.
Definition at line 68 of file net_processing.cpp.
|
static |
Minimum time an outbound-peer-eviction candidate must be connected for, in order to evict, in seconds.
Definition at line 58 of file net_processing.cpp.
|
static |
Minimum time between orphan transactions expire time checks in seconds.
Definition at line 40 of file net_processing.cpp.
|
static |
Expiration time for orphan transactions in seconds.
Definition at line 38 of file net_processing.cpp.
|
static |
SHA256("main address relay")[0:8].
Definition at line 60 of file net_processing.cpp.
|
static |
How long to cache transactions in mapRelay for normal relay.
Definition at line 42 of file net_processing.cpp.
std::set<NodeId> setMisbehaving |
Definition at line 1827 of file net_processing.cpp.
|
static |
How frequently to check for stale tips, in seconds.
Definition at line 54 of file net_processing.cpp.
|
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 63 of file net_processing.cpp.
|
static |
How long to wait (in microseconds) before expiring an in-flight getdata request to a peer.
Definition at line 78 of file net_processing.cpp.