|
|
|
@ -1790,7 +1790,14 @@ bool ConnectBlock(const CBlock& block, CValidationState& state, CBlockIndex* pin
@@ -1790,7 +1790,14 @@ bool ConnectBlock(const CBlock& block, CValidationState& state, CBlockIndex* pin
|
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
bool fScriptChecks = (!fCheckpointsEnabled || pindex->nHeight >= Checkpoints::GetTotalBlocksEstimate(chainparams.Checkpoints())); |
|
|
|
|
bool fScriptChecks = true; |
|
|
|
|
if (fCheckpointsEnabled) { |
|
|
|
|
CBlockIndex *pindexLastCheckpoint = Checkpoints::GetLastCheckpoint(chainparams.Checkpoints()); |
|
|
|
|
if (pindexLastCheckpoint && pindexLastCheckpoint->GetAncestor(pindex->nHeight) == pindex) { |
|
|
|
|
// This block is an ancestor of a checkpoint: disable script checks
|
|
|
|
|
fScriptChecks = false; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Do not allow blocks that contain transactions which 'overwrite' older transactions,
|
|
|
|
|
// unless those are already completely spent.
|
|
|
|
@ -2734,13 +2741,8 @@ bool ContextualCheckBlockHeader(const CBlockHeader& block, CValidationState& sta
@@ -2734,13 +2741,8 @@ bool ContextualCheckBlockHeader(const CBlockHeader& block, CValidationState& sta
|
|
|
|
|
return state.Invalid(error("%s: block's timestamp is too early", __func__), |
|
|
|
|
REJECT_INVALID, "time-too-old"); |
|
|
|
|
|
|
|
|
|
if(fCheckpointsEnabled) |
|
|
|
|
if (fCheckpointsEnabled) |
|
|
|
|
{ |
|
|
|
|
// Check that the block chain matches the known block chain up to a checkpoint
|
|
|
|
|
if (!Checkpoints::CheckBlock(chainParams.Checkpoints(), nHeight, hash)) |
|
|
|
|
return state.DoS(100, error("%s: rejected by checkpoint lock-in at %d", __func__, nHeight), |
|
|
|
|
REJECT_CHECKPOINT, "checkpoint mismatch"); |
|
|
|
|
|
|
|
|
|
// Don't accept any forks from the main chain prior to last checkpoint
|
|
|
|
|
CBlockIndex* pcheckpoint = Checkpoints::GetLastCheckpoint(chainParams.Checkpoints()); |
|
|
|
|
if (pcheckpoint && nHeight < pcheckpoint->nHeight) |
|
|
|
|