diff --git a/src/avalanche/proofbuilder.h b/src/avalanche/proofbuilder.h --- a/src/avalanche/proofbuilder.h +++ b/src/avalanche/proofbuilder.h @@ -47,7 +47,7 @@ [[nodiscard]] bool addUTXO(COutPoint utxo, Amount amount, uint32_t height, bool is_coinbase, CKey key); - Proof build(); + ProofRef build(); private: LimitedProofId getLimitedProofId() const; diff --git a/src/avalanche/proofbuilder.cpp b/src/avalanche/proofbuilder.cpp --- a/src/avalanche/proofbuilder.cpp +++ b/src/avalanche/proofbuilder.cpp @@ -33,7 +33,7 @@ .second; } -Proof ProofBuilder::build() { +ProofRef ProofBuilder::build() { SchnorrSig proofSignature; const LimitedProofId limitedProofId = getLimitedProofId(); if (!masterKey.SignSchnorr(limitedProofId, proofSignature)) { @@ -53,9 +53,9 @@ signedStakes.push_back(handle.value().sign(commitment)); } - return Proof(sequence, expirationTime, masterKey.GetPubKey(), - std::move(signedStakes), payoutScriptPubKey, - std::move(proofSignature)); + return std::make_shared( + sequence, expirationTime, masterKey.GetPubKey(), + std::move(signedStakes), payoutScriptPubKey, std::move(proofSignature)); } LimitedProofId ProofBuilder::getLimitedProofId() const { diff --git a/src/avalanche/test/orphanproofpool_tests.cpp b/src/avalanche/test/orphanproofpool_tests.cpp --- a/src/avalanche/test/orphanproofpool_tests.cpp +++ b/src/avalanche/test/orphanproofpool_tests.cpp @@ -28,7 +28,7 @@ BOOST_CHECK(pb.addUTXO(COutPoint(txid, 0), v, height, false, CKey::MakeCompressedKey())); } - return std::make_shared(pb.build()); + return pb.build(); } BOOST_AUTO_TEST_CASE(pool_starts_empty) { 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 @@ -462,7 +462,7 @@ Amount amount = 1 * COIN; const int height = 1234; BOOST_CHECK(pb.addUTXO(utxo, amount, height, false, key)); - auto proof = std::make_shared(pb.build()); + auto proof = pb.build(); const ProofId &proofid = proof->getId(); { @@ -549,7 +549,7 @@ BOOST_CHECK(pb.addUTXO(o, v, height, false, key)); } - return pm.getPeerId(std::make_shared(pb.build())); + return pm.getPeerId(pb.build()); }; // Add one peer. @@ -579,8 +579,8 @@ ProofBuilder pb(0, 0, CKey::MakeCompressedKey()); COutPoint o(txid1, 3); BOOST_CHECK(pb.addUTXO(o, v, height, false, key)); - PeerId peerid = pm.getPeerId(std::make_shared( - TestProofBuilder::buildDuplicatedStakes(pb))); + PeerId peerid = + pm.getPeerId(TestProofBuilder::buildDuplicatedStakes(pb)); BOOST_CHECK_EQUAL(peerid, NO_PEER); } @@ -614,7 +614,7 @@ const auto makeProof = [&](const COutPoint &outpoint, const int h) { ProofBuilder pb(0, 0, CKey::MakeCompressedKey()); BOOST_CHECK(pb.addUTXO(outpoint, v, h, false, key)); - return std::make_shared(pb.build()); + return pb.build(); }; auto proof1 = makeProof(outpoint1, height); @@ -816,7 +816,7 @@ pb.addUTXO(conflictingOutpoint, amount, height, is_coinbase, key)); BOOST_CHECK( pb.addUTXO(outpointToSend, amount, height, is_coinbase, key)); - proofToInvalidate = std::make_shared(pb.build()); + proofToInvalidate = pb.build(); } BOOST_CHECK(pm.registerProof(proofToInvalidate)); @@ -827,7 +827,7 @@ BOOST_CHECK( pb.addUTXO(conflictingOutpoint, amount, height, is_coinbase, key)); BOOST_CHECK(pb.addUTXO(addCoin(), amount, height, is_coinbase, key)); - conflictingProof = std::make_shared(pb.build()); + conflictingProof = pb.build(); } BOOST_CHECK(!pm.registerProof(conflictingProof)); 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 @@ -126,7 +126,7 @@ BOOST_CHECK(pb.addUTXO(COutPoint(coinbase.GetId(), 0), coinbase.vout[0].nValue, current_coinbase + 1, true, coinbaseKey)); - return std::make_shared(pb.build()); + return pb.build(); } bool addNode(NodeId nodeid, const ProofId &proofid) { diff --git a/src/avalanche/test/proof_tests.cpp b/src/avalanche/test/proof_tests.cpp --- a/src/avalanche/test/proof_tests.cpp +++ b/src/avalanche/test/proof_tests.cpp @@ -54,14 +54,14 @@ InsecureRand32(), InsecureRandBool(), key)); } - Proof p = pb.build(); + ProofRef p = pb.build(); ProofValidationState state; - BOOST_CHECK(p.verify(state)); + BOOST_CHECK(p->verify(state)); - BOOST_CHECK_EQUAL(p.getSequence(), sequence); - BOOST_CHECK_EQUAL(p.getExpirationTime(), expiration); - BOOST_CHECK(p.getMaster() == master); + BOOST_CHECK_EQUAL(p->getSequence(), sequence); + BOOST_CHECK_EQUAL(p->getExpirationTime(), expiration); + BOOST_CHECK(p->getMaster() == master); BOOST_CHECK(state.GetResult() == ProofValidationResult::NONE); } @@ -916,11 +916,11 @@ // Generate a proof that match the UTXO. ProofBuilder pb(0, 0, key); BOOST_CHECK(pb.addUTXO(o, v, h, is_coinbase, k)); - Proof p = pb.build(); + ProofRef p = pb.build(); ProofValidationState state; - BOOST_CHECK(p.verify(state)); - BOOST_CHECK(p.verify(state, coins) == + BOOST_CHECK(p->verify(state)); + BOOST_CHECK(p->verify(state, coins) == (result == ProofValidationResult::NONE)); BOOST_CHECK(state.GetResult() == result); }; @@ -965,10 +965,10 @@ // No stake { - Proof p = ProofBuilder(0, 0, key).build(); + ProofRef p = ProofBuilder(0, 0, key).build(); ProofValidationState state; - BOOST_CHECK(!p.verify(state, coins)); + BOOST_CHECK(!p->verify(state, coins)); BOOST_CHECK(state.GetResult() == ProofValidationResult::NO_STAKE); } @@ -977,10 +977,10 @@ ProofBuilder pb(0, 0, key); BOOST_CHECK( pb.addUTXO(pkh_outpoint, Amount::zero(), height, false, key)); - Proof p = pb.build(); + ProofRef p = pb.build(); ProofValidationState state; - BOOST_CHECK(!p.verify(state, coins)); + BOOST_CHECK(!p->verify(state, coins)); BOOST_CHECK(state.GetResult() == ProofValidationResult::DUST_THRESOLD); } @@ -988,10 +988,10 @@ ProofBuilder pb(0, 0, key); BOOST_CHECK(pb.addUTXO(pkh_outpoint, PROOF_DUST_THRESHOLD - 1 * SATOSHI, height, false, key)); - Proof p = pb.build(); + ProofRef p = pb.build(); ProofValidationState state; - BOOST_CHECK(!p.verify(state, coins)); + BOOST_CHECK(!p->verify(state, coins)); BOOST_CHECK(state.GetResult() == ProofValidationResult::DUST_THRESOLD); } @@ -999,10 +999,10 @@ { ProofBuilder pb(0, 0, key); BOOST_CHECK(pb.addUTXO(pkh_outpoint, value, height, false, key)); - Proof p = TestProofBuilder::buildDuplicatedStakes(pb); + ProofRef p = TestProofBuilder::buildDuplicatedStakes(pb); ProofValidationState state; - BOOST_CHECK(!p.verify(state, coins)); + BOOST_CHECK(!p->verify(state, coins)); BOOST_CHECK(state.GetResult() == ProofValidationResult::DUPLICATE_STAKE); } @@ -1017,10 +1017,10 @@ ProofBuilder pb(0, 0, key); BOOST_CHECK(pb.addUTXO(pkh_outpoint, value, height, false, key)); BOOST_CHECK(pb.addUTXO(other_pkh_outpoint, value, height, false, key)); - Proof p = TestProofBuilder::buildWithReversedOrderStakes(pb); + ProofRef p = TestProofBuilder::buildWithReversedOrderStakes(pb); ProofValidationState state; - BOOST_CHECK(!p.verify(state, coins)); + BOOST_CHECK(!p->verify(state, coins)); BOOST_CHECK(state.GetResult() == ProofValidationResult::WRONG_STAKE_ORDERING); } @@ -1045,9 +1045,9 @@ for (const COutPoint &outpoint : outpoints) { BOOST_CHECK(pb.addUTXO(outpoint, value, height, false, key)); } - Proof p = pb.build(); + ProofRef p = pb.build(); - return p.getId(); + return p->getId(); }; const ProofId proofid = computeProofId(); diff --git a/src/avalanche/test/util.h b/src/avalanche/test/util.h --- a/src/avalanche/test/util.h +++ b/src/avalanche/test/util.h @@ -22,9 +22,9 @@ struct TestProofBuilder { static ProofId getReverseOrderProofId(ProofBuilder &pb); - static Proof buildWithReversedOrderStakes(ProofBuilder &pb); + static ProofRef buildWithReversedOrderStakes(ProofBuilder &pb); static ProofId getDuplicatedStakeProofId(ProofBuilder &pb); - static Proof buildDuplicatedStakes(ProofBuilder &pb); + static ProofRef buildDuplicatedStakes(ProofBuilder &pb); }; } // namespace avalanche diff --git a/src/avalanche/test/util.cpp b/src/avalanche/test/util.cpp --- a/src/avalanche/test/util.cpp +++ b/src/avalanche/test/util.cpp @@ -35,7 +35,7 @@ ProofBuilder pb(0, std::numeric_limits::max(), masterKey); BOOST_CHECK(pb.addUTXO(o, v, height, is_coinbase, std::move(key))); - return std::make_shared(pb.build()); + return pb.build(); } bool hasDustStake(const ProofRef &proof) { @@ -64,7 +64,7 @@ return ProofId(ss2.GetHash()); } -Proof TestProofBuilder::buildWithReversedOrderStakes(ProofBuilder &pb) { +ProofRef TestProofBuilder::buildWithReversedOrderStakes(ProofBuilder &pb) { const ProofId proofid = TestProofBuilder::getReverseOrderProofId(pb); const StakeCommitment commitment(proofid); @@ -78,8 +78,9 @@ signedStakes.push_back(handle.value().sign(commitment)); } - return Proof(pb.sequence, pb.expirationTime, pb.masterKey.GetPubKey(), - std::move(signedStakes), pb.payoutScriptPubKey, SchnorrSig()); + return std::make_shared( + pb.sequence, pb.expirationTime, pb.masterKey.GetPubKey(), + std::move(signedStakes), pb.payoutScriptPubKey, SchnorrSig()); } ProofId TestProofBuilder::getDuplicatedStakeProofId(ProofBuilder &pb) { @@ -100,7 +101,7 @@ return ProofId(ss2.GetHash()); } -Proof TestProofBuilder::buildDuplicatedStakes(ProofBuilder &pb) { +ProofRef TestProofBuilder::buildDuplicatedStakes(ProofBuilder &pb) { const ProofId proofid = TestProofBuilder::getDuplicatedStakeProofId(pb); const StakeCommitment commitment(proofid); @@ -114,8 +115,9 @@ signedStakes.push_back(signedStake); } - return Proof(pb.sequence, pb.expirationTime, pb.masterKey.GetPubKey(), - std::move(signedStakes), pb.payoutScriptPubKey, SchnorrSig()); + return std::make_shared( + pb.sequence, pb.expirationTime, pb.masterKey.GetPubKey(), + std::move(signedStakes), pb.payoutScriptPubKey, SchnorrSig()); } } // namespace avalanche diff --git a/src/rpc/avalanche.cpp b/src/rpc/avalanche.cpp --- a/src/rpc/avalanche.cpp +++ b/src/rpc/avalanche.cpp @@ -312,10 +312,10 @@ } } - const avalanche::Proof proof = pb.build(); + const avalanche::ProofRef proof = pb.build(); CDataStream ss(SER_NETWORK, PROTOCOL_VERSION); - ss << proof; + ss << *proof; return HexStr(ss); }