diff options
author | Pieter Wuille <pieter.wuille@gmail.com> | 2013-09-25 04:41:02 -0700 |
---|---|---|
committer | Pieter Wuille <pieter.wuille@gmail.com> | 2013-09-25 04:41:02 -0700 |
commit | d14b86730b22db92df3c1cec89bc43d20a12a898 (patch) | |
tree | 5197cf4992f5709cd8b2f861d234e81ae19f8d9b /src | |
parent | fb8724ee6caa0e55bba9849d9a672b5467bcbc0f (diff) | |
parent | 99740bab9c38837ab575fdc00343afa68d62ab68 (diff) |
Merge pull request #3026 from sipa/checkunspend
Skip unspendable outputs in consistency check
Diffstat (limited to 'src')
-rw-r--r-- | src/core.h | 14 | ||||
-rw-r--r-- | src/main.cpp | 1 |
2 files changed, 10 insertions, 5 deletions
diff --git a/src/core.h b/src/core.h index a8828324fa..ce21acd59e 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<CTxOut>().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 5ee2deffc6..f44a58d597 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. |