Skip to content

Commit

Permalink
[Trivial] Single method ScriptSigToSerializedSpend
Browse files Browse the repository at this point in the history
used both in TxInToZerocoinSpend (for legacy zerocoin spends) and in
ZPIVModule::parseCoinSpend (for public spends).
  • Loading branch information
random-zebra committed Feb 7, 2020
1 parent 0eda5db commit 9e62d38
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 14 deletions.
21 changes: 13 additions & 8 deletions src/zpiv/zpivmodule.cpp
Expand Up @@ -126,6 +126,16 @@ const uint256 PublicCoinSpend::signatureHash() const

namespace ZPIVModule {

// Return stream of CoinSpend from tx input scriptsig
CDataStream ScriptSigToSerializedSpend(const CScript& scriptSig)
{
std::vector<char, zero_after_free_allocator<char> > data;
// skip opcode and data-len
uint8_t byteskip = ((uint8_t) scriptSig[1] + 2);
data.insert(data.end(), scriptSig.begin() + byteskip, scriptSig.end());
return CDataStream(data, SER_NETWORK, PROTOCOL_VERSION);
}

bool createInput(CTxIn &in, CZerocoinMint &mint, uint256 hashTxOut, const int spendVersion) {
// check that this spend is allowed
const bool fUseV1Params = mint.GetVersion() < libzerocoin::PrivateCoin::PUBKEY_VERSION;
Expand Down Expand Up @@ -171,15 +181,10 @@ namespace ZPIVModule {
return true;
}

PublicCoinSpend parseCoinSpend(const CTxIn &in) {
PublicCoinSpend parseCoinSpend(const CTxIn &in)
{
libzerocoin::ZerocoinParams *params = Params().Zerocoin_Params(false);
// skip opcode and data-len
uint8_t byteskip(in.scriptSig[1]);
byteskip += 2;
std::vector<char, zero_after_free_allocator<char> > data;
data.insert(data.end(), in.scriptSig.begin() + byteskip, in.scriptSig.end());
CDataStream serializedCoinSpend(data, SER_NETWORK, PROTOCOL_VERSION);

CDataStream serializedCoinSpend = ScriptSigToSerializedSpend(in.scriptSig);
return PublicCoinSpend(params, serializedCoinSpend);
}

Expand Down
1 change: 1 addition & 0 deletions src/zpiv/zpivmodule.h
Expand Up @@ -81,6 +81,7 @@ class PublicCoinSpend : public libzerocoin::CoinSpend {
class CValidationState;

namespace ZPIVModule {
CDataStream ScriptSigToSerializedSpend(const CScript& scriptSig);
bool createInput(CTxIn &in, CZerocoinMint& mint, uint256 hashTxOut, const int spendVersion);
PublicCoinSpend parseCoinSpend(const CTxIn &in);
bool parseCoinSpend(const CTxIn &in, const CTransaction& tx, const CTxOut &prevOut, PublicCoinSpend& publicCoinSpend);
Expand Down
8 changes: 2 additions & 6 deletions src/zpivchain.cpp
Expand Up @@ -342,12 +342,8 @@ bool RemoveSerialFromDB(const CBigNum& bnSerial)

libzerocoin::CoinSpend TxInToZerocoinSpend(const CTxIn& txin)
{
// extract the CoinSpend from the txin
std::vector<char, zero_after_free_allocator<char> > dataTxIn;
dataTxIn.insert(dataTxIn.end(), txin.scriptSig.begin() + BIGNUM_SIZE, txin.scriptSig.end());
CDataStream serializedCoinSpend(dataTxIn, SER_NETWORK, PROTOCOL_VERSION);
libzerocoin::CoinSpend spend(serializedCoinSpend);
return spend;
CDataStream serializedCoinSpend = ZPIVModule::ScriptSigToSerializedSpend(txin.scriptSig);
return libzerocoin::CoinSpend(serializedCoinSpend);
}

bool TxOutToPublicCoin(const CTxOut& txout, libzerocoin::PublicCoin& pubCoin, CValidationState& state)
Expand Down

0 comments on commit 9e62d38

Please sign in to comment.