Browse Source

Merge pull request #2791 from sipa/proveprune

Prune provably-unspendable outputs
0.10
Gavin Andresen 11 years ago
parent
commit
fb8724ee6c
  1. 8
      src/core.h
  2. 7
      src/script.h

8
src/core.h

@ -389,7 +389,13 @@ public:
int nVersion; int nVersion;
// 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) {
if (txout.scriptPubKey.IsUnspendable())
txout.SetNull();
}
Cleanup();
}
// empty constructor // empty constructor
CCoins() : fCoinBase(false), vout(0), nHeight(0), nVersion(0) { } CCoins() : fCoinBase(false), vout(0), nHeight(0), nVersion(0) { }

7
src/script.h

@ -553,6 +553,13 @@ public:
return true; return true;
} }
// Returns whether the script is guaranteed to fail at execution,
// regardless of the initial stack. This allows outputs to be pruned
// instantly when entering the UTXO set.
bool IsUnspendable() const
{
return (size() > 0 && *begin() == OP_RETURN);
}
void SetDestination(const CTxDestination& address); void SetDestination(const CTxDestination& address);
void SetMultisig(int nRequired, const std::vector<CPubKey>& keys); void SetMultisig(int nRequired, const std::vector<CPubKey>& keys);

Loading…
Cancel
Save