diff --git a/src/avalanche/test/processor_tests.cpp b/src/avalanche/test/processor_tests.cpp --- a/src/avalanche/test/processor_tests.cpp +++ b/src/avalanche/test/processor_tests.cpp @@ -78,7 +78,8 @@ m_connman = connman.get(); m_node.connman = std::move(connman); m_node.peer_logic = std::make_unique( - m_connman, m_node.banman.get(), *m_node.scheduler); + m_connman, m_node.banman.get(), *m_node.scheduler, + *m_node.chainman); m_node.chain = interfaces::MakeChain(m_node, config.GetChainParams()); // The master private key we delegate to. diff --git a/src/init.cpp b/src/init.cpp --- a/src/init.cpp +++ b/src/init.cpp @@ -2215,8 +2215,9 @@ node.chainman = &g_chainman; ChainstateManager &chainman = EnsureChainman(node); - node.peer_logic.reset(new PeerLogicValidation( - node.connman.get(), node.banman.get(), *node.scheduler)); + node.peer_logic.reset( + new PeerLogicValidation(node.connman.get(), node.banman.get(), + *node.scheduler, *node.chainman)); RegisterValidationInterface(node.peer_logic.get()); // sanitize comments per BIP-0014, format user agent and check total size diff --git a/src/net_processing.h b/src/net_processing.h --- a/src/net_processing.h +++ b/src/net_processing.h @@ -14,6 +14,7 @@ extern RecursiveMutex cs_main; extern RecursiveMutex g_cs_orphans; +class ChainstateManager; class Config; /** @@ -33,12 +34,13 @@ private: CConnman *const connman; BanMan *const m_banman; + ChainstateManager &m_chainman; bool CheckIfBanned(CNode &pnode) EXCLUSIVE_LOCKS_REQUIRED(cs_main); public: PeerLogicValidation(CConnman *connman, BanMan *banman, - CScheduler &scheduler); + CScheduler &scheduler, ChainstateManager &chainman); /** * Overridden from CValidationInterface. diff --git a/src/net_processing.cpp b/src/net_processing.cpp --- a/src/net_processing.cpp +++ b/src/net_processing.cpp @@ -1346,8 +1346,10 @@ } PeerLogicValidation::PeerLogicValidation(CConnman *connmanIn, BanMan *banman, - CScheduler &scheduler) - : connman(connmanIn), m_banman(banman), m_stale_tip_check_time(0) { + CScheduler &scheduler, + ChainstateManager &chainman) + : connman(connmanIn), m_banman(banman), m_chainman(chainman), + m_stale_tip_check_time(0) { // Initialize global variables that cannot be constructed at startup. recentRejects.reset(new CRollingBloomFilter(120000, 0.000001)); @@ -2488,7 +2490,8 @@ bool ProcessMessage(const Config &config, CNode &pfrom, const std::string &msg_type, CDataStream &vRecv, - int64_t nTimeReceived, CConnman &connman, BanMan *banman, + int64_t nTimeReceived, ChainstateManager &chainman, + CConnman &connman, BanMan *banman, const std::atomic &interruptMsgProc) { const CChainParams &chainparams = config.GetChainParams(); LogPrint(BCLog::NET, "received: %s (%u bytes) peer=%d\n", @@ -3518,8 +3521,8 @@ if (fProcessBLOCKTXN) { return ProcessMessage(config, pfrom, NetMsgType::BLOCKTXN, - blockTxnMsg, nTimeReceived, connman, banman, - interruptMsgProc); + blockTxnMsg, nTimeReceived, chainman, connman, + banman, interruptMsgProc); } if (fRevertToHeaderProcessing) { @@ -4329,7 +4332,7 @@ bool fRet = false; try { fRet = ProcessMessage(config, *pfrom, msg_type, vRecv, msg.m_time, - *connman, m_banman, interruptMsgProc); + m_chainman, *connman, m_banman, interruptMsgProc); if (interruptMsgProc) { return false; } diff --git a/src/test/denialofservice_tests.cpp b/src/test/denialofservice_tests.cpp --- a/src/test/denialofservice_tests.cpp +++ b/src/test/denialofservice_tests.cpp @@ -79,7 +79,7 @@ auto connman = std::make_unique(config, 0x1337, 0x1337); auto peerLogic = std::make_unique( - connman.get(), nullptr, *m_node.scheduler); + connman.get(), nullptr, *m_node.scheduler, *m_node.chainman); // Mock an outbound peer CAddress addr1(ip(0xa0b0c001), NODE_NONE); @@ -163,7 +163,7 @@ auto connman = std::make_unique(config, 0x1337, 0x1337); auto peerLogic = std::make_unique( - connman.get(), nullptr, *m_node.scheduler); + connman.get(), nullptr, *m_node.scheduler, *m_node.chainman); const Consensus::Params &consensusParams = config.GetChainParams().GetConsensus(); @@ -242,7 +242,7 @@ DEFAULT_MISBEHAVING_BANTIME); auto connman = std::make_unique(config, 0x1337, 0x1337); auto peerLogic = std::make_unique( - connman.get(), banman.get(), *m_node.scheduler); + connman.get(), banman.get(), *m_node.scheduler, *m_node.chainman); banman->ClearBanned(); CAddress addr1(ip(0xa0b0c001), NODE_NONE); @@ -311,7 +311,7 @@ DEFAULT_MISBEHAVING_BANTIME); auto connman = std::make_unique(config, 0x1337, 0x1337); auto peerLogic = std::make_unique( - connman.get(), banman.get(), *m_node.scheduler); + connman.get(), banman.get(), *m_node.scheduler, *m_node.chainman); banman->ClearBanned(); // because 11 is my favorite number. @@ -368,7 +368,7 @@ DEFAULT_MISBEHAVING_BANTIME); auto connman = std::make_unique(config, 0x1337, 0x1337); auto peerLogic = std::make_unique( - connman.get(), banman.get(), *m_node.scheduler); + connman.get(), banman.get(), *m_node.scheduler, *m_node.chainman); banman->ClearBanned(); int64_t nStartTime = GetTime(); diff --git a/src/test/fuzz/process_message.cpp b/src/test/fuzz/process_message.cpp --- a/src/test/fuzz/process_message.cpp +++ b/src/test/fuzz/process_message.cpp @@ -111,8 +111,9 @@ try { (void)ProcessMessage( config, p2p_node, random_message_type, random_bytes_data_stream, - GetTimeMillis(), *g_setup->m_node.connman.get(), - g_setup->m_node.banman.get(), std::atomic{false}); + GetTimeMillis(), *g_setup->m_node.chainman, + *g_setup->m_node.connman.get(), g_setup->m_node.banman.get(), + std::atomic{false}); } catch (const std::ios_base::failure &e) { const std::string exception_message{e.what()}; const auto p = diff --git a/src/test/util/setup_common.cpp b/src/test/util/setup_common.cpp --- a/src/test/util/setup_common.cpp +++ b/src/test/util/setup_common.cpp @@ -179,7 +179,8 @@ // Deterministic randomness for tests. m_node.connman = std::make_unique(config, 0x1337, 0x1337); m_node.peer_logic = std::make_unique( - m_node.connman.get(), m_node.banman.get(), *m_node.scheduler); + m_node.connman.get(), m_node.banman.get(), *m_node.scheduler, + *m_node.chainman); } TestingSetup::~TestingSetup() {