diff --git a/src/avalanche/proof.h b/src/avalanche/proof.h --- a/src/avalanche/proof.h +++ b/src/avalanche/proof.h @@ -194,6 +194,14 @@ using ProofRef = RCUPtr; +class SaltedProofHasher : private SaltedUint256Hasher { +public: + SaltedProofHasher() : SaltedUint256Hasher() {} + size_t operator()(const ProofRef &proof) const { + return hash(proof->getId()); + } +}; + } // namespace avalanche #endif // BITCOIN_AVALANCHE_PROOF_H diff --git a/src/avalanche/proofpool.cpp b/src/avalanche/proofpool.cpp --- a/src/avalanche/proofpool.cpp +++ b/src/avalanche/proofpool.cpp @@ -7,6 +7,8 @@ #include #include +#include + namespace avalanche { ProofPool::AddProofStatus @@ -87,8 +89,11 @@ pool.clear(); cacheClean = false; + std::unordered_set registeredProofs; for (auto &entry : previousPool) { - peerManager.registerProof(entry.proof); + if (registeredProofs.insert(entry.proof).second) { + peerManager.registerProof(entry.proof); + } } }