|
|
@ -3187,7 +3187,7 @@ static bool AcceptBlock(const std::shared_ptr<const CBlock>& pblock, CValidation |
|
|
|
} |
|
|
|
} |
|
|
|
if (fNewBlock) *fNewBlock = true; |
|
|
|
if (fNewBlock) *fNewBlock = true; |
|
|
|
|
|
|
|
|
|
|
|
if (!CheckBlock(block, state, chainparams.GetConsensus(), GetAdjustedTime()) || |
|
|
|
if (!CheckBlock(block, state, chainparams.GetConsensus()) || |
|
|
|
!ContextualCheckBlock(block, state, chainparams.GetConsensus(), pindex->pprev)) { |
|
|
|
!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; |
|
|
@ -3229,13 +3229,19 @@ static bool AcceptBlock(const std::shared_ptr<const CBlock>& pblock, CValidation |
|
|
|
bool ProcessNewBlock(const CChainParams& chainparams, const std::shared_ptr<const CBlock> pblock, bool fForceProcessing, bool *fNewBlock) |
|
|
|
bool ProcessNewBlock(const CChainParams& chainparams, const std::shared_ptr<const CBlock> pblock, bool fForceProcessing, bool *fNewBlock) |
|
|
|
{ |
|
|
|
{ |
|
|
|
{ |
|
|
|
{ |
|
|
|
LOCK(cs_main); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Store to disk
|
|
|
|
|
|
|
|
CBlockIndex *pindex = NULL; |
|
|
|
CBlockIndex *pindex = NULL; |
|
|
|
if (fNewBlock) *fNewBlock = false; |
|
|
|
if (fNewBlock) *fNewBlock = false; |
|
|
|
CValidationState state; |
|
|
|
CValidationState state; |
|
|
|
bool ret = AcceptBlock(pblock, state, chainparams, &pindex, fForceProcessing, NULL, fNewBlock); |
|
|
|
// Ensure that CheckBlock() passes before calling AcceptBlock, as
|
|
|
|
|
|
|
|
// belt-and-suspenders.
|
|
|
|
|
|
|
|
bool ret = CheckBlock(*pblock, state, chainparams.GetConsensus()); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
LOCK(cs_main); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (ret) { |
|
|
|
|
|
|
|
// Store to disk
|
|
|
|
|
|
|
|
ret = AcceptBlock(pblock, state, chainparams, &pindex, fForceProcessing, NULL, fNewBlock); |
|
|
|
|
|
|
|
} |
|
|
|
CheckBlockIndex(chainparams.GetConsensus()); |
|
|
|
CheckBlockIndex(chainparams.GetConsensus()); |
|
|
|
if (!ret) { |
|
|
|
if (!ret) { |
|
|
|
GetMainSignals().BlockChecked(*pblock, state); |
|
|
|
GetMainSignals().BlockChecked(*pblock, state); |
|
|
|