|
|
@ -3525,10 +3525,9 @@ bool ContextualCheckBlockHeader(const CBlockHeader& block, CValidationState& sta |
|
|
|
return true; |
|
|
|
return true; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
bool ContextualCheckBlock(const CBlock& block, CValidationState& state, const CBlockIndex* pindexPrev) |
|
|
|
bool ContextualCheckBlock(const CBlock& block, CValidationState& state, const Consensus::Params& consensusParams, const CBlockIndex* pindexPrev) |
|
|
|
{ |
|
|
|
{ |
|
|
|
const int nHeight = pindexPrev == NULL ? 0 : pindexPrev->nHeight + 1; |
|
|
|
const int nHeight = pindexPrev == NULL ? 0 : pindexPrev->nHeight + 1; |
|
|
|
const Consensus::Params& consensusParams = Params().GetConsensus(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Start enforcing BIP113 (Median Time Past) using versionbits logic.
|
|
|
|
// Start enforcing BIP113 (Median Time Past) using versionbits logic.
|
|
|
|
int nLockTimeFlags = 0; |
|
|
|
int nLockTimeFlags = 0; |
|
|
@ -3689,7 +3688,8 @@ static bool AcceptBlock(const CBlock& block, CValidationState& state, const CCha |
|
|
|
} |
|
|
|
} |
|
|
|
if (fNewBlock) *fNewBlock = true; |
|
|
|
if (fNewBlock) *fNewBlock = true; |
|
|
|
|
|
|
|
|
|
|
|
if ((!CheckBlock(block, state, chainparams.GetConsensus(), GetAdjustedTime())) || !ContextualCheckBlock(block, state, pindex->pprev)) { |
|
|
|
if (!CheckBlock(block, state, chainparams.GetConsensus(), GetAdjustedTime()) || |
|
|
|
|
|
|
|
!ContextualCheckBlock(block, state, chainparams.GetConsensus(), pindex->pprev)) { |
|
|
|
if (state.IsInvalid() && !state.CorruptionPossible()) { |
|
|
|
if (state.IsInvalid() && !state.CorruptionPossible()) { |
|
|
|
pindex->nStatus |= BLOCK_FAILED_VALID; |
|
|
|
pindex->nStatus |= BLOCK_FAILED_VALID; |
|
|
|
setDirtyBlockIndex.insert(pindex); |
|
|
|
setDirtyBlockIndex.insert(pindex); |
|
|
@ -3780,7 +3780,7 @@ bool TestBlockValidity(CValidationState& state, const CChainParams& chainparams, |
|
|
|
return error("%s: Consensus::ContextualCheckBlockHeader: %s", __func__, FormatStateMessage(state)); |
|
|
|
return error("%s: Consensus::ContextualCheckBlockHeader: %s", __func__, FormatStateMessage(state)); |
|
|
|
if (!CheckBlock(block, state, chainparams.GetConsensus(), fCheckPOW, fCheckMerkleRoot)) |
|
|
|
if (!CheckBlock(block, state, chainparams.GetConsensus(), fCheckPOW, fCheckMerkleRoot)) |
|
|
|
return error("%s: Consensus::CheckBlock: %s", __func__, FormatStateMessage(state)); |
|
|
|
return error("%s: Consensus::CheckBlock: %s", __func__, FormatStateMessage(state)); |
|
|
|
if (!ContextualCheckBlock(block, state, pindexPrev)) |
|
|
|
if (!ContextualCheckBlock(block, state, chainparams.GetConsensus(), pindexPrev)) |
|
|
|
return error("%s: Consensus::ContextualCheckBlock: %s", __func__, FormatStateMessage(state)); |
|
|
|
return error("%s: Consensus::ContextualCheckBlock: %s", __func__, FormatStateMessage(state)); |
|
|
|
if (!ConnectBlock(block, state, &indexDummy, viewNew, chainparams, true)) |
|
|
|
if (!ConnectBlock(block, state, &indexDummy, viewNew, chainparams, true)) |
|
|
|
return false; |
|
|
|
return false; |
|
|
|