Bitcoin ABC  0.26.3
P2P Digital Currency
proofbuilder.cpp
Go to the documentation of this file.
1 // Copyright (c) 2020 The Bitcoin developers
2 // Distributed under the MIT software license, see the accompanying
3 // file COPYING or http://www.opensource.org/licenses/mit-license.php.
4 
6 
7 #include <random.h>
8 
9 namespace avalanche {
10 
11 bool ProofBuilder::addUTXO(COutPoint utxo, Amount amount, uint32_t height,
12  bool is_coinbase, CKey key) {
13  if (!key.IsValid()) {
14  return false;
15  }
16 
18  auto stake =
19  Stake(std::move(utxo), amount, height, is_coinbase, key.GetPubKey());
20  const uint256 h = stake.getHash(commitment);
22  if (!key.SignSchnorr(h, sig)) {
23  sig.fill(0);
24  }
25 
26  return stakes.emplace(std::move(stake), std::move(sig)).second;
27 }
28 
30  SchnorrSig proofSignature;
31  const LimitedProofId limitedProofId = getLimitedProofId();
32  if (!masterKey.SignSchnorr(limitedProofId, proofSignature)) {
33  proofSignature.fill(0);
34  }
35  std::vector<SignedStake> signedStakes;
36  signedStakes.reserve(stakes.size());
37 
38  while (!stakes.empty()) {
39  auto handle = stakes.extract(stakes.begin());
40  signedStakes.push_back(handle.value());
41  }
42 
44  std::move(signedStakes), payoutScriptPubKey,
45  std::move(proofSignature));
46 }
47 
49  HashWriter ss{};
50  ss << sequence;
51  ss << expirationTime;
52  ss << payoutScriptPubKey;
53 
54  WriteCompactSize(ss, stakes.size());
55  for (const auto &s : stakes) {
56  ss << s.getStake();
57  }
58 
59  return LimitedProofId(ss.GetHash());
60 }
61 
63  HashWriter ss{};
64  ss << getLimitedProofId();
65  ss << masterKey.GetPubKey();
66 
67  return ProofId(ss.GetHash());
68 }
69 
70 } // namespace avalanche
An encapsulated secp256k1 private key.
Definition: key.h:28
bool IsValid() const
Check whether this private key is valid.
Definition: key.h:94
CPubKey GetPubKey() const
Compute the public key from a private key.
Definition: key.cpp:210
bool SignSchnorr(const uint256 &hash, SchnorrSig &sig, uint32_t test_case=0) const
Create a Schnorr signature.
Definition: key.cpp:288
An outpoint - a combination of a transaction hash and an index n into its vout.
Definition: transaction.h:20
A writer stream (for serialization) that computes a 256-bit hash.
Definition: hash.h:99
static RCUPtr make(Args &&...args)
Construct a new object that is owned by the pointer.
Definition: rcu.h:112
bool addUTXO(COutPoint utxo, Amount amount, uint32_t height, bool is_coinbase, CKey key)
std::set< SignedStake, SignedStakeComparator > stakes
Definition: proofbuilder.h:28
ProofId getProofId() const
LimitedProofId getLimitedProofId() const
256-bit opaque blob.
Definition: uint256.h:129
std::array< uint8_t, CPubKey::SCHNORR_SIZE > SchnorrSig
a Schnorr signature
Definition: key.h:25
SchnorrSig sig
Definition: processor.cpp:488
void WriteCompactSize(CSizeComputer &os, uint64_t nSize)
Definition: serialize.h:1254
Definition: amount.h:19