PIVX Core  5.6.99
P2P Digital Currency
zpivmodule.h
Go to the documentation of this file.
1 // Copyright (c) 2019-2021 The PIVX Core developers
2 // Distributed under the MIT software license, see the accompanying
3 // file COPYING or http://www.opensource.org/licenses/mit-license.php.
4 //
5 #ifndef PIVX_ZPIV_ZPIVMODULE_H
6 #define PIVX_ZPIV_ZPIVMODULE_H
7 
8 #include "libzerocoin/bignum.h"
10 #include "libzerocoin/CoinSpend.h"
11 #include "libzerocoin/Coin.h"
13 #include "libzerocoin/SpendType.h"
14 #include "primitives/transaction.h"
15 #include "script/script.h"
16 #include "serialize.h"
17 #include "uint256.h"
18 #include <streams.h>
19 #include <utilstrencodings.h>
20 #include "chainparams.h"
21 
22 static int const PUBSPEND_SCHNORR = 4;
23 
25 public:
26 
27  explicit PublicCoinSpend(libzerocoin::ZerocoinParams* params): pubCoin(params) {};
28  template <typename Stream> PublicCoinSpend(libzerocoin::ZerocoinParams* params, Stream& strm);
29 
31 
32  const uint256 signatureHash() const override;
33  bool HasValidSignature() const;
34  bool Verify() const;
35  int getCoinVersion() const { return this->coinVersion; }
36 
37  // Members
41  // prev out values
43  unsigned int outputIndex = -1;
45 
47  READWRITE(obj.version);
48  if (obj.version < PUBSPEND_SCHNORR) {
49  READWRITE(obj.coinSerialNumber, obj.randomness, obj.pubkey, obj.vchSig);
50  } else {
51  READWRITE(obj.coinVersion);
52  if (obj.coinVersion < libzerocoin::PUBKEY_VERSION) {
53  READWRITE(obj.coinSerialNumber);
54  } else {
55  READWRITE(obj.pubkey, obj.vchSig);
56  }
57  READWRITE(obj.schnorrSig);
58  }
59  }
60 };
61 
62 
63 class CValidationState;
64 
65 namespace ZPIVModule {
68  bool parseCoinSpend(const CTxIn &in, const CTransaction& tx, const CTxOut &prevOut, PublicCoinSpend& publicCoinSpend);
70  bool validateInput(const CTxIn &in, const CTxOut &prevOut, const CTransaction& tx, PublicCoinSpend& ret);
71 
72  // Public zc spend parse
80  bool ParseZerocoinPublicSpend(const CTxIn &in, const CTransaction& tx, CValidationState& state, PublicCoinSpend& publicCoinSpend);
81 
82  // Clear the coinspend cache
83  void CleanCoinSpendsCache();
84 };
85 
86 
87 #endif // PIVX_ZPIV_ZPIVMODULE_H
PublicCoin class for the Zerocoin library.
CoinSpend class for the Zerocoin library.
C++ wrapper for BIGNUM.
Definition: bignum.h:35
Serialized script, used inside transaction inputs and outputs.
Definition: script.h:381
The basic transaction that is broadcasted on the network and contained in blocks.
Definition: transaction.h:244
An input of a transaction.
Definition: transaction.h:94
An output of a transaction.
Definition: transaction.h:137
Capture information about block/transaction validation.
Definition: validation.h:24
uint256 txHash
Definition: zpivmodule.h:42
SERIALIZE_METHODS(PublicCoinSpend, obj)
Definition: zpivmodule.h:46
CBigNum randomness
Definition: zpivmodule.h:39
const uint256 signatureHash() const override
Definition: zpivmodule.cpp:88
int getCoinVersion() const
Definition: zpivmodule.h:35
bool HasValidSignature() const
Definition: zpivmodule.cpp:72
PublicCoinSpend(libzerocoin::ZerocoinParams *params)
Definition: zpivmodule.h:27
libzerocoin::PublicCoin pubCoin
Definition: zpivmodule.h:44
bool Verify() const
Definition: zpivmodule.cpp:31
libzerocoin::CoinRandomnessSchnorrSignature schnorrSig
Definition: zpivmodule.h:40
unsigned int outputIndex
Definition: zpivmodule.h:43
A Schnorr Signature on the hash of metadata attesting that the signer knows the randomness v necessar...
The complete proof needed to spend a zerocoin.
Definition: CoinSpend.h:79
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
256-bit opaque blob.
Definition: uint256.h:138
bool validateInput(const CTxIn &in, const CTxOut &prevOut, const CTransaction &tx, PublicCoinSpend &publicSpend)
Definition: zpivmodule.cpp:200
libzerocoin::CoinSpend TxInToZerocoinSpend(const CTxIn &txin)
Definition: zpivmodule.cpp:191
void CleanCoinSpendsCache()
Definition: zpivmodule.cpp:226
bool ParseZerocoinPublicSpend(const CTxIn &txIn, const CTransaction &tx, CValidationState &state, PublicCoinSpend &publicSpend)
Definition: zpivmodule.cpp:212
PublicCoinSpend parseCoinSpend(const CTxIn &in)
Definition: zpivmodule.cpp:157
CDataStream ScriptSigToSerializedSpend(const CScript &scriptSig)
Definition: zpivmodule.cpp:148
#define READWRITE(...)
Definition: serialize.h:183