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.