|
|
|
@ -1364,6 +1364,7 @@ static DisconnectResult DisconnectBlock(const CBlock& block, const CBlockIndex*
@@ -1364,6 +1364,7 @@ static DisconnectResult DisconnectBlock(const CBlock& block, const CBlockIndex*
|
|
|
|
|
for (int i = block.vtx.size() - 1; i >= 0; i--) { |
|
|
|
|
const CTransaction &tx = *(block.vtx[i]); |
|
|
|
|
uint256 hash = tx.GetHash(); |
|
|
|
|
bool is_coinbase = tx.IsCoinBase(); |
|
|
|
|
|
|
|
|
|
// Check that all outputs are available and match the outputs in the block itself
|
|
|
|
|
// exactly.
|
|
|
|
@ -1372,7 +1373,7 @@ static DisconnectResult DisconnectBlock(const CBlock& block, const CBlockIndex*
@@ -1372,7 +1373,7 @@ static DisconnectResult DisconnectBlock(const CBlock& block, const CBlockIndex*
|
|
|
|
|
COutPoint out(hash, o); |
|
|
|
|
Coin coin; |
|
|
|
|
bool is_spent = view.SpendCoin(out, &coin); |
|
|
|
|
if (!is_spent || tx.vout[o] != coin.out) { |
|
|
|
|
if (!is_spent || tx.vout[o] != coin.out || pindex->nHeight != coin.nHeight || is_coinbase != coin.fCoinBase) { |
|
|
|
|
fClean = false; // transaction output mismatch
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|