From 99740bab9c38837ab575fdc00343afa68d62ab68 Mon Sep 17 00:00:00 2001 From: Pieter Wuille Date: Tue, 24 Sep 2013 14:11:17 +0200 Subject: [PATCH] Skip unspendable outputs in consistency check --- src/core.h | 14 +++++++++----- src/main.cpp | 1 + 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/core.h b/src/core.h index a8828324f..ce21acd59 100644 --- a/src/core.h +++ b/src/core.h @@ -390,11 +390,7 @@ public: // construct a CCoins from a CTransaction, at a given height CCoins(const CTransaction &tx, int nHeightIn) : fCoinBase(tx.IsCoinBase()), vout(tx.vout), nHeight(nHeightIn), nVersion(tx.nVersion) { - BOOST_FOREACH(CTxOut &txout, vout) { - if (txout.scriptPubKey.IsUnspendable()) - txout.SetNull(); - } - Cleanup(); + ClearUnspendable(); } // empty constructor @@ -408,6 +404,14 @@ public: std::vector().swap(vout); } + void ClearUnspendable() { + BOOST_FOREACH(CTxOut &txout, vout) { + if (txout.scriptPubKey.IsUnspendable()) + txout.SetNull(); + } + Cleanup(); + } + void swap(CCoins &to) { std::swap(to.fCoinBase, fCoinBase); to.vout.swap(vout); diff --git a/src/main.cpp b/src/main.cpp index 5ee2deffc..f44a58d59 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1781,6 +1781,7 @@ bool DisconnectBlock(CBlock& block, CValidationState& state, CBlockIndex* pindex view.SetCoins(hash, CCoins()); } CCoins &outs = view.GetCoins(hash); + outs.ClearUnspendable(); CCoins outsBlock = CCoins(tx, pindex->nHeight); // The CCoins serialization does not serialize negative numbers.