PIVX Core  5.6.99
P2P Digital Currency
Coin.h
Go to the documentation of this file.
1 
12 // Copyright (c) 2017-2021 The PIVX Core developers
13 
14 #ifndef PIVX_LIBZEROCOIN_COIN_H
15 #define PIVX_LIBZEROCOIN_COIN_H
16 
17 #include "Denominations.h"
18 #include "Params.h"
19 #include "amount.h"
20 #include "bignum.h"
21 #include "util/system.h"
22 #include "key.h"
23 
24 namespace libzerocoin
25 {
26  static int constexpr PUBKEY_VERSION = 2;
27  static int constexpr CURRENT_VERSION = 2;
28  static int constexpr V2_BITSHIFT = 4;
29 
30  class InvalidSerialException : public std::exception {
31  public:
32  std::string message;
33  explicit InvalidSerialException(const std::string &message) : message(message) {}
34  };
35 
36  int ExtractVersionFromSerial(const CBigNum& bnSerial);
37  bool IsValidSerial(const ZerocoinParams* params, const CBigNum& bnSerial);
38  bool IsValidCommitmentToCoinRange(const ZerocoinParams* params, const CBigNum& bnCommitment);
39  CBigNum GetAdjustedSerial(const CBigNum& bnSerial);
41 
49 {
50 public:
51  template <typename Stream>
52  PublicCoin(const ZerocoinParams* p, Stream& strm) : params(p)
53  {
54  strm >> *this;
55  }
56 
57  explicit PublicCoin(const ZerocoinParams* p);
58 
65  PublicCoin(const ZerocoinParams* p, const CBigNum& coin, const CoinDenomination d);
66  const CBigNum& getValue() const { return this->value; }
67 
68  CoinDenomination getDenomination() const { return this->denomination; }
69  bool operator==(const PublicCoin& rhs) const
70  {
71  return ((this->value == rhs.value) && (this->params == rhs.params) && (this->denomination == rhs.denomination));
72  }
73  bool operator!=(const PublicCoin& rhs) const { return !(*this == rhs); }
77  bool validate() const;
78 
79  SERIALIZE_METHODS(PublicCoin, obj) { READWRITE(obj.value, obj.denomination); }
80 
81 private:
85 };
86 
87 } /* namespace libzerocoin */
88 #endif // PIVX_LIBZEROCOIN_COIN_H
C++ wrapper for BIGNUM.
Definition: bignum.h:35
An encapsulated public key.
Definition: pubkey.h:44
InvalidSerialException(const std::string &message)
Definition: Coin.h:33
A Public coin is the part of a coin that is published to the network and what is handled by other cli...
Definition: Coin.h:49
CoinDenomination getDenomination() const
Definition: Coin.h:68
bool operator==(const PublicCoin &rhs) const
Definition: Coin.h:69
bool operator!=(const PublicCoin &rhs) const
Definition: Coin.h:73
const ZerocoinParams * params
Definition: Coin.h:82
bool validate() const
Checks that coin is prime and in the appropriate range given the parameters.
Definition: Coin.cpp:42
SERIALIZE_METHODS(PublicCoin, obj)
Definition: Coin.h:79
const CBigNum & getValue() const
Definition: Coin.h:66
PublicCoin(const ZerocoinParams *p, Stream &strm)
Definition: Coin.h:52
CoinDenomination denomination
Definition: Coin.h:84
Parameter classes for Zerocoin.
bool IsValidSerial(const ZerocoinParams *params, const CBigNum &bnSerial)
Definition: Coin.cpp:87
bool IsValidCommitmentToCoinRange(const ZerocoinParams *params, const CBigNum &bnCommitment)
Definition: Coin.cpp:102
CBigNum GetAdjustedSerial(const CBigNum &bnSerial)
Definition: Coin.cpp:78
int ExtractVersionFromSerial(const CBigNum &bnSerial)
Definition: Coin.cpp:61
CBigNum ExtractSerialFromPubKey(const CPubKey pubkey)
Definition: Coin.cpp:108
#define READWRITE(...)
Definition: serialize.h:183