PIVX Core  5.6.99
P2P Digital Currency
CoinSpend.h
Go to the documentation of this file.
1 
12 // Copyright (c) 2017-2021 The PIVX Core developers
13 
14 #ifndef PIVX_LIBZEROCOIN_COINSPEND_H
15 #define PIVX_LIBZEROCOIN_COINSPEND_H
16 
17 #include <streams.h>
18 #include <utilstrencodings.h>
19 #include "Coin.h"
20 #include "Commitment.h"
21 #include "Params.h"
22 #include "SpendType.h"
23 
24 #include "bignum.h"
25 #include "pubkey.h"
26 #include "serialize.h"
27 
28 namespace libzerocoin
29 {
30 // Legacy zPIV - Only for serialization
31 // Proof that a value inside a commitment C is accumulated in accumulator A
33 public:
36  READWRITE(obj.C_e, obj.C_u, obj.C_r, obj.st_1, obj.st_2, obj.st_3);
37  READWRITE(obj.t_1, obj.t_2, obj.t_3, obj.t_4, obj.s_alpha, obj.s_beta);
38  READWRITE(obj.s_zeta, obj.s_sigma, obj.s_eta, obj.s_epsilon);
39  READWRITE(obj.s_delta, obj.s_xi, obj.s_phi, obj.s_gamma, obj.s_psi);
40  }
41 private:
47 };
48 
49 // Legacy zPIV - Only for serialization
50 // Signature of knowledge attesting that the signer knows the values to
51 // open a commitment to a coin with given serial number
53 public:
55  SERIALIZE_METHODS(SerialNumberSignatureOfKnowledge, obj) { READWRITE(obj.s_notprime, obj.sprime, obj.hash); }
56 private:
58  std::vector<CBigNum> s_notprime;
59  std::vector<CBigNum> sprime;
60 };
61 
62 // Legacy zPIV - Only for serialization
63 // Proof that two commitments open to the same value (BROKEN)
65 public:
67  SERIALIZE_METHODS(CommitmentProofOfKnowledge, obj) { READWRITE(obj.S1,obj.S2, obj.S3, obj.challenge); }
68 private:
70 };
71 
72 
73 // Legacy zPIV - Only for serialization
78 class CoinSpend
79 {
80 public:
81 
82  CoinSpend() {};
83  explicit CoinSpend(CDataStream& strm) { strm >> *this; }
84  virtual ~CoinSpend(){};
85 
86  const CBigNum& getCoinSerialNumber() const { return this->coinSerialNumber; }
87  CoinDenomination getDenomination() const { return this->denomination; }
88  uint32_t getAccumulatorChecksum() const { return this->accChecksum; }
89  uint256 getTxOutHash() const { return ptxHash; }
92  uint8_t getVersion() const { return version; }
94  CPubKey getPubKey() const { return pubkey; }
95  SpendType getSpendType() const { return spendType; }
96  std::vector<unsigned char> getSignature() const { return vchSig; }
97 
98  static std::vector<unsigned char> ParseSerial(CDataStream& s);
99 
100  virtual const uint256 signatureHash() const;
101  bool HasValidSerial(ZerocoinParams* params) const;
102  bool HasValidSignature() const;
103  void setTxOutHash(uint256 txOutHash) { this->ptxHash = txOutHash; };
104  void setDenom(libzerocoin::CoinDenomination denom) { this->denomination = denom; }
105  void setPubKey(CPubKey pkey, bool fUpdateSerial = false);
106 
108  std::string ToString() const;
109 
111  {
112  READWRITE(obj.denomination, obj.ptxHash, obj.accChecksum, obj.accCommitmentToCoinValue);
113  READWRITE(obj.serialCommitmentToCoinValue, obj.coinSerialNumber, obj.accumulatorPoK);
114  READWRITE(obj.serialNumberSoK, obj.commitmentPoK);
115  try {
116  READWRITE(obj.version, obj.pubkey, obj.vchSig, obj.spendType);
117  } catch (...) {
118  SER_READ(obj, obj.version = 1);
119  }
120  }
121 
122 protected:
125  uint8_t version{0};
126  //As of version 2
128  std::vector<unsigned char> vchSig;
131 
132 private:
133  uint32_t accChecksum{0};
139 
140 };
141 
142 } /* namespace libzerocoin */
143 #endif // PIVX_LIBZEROCOIN_COINSPEND_H
PublicCoin class for the Zerocoin library.
Commitment and CommitmentProof classes for the Zerocoin library.
C++ wrapper for BIGNUM.
Definition: bignum.h:35
An encapsulated public key.
Definition: pubkey.h:44
SERIALIZE_METHODS(AccumulatorProofOfKnowledge, obj)
Definition: CoinSpend.h:35
The complete proof needed to spend a zerocoin.
Definition: CoinSpend.h:79
const CBigNum & getCoinSerialNumber() const
Definition: CoinSpend.h:86
CBigNum getSerialComm() const
Definition: CoinSpend.h:91
CoinDenomination getDenomination() const
Definition: CoinSpend.h:87
void setDenom(libzerocoin::CoinDenomination denom)
Definition: CoinSpend.h:104
void setTxOutHash(uint256 txOutHash)
Definition: CoinSpend.h:103
void setPubKey(CPubKey pkey, bool fUpdateSerial=false)
Definition: CoinSpend.cpp:85
virtual const uint256 signatureHash() const
Definition: CoinSpend.cpp:21
uint8_t getVersion() const
Definition: CoinSpend.h:92
uint256 getTxOutHash() const
Definition: CoinSpend.h:89
SerialNumberSignatureOfKnowledge serialNumberSoK
Definition: CoinSpend.h:137
bool HasValidSerial(ZerocoinParams *params) const
Definition: CoinSpend.cpp:40
CommitmentProofOfKnowledge commitmentPoK
Definition: CoinSpend.h:138
CPubKey getPubKey() const
Definition: CoinSpend.h:94
CBigNum accCommitmentToCoinValue
Definition: CoinSpend.h:134
CBigNum getAccCommitment() const
Definition: CoinSpend.h:90
SpendType getSpendType() const
Definition: CoinSpend.h:95
CBigNum CalculateValidSerial(ZerocoinParams *params)
Definition: CoinSpend.cpp:68
std::string ToString() const
Definition: CoinSpend.cpp:33
CoinSpend(CDataStream &strm)
Definition: CoinSpend.h:83
CoinDenomination denomination
Definition: CoinSpend.h:123
AccumulatorProofOfKnowledge accumulatorPoK
Definition: CoinSpend.h:136
int getCoinVersion() const
Definition: CoinSpend.h:93
virtual ~CoinSpend()
Definition: CoinSpend.h:84
SERIALIZE_METHODS(CoinSpend, obj)
Definition: CoinSpend.h:110
std::vector< unsigned char > getSignature() const
Definition: CoinSpend.h:96
std::vector< unsigned char > vchSig
Definition: CoinSpend.h:128
static std::vector< unsigned char > ParseSerial(CDataStream &s)
Definition: CoinSpend.cpp:75
uint32_t getAccumulatorChecksum() const
Definition: CoinSpend.h:88
bool HasValidSignature() const
Definition: CoinSpend.cpp:46
CBigNum serialCommitmentToCoinValue
Definition: CoinSpend.h:135
SERIALIZE_METHODS(CommitmentProofOfKnowledge, obj)
Definition: CoinSpend.h:67
SERIALIZE_METHODS(SerialNumberSignatureOfKnowledge, obj)
Definition: CoinSpend.h:55
256-bit opaque blob.
Definition: uint256.h:138
Parameter classes for Zerocoin.
int ExtractVersionFromSerial(const CBigNum &bnSerial)
Definition: Coin.cpp:61
#define SER_READ(obj, code)
Definition: serialize.h:185
#define READWRITE(...)
Definition: serialize.h:183
const uint256 UINT256_ZERO
constant uint256 instances
Definition: uint256.h:175