Browse Source

Merge pull request #3026 from sipa/checkunspend

Skip unspendable outputs in consistency check
0.10
Pieter Wuille 11 years ago
parent
commit
d14b86730b
  1. 14
      src/core.h
  2. 1
      src/main.cpp

14
src/core.h

@ -390,11 +390,7 @@ public:
// construct a CCoins from a CTransaction, at a given height // 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) { CCoins(const CTransaction &tx, int nHeightIn) : fCoinBase(tx.IsCoinBase()), vout(tx.vout), nHeight(nHeightIn), nVersion(tx.nVersion) {
BOOST_FOREACH(CTxOut &txout, vout) { ClearUnspendable();
if (txout.scriptPubKey.IsUnspendable())
txout.SetNull();
}
Cleanup();
} }
// empty constructor // empty constructor
@ -408,6 +404,14 @@ public:
std::vector<CTxOut>().swap(vout); std::vector<CTxOut>().swap(vout);
} }
void ClearUnspendable() {
BOOST_FOREACH(CTxOut &txout, vout) {
if (txout.scriptPubKey.IsUnspendable())
txout.SetNull();
}
Cleanup();
}
void swap(CCoins &to) { void swap(CCoins &to) {
std::swap(to.fCoinBase, fCoinBase); std::swap(to.fCoinBase, fCoinBase);
to.vout.swap(vout); to.vout.swap(vout);

1
src/main.cpp

@ -1781,6 +1781,7 @@ bool DisconnectBlock(CBlock& block, CValidationState& state, CBlockIndex* pindex
view.SetCoins(hash, CCoins()); view.SetCoins(hash, CCoins());
} }
CCoins &outs = view.GetCoins(hash); CCoins &outs = view.GetCoins(hash);
outs.ClearUnspendable();
CCoins outsBlock = CCoins(tx, pindex->nHeight); CCoins outsBlock = CCoins(tx, pindex->nHeight);
// The CCoins serialization does not serialize negative numbers. // The CCoins serialization does not serialize negative numbers.

Loading…
Cancel
Save