Browse Source

Bugfix: off-by-one error in coinbase maturity check

miguelfreitas
Pieter Wuille 12 years ago
parent
commit
56424040a4
  1. 8
      src/main.cpp

8
src/main.cpp

@ -1319,7 +1319,9 @@ bool CTransaction::CheckInputs(CCoinsViewCache &inputs, enum CheckSig_mode csmod
if (!HaveInputs(inputs)) if (!HaveInputs(inputs))
return error("CheckInputs() : %s inputs unavailable", GetHash().ToString().substr(0,10).c_str()); return error("CheckInputs() : %s inputs unavailable", GetHash().ToString().substr(0,10).c_str());
CBlockIndex *pindexBlock = inputs.GetBestBlock(); // While checking, GetBestBlock() refers to the parent block.
// This is also true for mempool checks.
int nSpendHeight = inputs.GetBestBlock()->nHeight + 1;
int64 nValueIn = 0; int64 nValueIn = 0;
int64 nFees = 0; int64 nFees = 0;
for (unsigned int i = 0; i < vin.size(); i++) for (unsigned int i = 0; i < vin.size(); i++)
@ -1329,8 +1331,8 @@ bool CTransaction::CheckInputs(CCoinsViewCache &inputs, enum CheckSig_mode csmod
// If prev is coinbase, check that it's matured // If prev is coinbase, check that it's matured
if (coins.IsCoinBase()) { if (coins.IsCoinBase()) {
if (pindexBlock->nHeight - coins.nHeight < COINBASE_MATURITY) if (nSpendHeight - coins.nHeight < COINBASE_MATURITY)
return error("CheckInputs() : tried to spend coinbase at depth %d", pindexBlock->nHeight - coins.nHeight); return error("CheckInputs() : tried to spend coinbase at depth %d", nSpendHeight - coins.nHeight);
} }
// Check for negative or overflow input values // Check for negative or overflow input values

Loading…
Cancel
Save