1717#include " zpiv/accumulatormap.h"
1818#include " zpiv/accumulators.h"
1919#include " wallet/wallet.h"
20+ #include " zpiv/zpivmodule.h"
2021#include " zpivchain.h"
2122
2223#include < stdint.h>
@@ -1446,14 +1447,31 @@ UniValue getserials(const UniValue& params, bool fHelp) {
14461447 }
14471448 // loop through each input
14481449 for (const CTxIn& txin : tx.vin ) {
1449- // TODO: Add public coin spend parse here..
1450- if (txin.IsZerocoinSpend ()) {
1451- libzerocoin::CoinSpend spend = TxInToZerocoinSpend (txin);
1452- std::string serial_str = spend.getCoinSerialNumber ().ToString (16 );
1450+ bool isPublicSpend = txin.IsZerocoinPublicSpend ();
1451+ if (txin.IsZerocoinSpend () || isPublicSpend) {
1452+ std::string serial_str;
1453+ int denom;
1454+ if (isPublicSpend) {
1455+ CTxOut prevOut;
1456+ CValidationState state;
1457+ if (!GetOutput (txin.prevout .hash , txin.prevout .n , state, prevOut)){
1458+ throw JSONRPCError (RPC_INTERNAL_ERROR, " public zerocoin spend prev output not found" );
1459+ }
1460+ libzerocoin::ZerocoinParams *params = Params ().Zerocoin_Params (false );
1461+ PublicCoinSpend publicSpend (params);
1462+ if (!ZPIVModule::parseCoinSpend (txin, tx, prevOut, publicSpend)) {
1463+ throw JSONRPCError (RPC_INTERNAL_ERROR, " public zerocoin spend parse failed" );
1464+ }
1465+ serial_str = publicSpend.getCoinSerialNumber ().ToString (16 );
1466+ denom = libzerocoin::ZerocoinDenominationToInt (publicSpend.getDenomination ());
1467+ } else {
1468+ libzerocoin::CoinSpend spend = TxInToZerocoinSpend (txin);
1469+ serial_str = spend.getCoinSerialNumber ().ToString (16 );
1470+ denom = libzerocoin::ZerocoinDenominationToInt (spend.getDenomination ());
1471+ }
14531472 if (!fVerbose ) {
14541473 serialsArr.push_back (serial_str);
14551474 } else {
1456- int denom = libzerocoin::ZerocoinDenominationToInt (spend.getDenomination ());
14571475 UniValue s (UniValue::VOBJ);
14581476 s.push_back (Pair (" serial" , serial_str));
14591477 s.push_back (Pair (" denom" , denom));
@@ -1464,7 +1482,6 @@ UniValue getserials(const UniValue& params, bool fHelp) {
14641482 s.push_back (Pair (" blocktime" , block.GetBlockTime ()));
14651483 serialsArr.push_back (s);
14661484 }
1467-
14681485 }
14691486
14701487 } // end for vin in tx
0 commit comments