Bitcoin
net_processing.h
Go to the documentation of this file.
1 // Copyright (c) 2009-2010 Satoshi Nakamoto
2 // Copyright (c) 2009-2018 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 <net.h>
10 #include <validationinterface.h>
11 #include <consensus/params.h>
12 #include <sync.h>
13 
15 
17 static const unsigned int DEFAULT_MAX_ORPHAN_TRANSACTIONS = 100;
19 static const unsigned int DEFAULT_BLOCK_RECONSTRUCTION_EXTRA_TXN = 100;
21 static constexpr bool DEFAULT_ENABLE_BIP61{false};
22 
24 private:
25  CConnman* const connman;
26  BanMan* const m_banman;
27 
28  bool SendRejectsAndCheckIfBanned(CNode* pnode, bool enable_bip61) EXCLUSIVE_LOCKS_REQUIRED(cs_main);
29 public:
30  PeerLogicValidation(CConnman* connman, BanMan* banman, CScheduler &scheduler, bool enable_bip61);
31 
35  void BlockConnected(const std::shared_ptr<const CBlock>& pblock, const CBlockIndex* pindexConnected, const std::vector<CTransactionRef>& vtxConflicted) override;
39  void UpdatedBlockTip(const CBlockIndex *pindexNew, const CBlockIndex *pindexFork, bool fInitialDownload) override;
43  void BlockChecked(const CBlock& block, const CValidationState& state) override;
47  void NewPoWValidBlock(const CBlockIndex *pindex, const std::shared_ptr<const CBlock>& pblock) override;
48 
50  void InitializeNode(CNode* pnode) override;
52  void FinalizeNode(NodeId nodeid, bool& fUpdateConnectionTime) override;
59  bool ProcessMessages(CNode* pfrom, std::atomic<bool>& interrupt) override;
66  bool SendMessages(CNode* pto) override EXCLUSIVE_LOCKS_REQUIRED(pto->cs_sendProcessing);
67 
69  void ConsiderEviction(CNode *pto, int64_t time_in_seconds) EXCLUSIVE_LOCKS_REQUIRED(cs_main);
71  void CheckForStaleTipAndEvictPeers(const Consensus::Params &consensusParams);
74 
75 private:
77 
79  const bool m_enable_bip61;
80 };
81 
83  int nMisbehavior = 0;
84  int nSyncHeight = -1;
85  int nCommonHeight = -1;
86  std::vector<int> vHeightInFlight;
87 };
88 
90 bool GetNodeStateStats(NodeId nodeid, CNodeStateStats &stats);
91 
92 #endif // BITCOIN_NET_PROCESSING_H
void BlockChecked(const CBlock &block, const CValidationState &state) override
Definition: net_processing.cpp:1235
#define EXCLUSIVE_LOCKS_REQUIRED(...)
Definition: thread_annotations.h:13
static constexpr bool DEFAULT_ENABLE_BIP61
Definition: net_processing.h:21
void CheckForStaleTipAndEvictPeers(const Consensus::Params &consensusParams)
Definition: net_processing.cpp:3481
Definition: scheduler.h:37
int nSyncHeight
Definition: net_processing.h:84
void BlockConnected(const std::shared_ptr< const CBlock > &pblock, const CBlockIndex *pindexConnected, const std::vector< CTransactionRef > &vtxConflicted) override
Definition: net_processing.cpp:1111
Definition: net.h:113
Definition: params.h:49
std::vector< int > vHeightInFlight
Definition: net_processing.h:86
int nCommonHeight
Definition: net_processing.h:85
Definition: validation.h:98
bool SendRejectsAndCheckIfBanned(CNode *pnode, bool enable_bip61) EXCLUSIVE_LOCKS_REQUIRED(cs_main)
Definition: net_processing.cpp:3205
static CScheduler scheduler
Definition: init.cpp:178
Definition: net_processing.h:82
void ConsiderEviction(CNode *pto, int64_t time_in_seconds) EXCLUSIVE_LOCKS_REQUIRED(cs_main)
Definition: net_processing.cpp:3371
Definition: banman.h:37
int nMisbehavior
Definition: net_processing.h:83
bool GetNodeStateStats(NodeId nodeid, CNodeStateStats &stats)
Definition: net_processing.cpp:813
void NewPoWValidBlock(const CBlockIndex *pindex, const std::shared_ptr< const CBlock > &pblock) override
Definition: net_processing.cpp:1154
CCriticalSection cs_main
Definition: validation.cpp:100
Definition: net.h:619
Definition: net.h:471
bool ProcessMessages(CNode *pfrom, std::atomic< bool > &interrupt) override
Definition: net_processing.cpp:3239
int64_t m_stale_tip_check_time
Next time to check for stale tip.
Definition: net_processing.h:76
PeerLogicValidation(CConnman *connman, BanMan *banman, CScheduler &scheduler, bool enable_bip61)
Definition: net_processing.cpp:1093
int64_t NodeId
Definition: net.h:85
void UpdatedBlockTip(const CBlockIndex *pindexNew, const CBlockIndex *pindexFork, bool fInitialDownload) override
Definition: net_processing.cpp:1201
Definition: net_processing.h:23
void EvictExtraOutboundPeers(int64_t time_in_seconds) EXCLUSIVE_LOCKS_REQUIRED(cs_main)
Definition: net_processing.cpp:3424
void InitializeNode(CNode *pnode) override
Definition: net_processing.cpp:766
Definition: validationinterface.h:71
bool SendMessages(CNode *pto) override EXCLUSIVE_LOCKS_REQUIRED(pto -> cs_sendProcessing)
Definition: net_processing.cpp:3523
static const unsigned int DEFAULT_BLOCK_RECONSTRUCTION_EXTRA_TXN
Definition: net_processing.h:19
BanMan *const m_banman
Definition: net_processing.h:26
CConnman *const connman
Definition: net_processing.h:25
void FinalizeNode(NodeId nodeid, bool &fUpdateConnectionTime) override
Definition: net_processing.cpp:778
Definition: chain.h:139
signed long long int64_t
Definition: stdint.h:18
const bool m_enable_bip61
Definition: net_processing.h:79
Definition: block.h:72
static const unsigned int DEFAULT_MAX_ORPHAN_TRANSACTIONS
Definition: net_processing.h:17