diff --git a/src/avalanche/peermanager.h b/src/avalanche/peermanager.h --- a/src/avalanche/peermanager.h +++ b/src/avalanche/peermanager.h @@ -20,6 +20,7 @@ #include #include +#include #include namespace avalanche { @@ -63,18 +64,18 @@ uint32_t index = -1; uint32_t node_count = 0; - Proof proof; + std::shared_ptr proof; Peer(PeerId peerid_, Proof proof_) - : peerid(peerid_), proof(std::move(proof_)) {} + : peerid(peerid_), proof(std::make_shared(std::move(proof_))) {} - const ProofId &getProofId() const { return proof.getId(); } - uint32_t getScore() const { return proof.getScore(); } + const ProofId &getProofId() const { return proof->getId(); } + uint32_t getScore() const { return proof->getScore(); } }; struct proof_index { using result_type = ProofId; - result_type operator()(const Peer &p) const { return p.proof.getId(); } + result_type operator()(const Peer &p) const { return p.proof->getId(); } }; struct next_request_time {}; diff --git a/src/avalanche/peermanager.cpp b/src/avalanche/peermanager.cpp --- a/src/avalanche/peermanager.cpp +++ b/src/avalanche/peermanager.cpp @@ -169,7 +169,7 @@ const CCoinsViewCache &coins = ::ChainstateActive().CoinsTip(); for (const auto &p : peers) { ProofValidationState state; - if (!p.proof.verify(state, coins)) { + if (!p.proof->verify(state, coins)) { invalidPeers.push_back(p.peerid); } } @@ -260,7 +260,7 @@ peerid, std::chrono::steady_clock::now()))); // Release UTXOs attached to this proof. - for (const auto &s : it->proof.getStakes()) { + for (const auto &s : it->proof->getStakes()) { bool deleted = utxos.erase(s.getStake().getUTXO()) > 0; assert(deleted); } diff --git a/src/rpc/avalanche.cpp b/src/rpc/avalanche.cpp --- a/src/rpc/avalanche.cpp +++ b/src/rpc/avalanche.cpp @@ -432,7 +432,7 @@ UniValue obj(UniValue::VOBJ); CDataStream serproof(SER_NETWORK, PROTOCOL_VERSION); - serproof << peer.proof; + serproof << *peer.proof; obj.pushKV("peerid", uint64_t(peer.peerid)); obj.pushKV("proof", HexStr(serproof));