diff --git a/src/avalanche/peermanager.h b/src/avalanche/peermanager.h --- a/src/avalanche/peermanager.h +++ b/src/avalanche/peermanager.h @@ -138,7 +138,7 @@ /** * Node API. */ - bool addNode(const Proof &proof, NodeId nodeid, const CPubKey &pubkey); + bool addNode(NodeId nodeid, const Proof &proof, const CPubKey &pubkey); bool removeNode(NodeId nodeid); bool forNode(NodeId nodeid, std::function func) const; @@ -167,9 +167,6 @@ // Accssors. uint64_t getSlotCount() const { return slotCount; } uint64_t getFragmentation() const { return fragmentation; } - -private: - PeerId addPeer(PeerId peerid, uint32_t score); }; /** diff --git a/src/avalanche/peermanager.cpp b/src/avalanche/peermanager.cpp --- a/src/avalanche/peermanager.cpp +++ b/src/avalanche/peermanager.cpp @@ -101,7 +101,7 @@ return true; } -bool PeerManager::addNode(const Proof &proof, NodeId nodeid, +bool PeerManager::addNode(NodeId nodeid, const Proof &proof, const CPubKey &pubkey) { const PeerId peerid = getPeer(proof); diff --git a/src/avalanche/processor.h b/src/avalanche/processor.h --- a/src/avalanche/processor.h +++ b/src/avalanche/processor.h @@ -59,6 +59,7 @@ namespace avalanche { class PeerManager; +class Proof; /** * Vote history. @@ -257,7 +258,7 @@ bool registerVotes(NodeId nodeid, const Response &response, std::vector &updates); - bool addPeer(NodeId nodeid, int64_t score, const CPubKey &pubkey); + bool addPeer(NodeId nodeid, const Proof &proof, const CPubKey &pubkey); bool forNode(NodeId nodeid, std::function func) const; CPubKey getSessionPubKey() const { return sessionKey.GetPubKey(); } diff --git a/src/avalanche/processor.cpp b/src/avalanche/processor.cpp --- a/src/avalanche/processor.cpp +++ b/src/avalanche/processor.cpp @@ -333,9 +333,10 @@ return true; } -bool Processor::addPeer(NodeId nodeid, int64_t score, const CPubKey &pubkey) { +bool Processor::addPeer(NodeId nodeid, const Proof &proof, + const CPubKey &pubkey) { LOCK(cs_peerManager); - return peerManager->addNode(Proof(score), nodeid, pubkey); + return peerManager->addNode(nodeid, proof, pubkey); } bool Processor::forNode(NodeId nodeid, 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 @@ -158,11 +158,11 @@ // One peer, we always return it. Proof proof0(100); - pm.addNode(Proof(100), node0, CPubKey()); + pm.addNode(node0, Proof(100), CPubKey()); BOOST_CHECK_EQUAL(pm.selectNode(), node0); // Two peers, verify ratio. - pm.addNode(Proof(200), node1, CPubKey()); + pm.addNode(node1, Proof(200), CPubKey()); std::unordered_map results = {}; for (int i = 0; i < 10000; i++) { @@ -174,7 +174,7 @@ BOOST_CHECK(abs(2 * results[0] - results[1]) < 500); // Three peers, verify ratio. - pm.addNode(Proof(100), node2, CPubKey()); + pm.addNode(node2, Proof(100), CPubKey()); results.clear(); for (int i = 0; i < 10000; i++) { @@ -365,7 +365,7 @@ // Add 4 nodes. for (int i = 0; i < 4; i++) { - BOOST_CHECK(pm.addNode(proof, i, CPubKey())); + BOOST_CHECK(pm.addNode(i, proof, CPubKey())); } for (int i = 0; i < 100; i++) { @@ -399,7 +399,7 @@ // Move a node from a peer to another. Proof altproof(0); PeerId altpeer = pm.getPeer(altproof); - BOOST_CHECK(pm.addNode(altproof, 3, CPubKey())); + BOOST_CHECK(pm.addNode(3, altproof, CPubKey())); for (int i = 0; i < 100; i++) { NodeId n = pm.selectNode(); 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 @@ -215,7 +215,7 @@ std::array nodes; for (CNode *&n : nodes) { n = ConnectNode(config, nServices, peerLogic, connman); - BOOST_CHECK(pm.addNode(proof, n->GetId(), CPubKey())); + BOOST_CHECK(pm.addNode(n->GetId(), proof, CPubKey())); } return nodes; @@ -530,7 +530,7 @@ auto avanode = ConnectNode(config, NODE_AVALANCHE, *peerLogic, connman.get()); NodeId avanodeid = avanode->GetId(); - BOOST_CHECK(p.addPeer(avanodeid, 100, CPubKey())); + BOOST_CHECK(p.addPeer(avanodeid, Proof(100), CPubKey())); // It returns the avalanche peer. BOOST_CHECK_EQUAL(AvalancheTest::getSuitableNodeToQuery(p), avanodeid); @@ -677,7 +677,7 @@ auto avanode = ConnectNode(config, NODE_AVALANCHE, *peerLogic, connman.get()); NodeId avanodeid = avanode->GetId(); - BOOST_CHECK(p.addPeer(avanodeid, 100, CPubKey())); + BOOST_CHECK(p.addPeer(avanodeid, Proof(100), CPubKey())); // Expire requests after some time. auto queryTimeDuration = std::chrono::milliseconds(10); @@ -730,7 +730,7 @@ std::array nodes; for (auto &n : nodes) { n = ConnectNode(config, NODE_AVALANCHE, *peerLogic, connman.get()); - BOOST_CHECK(pm.addNode(proof, n->GetId(), CPubKey())); + BOOST_CHECK(pm.addNode(n->GetId(), proof, CPubKey())); } // Add a block to poll @@ -891,7 +891,7 @@ auto avanode = ConnectNode(config, NODE_AVALANCHE, *peerLogic, connman.get()); NodeId nodeid = avanode->GetId(); - BOOST_CHECK(p.addPeer(nodeid, 100, CPubKey())); + BOOST_CHECK(p.addPeer(nodeid, Proof(100), CPubKey())); // There is no query in flight at the moment. BOOST_CHECK_EQUAL(AvalancheTest::getSuitableNodeToQuery(p), nodeid); diff --git a/src/rpc/avalanche.cpp b/src/rpc/avalanche.cpp --- a/src/rpc/avalanche.cpp +++ b/src/rpc/avalanche.cpp @@ -3,6 +3,7 @@ // file COPYING or http://www.opensource.org/licenses/mit-license.php. #include +#include #include #include #include @@ -69,7 +70,7 @@ CPubKey pubkey{HexToPubKey(keyHex)}; - g_avalanche->addPeer(nodeid, 100, pubkey); + g_avalanche->addPeer(nodeid, avalanche::Proof(100), pubkey); return {}; }