aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPieter Wuille <pieter.wuille@gmail.com>2013-09-24 14:11:17 +0200
committerPieter Wuille <sipa@ulyssis.org>2013-09-24 14:11:20 +0200
commit99740bab9c38837ab575fdc00343afa68d62ab68 (patch)
tree5197cf4992f5709cd8b2f861d234e81ae19f8d9b
parentfb8724ee6caa0e55bba9849d9a672b5467bcbc0f (diff)
downloadbitcoin-99740bab9c38837ab575fdc00343afa68d62ab68.tar.xz
Skip unspendable outputs in consistency check
-rw-r--r--src/core.h14
-rw-r--r--src/main.cpp1
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.