From 0e08faad30b488d7675aab2f4b59c49a310bbddb Mon Sep 17 00:00:00 2001 From: Davide Grilli Date: Fri, 14 Nov 2025 15:06:09 +0100 Subject: [PATCH] feat(validation): allow min difficulty blocks after testnet inactivity Add logic to skip proof-of-work check for testnet when there's been 20 minutes of inactivity, allowing min difficulty blocks to be mined. This helps maintain chain progress during periods of low testnet activity. --- src/validation.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/validation.cpp b/src/validation.cpp index 0ffb495..879ffe0 100644 --- a/src/validation.cpp +++ b/src/validation.cpp @@ -3437,7 +3437,16 @@ static bool ContextualCheckBlockHeader(const CBlockHeader& block, BlockValidatio // Check proof of work const Consensus::Params& consensusParams = params.GetConsensus(); - if (block.nBits != GetNextWorkRequired(pindexPrev, &block, consensusParams)) + + // For testnet, allow min difficulty blocks after 20 minutes of inactivity + bool skipPowCheck = false; + if (params.NetworkIDString() == "test" && consensusParams.fPowAllowMinDifficultyBlocks) { + if (pindexPrev && block.GetBlockTime() > pindexPrev->GetBlockTime() + consensusParams.nPowTargetSpacing * 2) { + skipPowCheck = true; // Allow min difficulty after 20 min inactivity + } + } + + if (!skipPowCheck && block.nBits != GetNextWorkRequired(pindexPrev, &block, consensusParams)) return state.Invalid(BlockValidationResult::BLOCK_INVALID_HEADER, "bad-diffbits", "incorrect proof of work"); // Check against checkpoints