Bitcoin ABC  0.26.3
P2P Digital Currency
net_processing.h
Go to the documentation of this file.
1 // Copyright (c) 2009-2010 Satoshi Nakamoto
2 // Copyright (c) 2009-2016 The Bitcoin Core developers
3 // Distributed under the MIT software license, see the accompanying
4 // file COPYING or http://www.opensource.org/licenses/mit-license.php.
5 
6 #ifndef BITCOIN_NET_PROCESSING_H
7 #define BITCOIN_NET_PROCESSING_H
8 
9 #include <avalanche/avalanche.h>
10 #include <net.h>
11 #include <sync.h>
12 #include <validationinterface.h>
13 
14 namespace avalanche {
15 struct ProofId;
16 class Processor;
17 } // namespace avalanche
18 
19 class AddrMan;
20 class CTxMemPool;
21 class ChainstateManager;
22 class Config;
23 
28 static const uint32_t DEFAULT_MAX_ORPHAN_TRANSACTIONS{100};
33 static const uint32_t DEFAULT_BLOCK_RECONSTRUCTION_EXTRA_TXN{100};
34 static const bool DEFAULT_PEERBLOCKFILTERS = false;
37 static const int DISCOURAGEMENT_THRESHOLD{100};
39 static constexpr size_t MAX_ADDR_TO_SEND{1000};
40 
46 static const unsigned int MAX_HEADERS_RESULTS = 2000;
47 
49  int nSyncHeight = -1;
50  int nCommonHeight = -1;
52  std::chrono::microseconds m_ping_wait;
53  std::vector<int> vHeightInFlight;
56  uint64_t m_addr_processed = 0;
57  uint64_t m_addr_rate_limited = 0;
58  bool m_addr_relay_enabled{false};
60  int64_t presync_height{-1};
61 };
62 
64 public:
65  struct Options {
74  bool capture_messages{false};
79 
88 
91  bool deterministic_rng{false};
92  };
93 
94  static std::unique_ptr<PeerManager>
95  make(CConnman &connman, AddrMan &addrman, BanMan *banman,
96  ChainstateManager &chainman, CTxMemPool &pool,
97  avalanche::Processor *const avalanche, Options opts);
98  virtual ~PeerManager() {}
99 
110  virtual std::optional<std::string>
111  FetchBlock(const Config &config, NodeId peer_id,
112  const CBlockIndex &block_index) = 0;
113 
115  virtual void StartScheduledTasks(CScheduler &scheduler) = 0;
116 
118  virtual bool GetNodeStateStats(NodeId nodeid,
119  CNodeStateStats &stats) const = 0;
120 
122  virtual bool IgnoresIncomingTxs() = 0;
123 
125  virtual void RelayTransaction(const TxId &txid) = 0;
126 
128  virtual void RelayProof(const avalanche::ProofId &proofid) = 0;
129 
131  virtual void SendPings() = 0;
132 
134  virtual void SetBestHeight(int height) = 0;
135 
137  virtual void UnitTestMisbehaving(const NodeId peer_id,
138  const int howmuch) = 0;
139 
144  virtual void CheckForStaleTipAndEvictPeers() = 0;
145 
147  virtual void ProcessMessage(const Config &config, CNode &pfrom,
148  const std::string &msg_type, CDataStream &vRecv,
149  const std::chrono::microseconds time_received,
150  const std::atomic<bool> &interruptMsgProc)
152 
158  int64_t time_in_seconds) = 0;
159 };
160 
161 #endif // BITCOIN_NET_PROCESSING_H
static constexpr size_t AVALANCHE_DEFAULT_PEER_REPLACEMENT_COOLDOWN
Peer replacement cooldown time default value in seconds.
Definition: avalanche.h:34
static constexpr bool DEFAULT_AVALANCHE_PRECONSENSUS
Default for -avalanchepreconsensus.
Definition: avalanche.h:66
static constexpr size_t AVALANCHE_DEFAULT_COOLDOWN
Avalanche default cooldown in milliseconds.
Definition: avalanche.h:40
Stochastic address manager.
Definition: addrman.h:69
Definition: banman.h:58
The block chain is a tree shaped structure starting with the genesis block at the root,...
Definition: blockindex.h:25
Definition: net.h:845
Double ended buffer combining vector and stream-like interfaces.
Definition: streams.h:177
Information about a peer.
Definition: net.h:456
Simple class for background tasks that should be run periodically or once "after a while".
Definition: scheduler.h:41
CTxMemPool stores valid-according-to-the-current-best-chain transactions that may be included in the ...
Definition: txmempool.h:209
Implement this to subscribe to events generated in validation.
Provides an interface for creating and interacting with one or two chainstates: an IBD chainstate gen...
Definition: validation.h:1218
Definition: config.h:19
Interface for message handling.
Definition: net.h:794
static Mutex g_msgproc_mutex
Mutex for anything that is only accessed via the msg processing thread.
Definition: net.h:799
virtual void SendPings()=0
Send ping message to all peers.
static std::unique_ptr< PeerManager > make(CConnman &connman, AddrMan &addrman, BanMan *banman, ChainstateManager &chainman, CTxMemPool &pool, avalanche::Processor *const avalanche, Options opts)
virtual void ProcessMessage(const Config &config, CNode &pfrom, const std::string &msg_type, CDataStream &vRecv, const std::chrono::microseconds time_received, const std::atomic< bool > &interruptMsgProc) EXCLUSIVE_LOCKS_REQUIRED(g_msgproc_mutex)=0
Process a single message from a peer.
virtual void StartScheduledTasks(CScheduler &scheduler)=0
Begin running background tasks, should only be called once.
virtual void SetBestHeight(int height)=0
Set the best height.
virtual bool IgnoresIncomingTxs()=0
Whether this node ignores txs received over p2p.
virtual void RelayTransaction(const TxId &txid)=0
Relay transaction to all peers.
virtual void UnitTestMisbehaving(const NodeId peer_id, const int howmuch)=0
Public for unit testing.
virtual std::optional< std::string > FetchBlock(const Config &config, NodeId peer_id, const CBlockIndex &block_index)=0
Attempt to manually fetch block from a given peer.
virtual void RelayProof(const avalanche::ProofId &proofid)=0
Relay proof to all peers.
virtual bool GetNodeStateStats(NodeId nodeid, CNodeStateStats &stats) const =0
Get statistics from node state.
virtual ~PeerManager()
virtual void UpdateLastBlockAnnounceTime(NodeId node, int64_t time_in_seconds)=0
This function is used for testing the stale tip eviction logic, see denialofservice_tests....
virtual void CheckForStaleTipAndEvictPeers()=0
Evict extra outbound peers.
Definition: init.h:28
static const bool DEFAULT_BLOCKSONLY
Default for blocks only.
Definition: net.h:97
static constexpr size_t MAX_ADDR_TO_SEND
The maximum number of address records permitted in an ADDR message.
static const uint32_t DEFAULT_BLOCK_RECONSTRUCTION_EXTRA_TXN
Default number of non-mempool transactions to keep around for block reconstruction.
static const uint32_t DEFAULT_MAX_ORPHAN_TRANSACTIONS
Default for -maxorphantx, maximum number of orphan transactions kept in memory.
static const int DISCOURAGEMENT_THRESHOLD
Threshold for marking a node to be discouraged, e.g.
static const bool DEFAULT_PEERBLOCKFILTERS
static const unsigned int MAX_HEADERS_RESULTS
Number of headers sent in one getheaders result.
int64_t NodeId
Definition: nodeid.h:10
ServiceFlags
nServices flags.
Definition: protocol.h:335
Definition: amount.h:19
std::chrono::microseconds m_ping_wait
Amount m_fee_filter_received
std::vector< int > vHeightInFlight
uint64_t m_addr_rate_limited
uint64_t m_addr_processed
int64_t presync_height
ServiceFlags their_services
int64_t avalanche_cooldown
Minimum time between two AVAPOLL messages.
size_t max_addr_to_send
Number of addresses a node may send in an ADDR message.
bool deterministic_rng
Whether or not the internal RNG behaves deterministically (this is a test-only option).
uint32_t max_extra_txs
Number of non-mempool transactions to keep around for block reconstruction.
uint32_t max_orphan_txs
Maximum number of orphan transactions kept in memory.
bool avalanche_preconsensus
Whether this node has enabled avalanche preconsensus.
int64_t avalanche_peer_replacement_cooldown
Minimum time before we will consider replacing a finalized proof with a conflicting one.
bool ignore_incoming_txs
Whether this node is running in -blocksonly mode.
bool capture_messages
Whether all P2P messages are captured to disk.
A TxId is the identifier of a transaction.
Definition: txid.h:14
#define EXCLUSIVE_LOCKS_REQUIRED(...)
Definition: threadsafety.h:56