diff --git a/src/avalanche/peermanager.h b/src/avalanche/peermanager.h --- a/src/avalanche/peermanager.h +++ b/src/avalanche/peermanager.h @@ -31,6 +31,7 @@ #include #include +class ChainstateManager; class CScheduler; namespace avalanche { @@ -236,7 +237,11 @@ uint32_t totalPeersScore = 0; uint32_t connectedPeersScore = 0; + ChainstateManager &chainman; + public: + PeerManager(ChainstateManager &chainmanIn) : chainman(chainmanIn){}; + /** * Node API. */ diff --git a/src/avalanche/peermanager.cpp b/src/avalanche/peermanager.cpp --- a/src/avalanche/peermanager.cpp +++ b/src/avalanche/peermanager.cpp @@ -9,7 +9,7 @@ #include #include #include -#include // For ChainstateActive() +#include // For ChainstateManager #include #include @@ -229,9 +229,9 @@ // Check the proof's validity. ProofValidationState validationState; - if (!WITH_LOCK(cs_main, - return proof->verify(validationState, - ::ChainstateActive().CoinsTip()))) { + if (!WITH_LOCK(cs_main, return proof->verify( + validationState, + chainman.ActiveChainstate().CoinsTip()))) { if (isOrphanState(validationState)) { orphanProofPool.addProofIfPreferred(proof); if (orphanProofPool.countProofs() > AVALANCHE_MAX_ORPHAN_PROOFS) { @@ -463,7 +463,7 @@ { LOCK(cs_main); - const CCoinsViewCache &coins = ::ChainstateActive().CoinsTip(); + const CCoinsViewCache &coins = chainman.ActiveChainstate().CoinsTip(); for (const auto &p : peers) { ProofValidationState state; if (!p.proof->verify(state, coins)) { diff --git a/src/avalanche/processor.cpp b/src/avalanche/processor.cpp --- a/src/avalanche/processor.cpp +++ b/src/avalanche/processor.cpp @@ -138,7 +138,7 @@ : connman(connmanIn), chainman(chainmanIn), queryTimeoutDuration(argsman.GetArg( "-avatimeout", AVALANCHE_DEFAULT_QUERY_TIMEOUT.count())), - round(0), peerManager(std::make_unique()), + round(0), peerManager(std::make_unique(chainman)), peerData(std::move(peerDataIn)), sessionKey(std::move(sessionKeyIn)), minQuorumScore(minQuorumTotalScoreIn), minQuorumConnectedScoreRatio(minQuorumConnectedScoreRatioIn), diff --git a/src/avalanche/test/peermanager_tests.cpp b/src/avalanche/test/peermanager_tests.cpp --- a/src/avalanche/test/peermanager_tests.cpp +++ b/src/avalanche/test/peermanager_tests.cpp @@ -291,7 +291,7 @@ BOOST_AUTO_TEST_CASE(peer_probabilities) { // No peers. - avalanche::PeerManager pm; + avalanche::PeerManager pm(*Assert(m_node.chainman)); BOOST_CHECK_EQUAL(pm.selectNode(), NO_NODE); const NodeId node0 = 42, node1 = 69, node2 = 37; @@ -327,7 +327,7 @@ BOOST_AUTO_TEST_CASE(remove_peer) { // No peers. - avalanche::PeerManager pm; + avalanche::PeerManager pm(*Assert(m_node.chainman)); BOOST_CHECK_EQUAL(pm.selectPeer(), NO_PEER); // Add 4 peers. @@ -402,7 +402,7 @@ } BOOST_AUTO_TEST_CASE(compact_slots) { - avalanche::PeerManager pm; + avalanche::PeerManager pm(*Assert(m_node.chainman)); // Add 4 peers. std::array peerids; @@ -431,7 +431,7 @@ } BOOST_AUTO_TEST_CASE(node_crud) { - avalanche::PeerManager pm; + avalanche::PeerManager pm(*Assert(m_node.chainman)); // Create one peer. auto proof = buildRandomProof(10000000 * MIN_VALID_PROOF_SCORE); @@ -491,7 +491,7 @@ } BOOST_AUTO_TEST_CASE(node_binding) { - avalanche::PeerManager pm; + avalanche::PeerManager pm(*Assert(m_node.chainman)); auto proof = buildRandomProof(MIN_VALID_PROOF_SCORE); const ProofId &proofid = proof->getId(); @@ -591,7 +591,7 @@ BOOST_AUTO_TEST_CASE(node_binding_reorg) { gArgs.ForceSetArg("-avaproofstakeutxoconfirmations", "2"); - avalanche::PeerManager pm; + avalanche::PeerManager pm(*Assert(m_node.chainman)); auto proof = buildRandomProof(MIN_VALID_PROOF_SCORE, 99); const ProofId &proofid = proof->getId(); @@ -664,7 +664,7 @@ addCoin({txid2, i}, key); } - avalanche::PeerManager pm; + avalanche::PeerManager pm(*Assert(m_node.chainman)); CKey masterKey = CKey::MakeCompressedKey(); const auto getPeerId = [&](const std::vector &outpoints) { return TestPeerManager::registerAndGetPeerId( @@ -718,7 +718,7 @@ BOOST_AUTO_TEST_CASE(orphan_proofs) { gArgs.ForceSetArg("-avaproofstakeutxoconfirmations", "2"); - avalanche::PeerManager pm; + avalanche::PeerManager pm(*Assert(m_node.chainman)); auto key = CKey::MakeCompressedKey(); int immatureHeight = 100; @@ -794,7 +794,7 @@ } BOOST_AUTO_TEST_CASE(dangling_node) { - avalanche::PeerManager pm; + avalanche::PeerManager pm(*Assert(m_node.chainman)); auto proof = buildRandomProof(MIN_VALID_PROOF_SCORE); PeerId peerid = TestPeerManager::registerAndGetPeerId(pm, proof); @@ -839,7 +839,7 @@ } BOOST_AUTO_TEST_CASE(proof_accessors) { - avalanche::PeerManager pm; + avalanche::PeerManager pm(*Assert(m_node.chainman)); constexpr int numProofs = 10; @@ -883,7 +883,7 @@ } BOOST_FIXTURE_TEST_CASE(conflicting_proof_rescan, NoCoolDownFixture) { - avalanche::PeerManager pm; + avalanche::PeerManager pm(*Assert(m_node.chainman)); const CKey key = CKey::MakeCompressedKey(); @@ -938,7 +938,7 @@ BOOST_CHECK_EQUAL(comparator(candidate, reference), expectAccepted); BOOST_CHECK_EQUAL(comparator(reference, candidate), !expectAccepted); - avalanche::PeerManager pm; + avalanche::PeerManager pm(*Assert(m_node.chainman)); BOOST_CHECK(pm.registerProof(reference)); BOOST_CHECK(pm.isBoundToPeer(reference->getId())); @@ -1009,7 +1009,7 @@ BOOST_AUTO_TEST_CASE(conflicting_orphans) { gArgs.ForceSetArg("-avaproofstakeutxoconfirmations", "2"); - avalanche::PeerManager pm; + avalanche::PeerManager pm(*Assert(m_node.chainman)); const CKey key = CKey::MakeCompressedKey(); @@ -1051,7 +1051,7 @@ } BOOST_FIXTURE_TEST_CASE(preferred_conflicting_proof, NoCoolDownFixture) { - avalanche::PeerManager pm; + avalanche::PeerManager pm(*Assert(m_node.chainman)); const CKey key = CKey::MakeCompressedKey(); const COutPoint conflictingOutpoint = createUtxo(key); @@ -1082,7 +1082,7 @@ } BOOST_FIXTURE_TEST_CASE(update_next_conflict_time, NoCoolDownFixture) { - avalanche::PeerManager pm; + avalanche::PeerManager pm(*Assert(m_node.chainman)); auto now = GetTime(); SetMockTime(now.count()); @@ -1115,7 +1115,7 @@ } BOOST_FIXTURE_TEST_CASE(register_force_accept, NoCoolDownFixture) { - avalanche::PeerManager pm; + avalanche::PeerManager pm(*Assert(m_node.chainman)); const CKey key = CKey::MakeCompressedKey(); @@ -1179,7 +1179,7 @@ } BOOST_FIXTURE_TEST_CASE(evicted_proof, NoCoolDownFixture) { - avalanche::PeerManager pm; + avalanche::PeerManager pm(*Assert(m_node.chainman)); const CKey key = CKey::MakeCompressedKey(); @@ -1209,7 +1209,7 @@ } BOOST_AUTO_TEST_CASE(conflicting_proof_cooldown) { - avalanche::PeerManager pm; + avalanche::PeerManager pm(*Assert(m_node.chainman)); const CKey key = CKey::MakeCompressedKey(); @@ -1278,7 +1278,7 @@ BOOST_FIXTURE_TEST_CASE(reject_proof, NoCoolDownFixture) { gArgs.ForceSetArg("-avaproofstakeutxoconfirmations", "2"); - avalanche::PeerManager pm; + avalanche::PeerManager pm(*Assert(m_node.chainman)); const CKey key = CKey::MakeCompressedKey(); @@ -1356,7 +1356,7 @@ } BOOST_AUTO_TEST_CASE(should_request_more_nodes) { - avalanche::PeerManager pm; + avalanche::PeerManager pm(*Assert(m_node.chainman)); auto proof = buildRandomProof(MIN_VALID_PROOF_SCORE); BOOST_CHECK(pm.registerProof(proof)); @@ -1404,7 +1404,7 @@ } BOOST_AUTO_TEST_CASE(score_ordering) { - avalanche::PeerManager pm; + avalanche::PeerManager pm(*Assert(m_node.chainman)); std::vector expectedScores(10); // Expect the peers to be ordered by descending score @@ -1430,7 +1430,7 @@ BOOST_FIXTURE_TEST_CASE(known_score_tracking, NoCoolDownFixture) { gArgs.ForceSetArg("-avaproofstakeutxoconfirmations", "2"); - avalanche::PeerManager pm; + avalanche::PeerManager pm(*Assert(m_node.chainman)); const CKey key = CKey::MakeCompressedKey(); @@ -1540,7 +1540,7 @@ } BOOST_AUTO_TEST_CASE(connected_score_tracking) { - avalanche::PeerManager pm; + avalanche::PeerManager pm(*Assert(m_node.chainman)); const auto checkScores = [&pm](uint32_t known, uint32_t connected) { BOOST_CHECK_EQUAL(pm.getTotalPeersScore(), known); @@ -1628,7 +1628,7 @@ } BOOST_FIXTURE_TEST_CASE(proof_radix_tree, NoCoolDownFixture) { - avalanche::PeerManager pm; + avalanche::PeerManager pm(*Assert(m_node.chainman)); gArgs.ForceSetArg("-enableavalancheproofreplacement", "1"); @@ -1744,7 +1744,7 @@ } BOOST_AUTO_TEST_CASE(received_avaproofs) { - avalanche::PeerManager pm; + avalanche::PeerManager pm(*Assert(m_node.chainman)); auto addNode = [&](NodeId nodeid) { auto proof = buildRandomProof(MIN_VALID_PROOF_SCORE); @@ -1767,7 +1767,7 @@ BOOST_FIXTURE_TEST_CASE(cleanup_dangling_proof, NoCoolDownFixture) { gArgs.ForceSetArg("-enableavalancheproofreplacement", "1"); - avalanche::PeerManager pm; + avalanche::PeerManager pm(*Assert(m_node.chainman)); const auto now = GetTime(); auto mocktime = now; diff --git a/src/avalanche/test/proofpool_tests.cpp b/src/avalanche/test/proofpool_tests.cpp --- a/src/avalanche/test/proofpool_tests.cpp +++ b/src/avalanche/test/proofpool_tests.cpp @@ -77,7 +77,7 @@ BOOST_AUTO_TEST_CASE(rescan) { gArgs.ForceSetArg("-avaproofstakeutxoconfirmations", "1"); ProofPool testPool; - avalanche::PeerManager pm; + avalanche::PeerManager pm(*Assert(m_node.chainman)); testPool.rescan(pm); BOOST_CHECK_EQUAL(testPool.size(), 0);