diff --git a/src/avalanche/peermanager.h b/src/avalanche/peermanager.h --- a/src/avalanche/peermanager.h +++ b/src/avalanche/peermanager.h @@ -100,13 +100,6 @@ uint64_t slotCount = 0; uint64_t fragmentation = 0; - OrphanProofPool orphanProofs{AVALANCHE_ORPHANPROOFPOOL_SIZE}; - - /** - * Track proof ids to broadcast - */ - std::unordered_set m_unbroadcast_proofids; - /** * Several nodes can make an avalanche peer. In this case, all nodes are * considered interchangeable parts of the same peer. @@ -141,6 +134,16 @@ static constexpr int SELECT_PEER_MAX_RETRY = 3; static constexpr int SELECT_NODE_MAX_RETRY = 3; + /** + * Tracks proof which for which the UTXO are unavailable. + */ + OrphanProofPool orphanProofs{AVALANCHE_ORPHANPROOFPOOL_SIZE}; + + /** + * Track proof ids to broadcast + */ + std::set m_unbroadcast_proofids; + public: /** * Node API. @@ -151,9 +154,7 @@ bool forNode(NodeId nodeid, std::function func) const; bool updateNextRequestTime(NodeId nodeid, TimePoint timeout); - /** - * Randomly select a node to poll. - */ + // Randomly select a node to poll. NodeId selectNode(); /** @@ -161,6 +162,13 @@ */ void updatedBlockTip(); + /** + * Proof broadcast API. + */ + void addUnbroadcastProof(const ProofId &proofid); + void removeUnbroadcastProof(const ProofId &proofid); + void broadcastProofs(const CConnman &connman); + /**************************************************** * Functions which are public for testing purposes. * ****************************************************/ @@ -204,10 +212,6 @@ bool isOrphan(const ProofId &id) const; std::shared_ptr getOrphan(const ProofId &id) const; - void addUnbroadcastProof(const ProofId &proofid); - void removeUnbroadcastProof(const ProofId &proofid); - void broadcastProofs(const CConnman &connman); - private: PeerSet::iterator fetchOrCreatePeer(const std::shared_ptr &proof); bool addOrUpdateNode(const PeerSet::iterator &it, NodeId nodeid); diff --git a/src/avalanche/peermanager.cpp b/src/avalanche/peermanager.cpp --- a/src/avalanche/peermanager.cpp +++ b/src/avalanche/peermanager.cpp @@ -14,11 +14,6 @@ namespace avalanche { -static bool isOrphanState(const ProofValidationState &state) { - return state.GetResult() == ProofValidationResult::MISSING_UTXO || - state.GetResult() == ProofValidationResult::HEIGHT_MISMATCH; -} - bool PeerManager::addNode(NodeId nodeid, const ProofId &proofid) { auto &pview = peers.get(); auto it = pview.find(proofid); @@ -160,6 +155,11 @@ return NO_NODE; } +static bool isOrphanState(const ProofValidationState &state) { + return state.GetResult() == ProofValidationResult::MISSING_UTXO || + state.GetResult() == ProofValidationResult::HEIGHT_MISMATCH; +} + void PeerManager::updatedBlockTip() { std::vector invalidPeers; std::vector> newOrphans; @@ -511,8 +511,8 @@ void PeerManager::broadcastProofs(const CConnman &connman) { // For some reason SaltedProofIdHasher prevents the set from being swappable - std::unordered_set - previous_unbroadcasted_proofids = std::move(m_unbroadcast_proofids); + std::set previous_unbroadcasted_proofids = + std::move(m_unbroadcast_proofids); m_unbroadcast_proofids.clear(); for (auto &proofid : previous_unbroadcasted_proofids) {