@@ -250,26 +250,27 @@ bool ContextualCheckZerocoinSpendNoSerialCheck(const CTransaction& tx, const lib
250250 return true ;
251251}
252252
253- Optional<CoinSpendValues> ParseAndValidateZerocoinSpend (const Consensus::Params& consensus,
253+ Optional<CoinSpendValues> ParseAndValidateZerocoinSpends (const Consensus::Params& consensus,
254254 const CTransaction& tx, int chainHeight,
255255 CValidationState& state)
256256{
257+ CoinSpendValues spends;
257258 for (const CTxIn& txIn : tx.vin ) {
258259 bool isPublicSpend = txIn.IsZerocoinPublicSpend ();
259260 bool isPrivZerocoinSpend = txIn.IsZerocoinSpend ();
260261 if (!isPrivZerocoinSpend && !isPublicSpend)
261262 continue ;
262263
263264 // Check enforcement
264- if (!CheckPublicCoinSpendEnforced (chainHeight, isPublicSpend)){
265+ if (!CheckPublicCoinSpendEnforced (chainHeight, isPublicSpend)) {
265266 return nullopt ;
266267 }
267268
268269 if (isPublicSpend) {
269270 libzerocoin::ZerocoinParams* params = consensus.Zerocoin_Params (false );
270271 PublicCoinSpend publicSpend (params);
271272 if (!ZPIVModule::ParseZerocoinPublicSpend (txIn, tx, state, publicSpend) ||
272- !CheckPublicCoinSpendVersion (publicSpend.getCoinVersion ())){
273+ !CheckPublicCoinSpendVersion (publicSpend.getCoinVersion ())) {
273274 return nullopt ;
274275 }
275276 // queue for db write after the 'justcheck' section has concluded
@@ -278,8 +279,7 @@ Optional<CoinSpendValues> ParseAndValidateZerocoinSpend(const Consensus::Params&
278279 tx.GetHash ().GetHex ()), REJECT_INVALID);
279280 return nullopt ;
280281 }
281- // return value
282- return Optional<CoinSpendValues>(CoinSpendValues (publicSpend.getCoinSerialNumber (), publicSpend.getDenomination () * COIN));
282+ spends.emplace_back (publicSpend.getCoinSerialNumber (), publicSpend.getDenomination () * COIN);
283283 } else {
284284 libzerocoin::CoinSpend spend = TxInToZerocoinSpend (txIn);
285285 // queue for db write after the 'justcheck' section has concluded
@@ -288,8 +288,8 @@ Optional<CoinSpendValues> ParseAndValidateZerocoinSpend(const Consensus::Params&
288288 tx.GetHash ().GetHex ()), REJECT_INVALID);
289289 return nullopt ;
290290 }
291- return Optional<CoinSpendValues>( CoinSpendValues ( spend.getCoinSerialNumber (), spend.getDenomination () * COIN) );
291+ spends. emplace_back ( spend.getCoinSerialNumber (), spend.getDenomination () * COIN);
292292 }
293293 }
294- return nullopt ;
294+ return spends. empty () ? nullopt : Optional<CoinSpendValues>(spends) ;
295295}
0 commit comments