Changeset View
Changeset View
Standalone View
Standalone View
src/avalanche/test/util.cpp
Show All 29 Lines | const bool is_coinbase = false; | ||||
LOCK(cs_main); | LOCK(cs_main); | ||||
CCoinsViewCache &coins = ::ChainstateActive().CoinsTip(); | CCoinsViewCache &coins = ::ChainstateActive().CoinsTip(); | ||||
coins.AddCoin(o, Coin(CTxOut(v, script), height, is_coinbase), false); | coins.AddCoin(o, Coin(CTxOut(v, script), height, is_coinbase), false); | ||||
} | } | ||||
ProofBuilder pb(0, std::numeric_limits<uint32_t>::max(), masterKey); | ProofBuilder pb(0, std::numeric_limits<uint32_t>::max(), masterKey); | ||||
BOOST_CHECK(pb.addUTXO(o, v, height, is_coinbase, std::move(key))); | BOOST_CHECK(pb.addUTXO(o, v, height, is_coinbase, std::move(key))); | ||||
return std::make_shared<Proof>(pb.build()); | return pb.build(); | ||||
} | } | ||||
bool hasDustStake(const ProofRef &proof) { | bool hasDustStake(const ProofRef &proof) { | ||||
for (const SignedStake &s : proof->getStakes()) { | for (const SignedStake &s : proof->getStakes()) { | ||||
if (s.getStake().getAmount() < PROOF_DUST_THRESHOLD) { | if (s.getStake().getAmount() < PROOF_DUST_THRESHOLD) { | ||||
return true; | return true; | ||||
} | } | ||||
} | } | ||||
Show All 12 Lines | ProofId TestProofBuilder::getReverseOrderProofId(ProofBuilder &pb) { | ||||
CHashWriter ss2(SER_GETHASH, 0); | CHashWriter ss2(SER_GETHASH, 0); | ||||
ss2 << ss.GetHash(); | ss2 << ss.GetHash(); | ||||
ss2 << pb.masterKey.GetPubKey(); | ss2 << pb.masterKey.GetPubKey(); | ||||
return ProofId(ss2.GetHash()); | return ProofId(ss2.GetHash()); | ||||
} | } | ||||
Proof TestProofBuilder::buildWithReversedOrderStakes(ProofBuilder &pb) { | ProofRef TestProofBuilder::buildWithReversedOrderStakes(ProofBuilder &pb) { | ||||
const ProofId proofid = TestProofBuilder::getReverseOrderProofId(pb); | const ProofId proofid = TestProofBuilder::getReverseOrderProofId(pb); | ||||
const StakeCommitment commitment(proofid); | const StakeCommitment commitment(proofid); | ||||
std::vector<SignedStake> signedStakes; | std::vector<SignedStake> signedStakes; | ||||
signedStakes.reserve(pb.stakes.size()); | signedStakes.reserve(pb.stakes.size()); | ||||
while (!pb.stakes.empty()) { | while (!pb.stakes.empty()) { | ||||
// We need a forward iterator, so pb.stakes.rbegin() is not an | // We need a forward iterator, so pb.stakes.rbegin() is not an | ||||
// option. | // option. | ||||
auto handle = pb.stakes.extract(std::prev(pb.stakes.end())); | auto handle = pb.stakes.extract(std::prev(pb.stakes.end())); | ||||
signedStakes.push_back(handle.value().sign(commitment)); | signedStakes.push_back(handle.value().sign(commitment)); | ||||
} | } | ||||
return Proof(pb.sequence, pb.expirationTime, pb.masterKey.GetPubKey(), | return std::make_shared<Proof>( | ||||
pb.sequence, pb.expirationTime, pb.masterKey.GetPubKey(), | |||||
std::move(signedStakes), pb.payoutScriptPubKey, SchnorrSig()); | std::move(signedStakes), pb.payoutScriptPubKey, SchnorrSig()); | ||||
} | } | ||||
ProofId TestProofBuilder::getDuplicatedStakeProofId(ProofBuilder &pb) { | ProofId TestProofBuilder::getDuplicatedStakeProofId(ProofBuilder &pb) { | ||||
CHashWriter ss(SER_GETHASH, 0); | CHashWriter ss(SER_GETHASH, 0); | ||||
ss << pb.sequence; | ss << pb.sequence; | ||||
ss << pb.expirationTime; | ss << pb.expirationTime; | ||||
WriteCompactSize(ss, 2 * pb.stakes.size()); | WriteCompactSize(ss, 2 * pb.stakes.size()); | ||||
for (auto &s : pb.stakes) { | for (auto &s : pb.stakes) { | ||||
ss << s.stake; | ss << s.stake; | ||||
ss << s.stake; | ss << s.stake; | ||||
} | } | ||||
CHashWriter ss2(SER_GETHASH, 0); | CHashWriter ss2(SER_GETHASH, 0); | ||||
ss2 << ss.GetHash(); | ss2 << ss.GetHash(); | ||||
ss2 << pb.masterKey.GetPubKey(); | ss2 << pb.masterKey.GetPubKey(); | ||||
return ProofId(ss2.GetHash()); | return ProofId(ss2.GetHash()); | ||||
} | } | ||||
Proof TestProofBuilder::buildDuplicatedStakes(ProofBuilder &pb) { | ProofRef TestProofBuilder::buildDuplicatedStakes(ProofBuilder &pb) { | ||||
const ProofId proofid = TestProofBuilder::getDuplicatedStakeProofId(pb); | const ProofId proofid = TestProofBuilder::getDuplicatedStakeProofId(pb); | ||||
const StakeCommitment commitment(proofid); | const StakeCommitment commitment(proofid); | ||||
std::vector<SignedStake> signedStakes; | std::vector<SignedStake> signedStakes; | ||||
signedStakes.reserve(2 * pb.stakes.size()); | signedStakes.reserve(2 * pb.stakes.size()); | ||||
while (!pb.stakes.empty()) { | while (!pb.stakes.empty()) { | ||||
auto handle = pb.stakes.extract(pb.stakes.begin()); | auto handle = pb.stakes.extract(pb.stakes.begin()); | ||||
SignedStake signedStake = handle.value().sign(commitment); | SignedStake signedStake = handle.value().sign(commitment); | ||||
signedStakes.push_back(signedStake); | signedStakes.push_back(signedStake); | ||||
signedStakes.push_back(signedStake); | signedStakes.push_back(signedStake); | ||||
} | } | ||||
return Proof(pb.sequence, pb.expirationTime, pb.masterKey.GetPubKey(), | return std::make_shared<Proof>( | ||||
pb.sequence, pb.expirationTime, pb.masterKey.GetPubKey(), | |||||
std::move(signedStakes), pb.payoutScriptPubKey, SchnorrSig()); | std::move(signedStakes), pb.payoutScriptPubKey, SchnorrSig()); | ||||
} | } | ||||
} // namespace avalanche | } // namespace avalanche |