testnet: Add Testnet4 difficulty adjustment rules fix

This commit is contained in:
Fabian Jahr 2024-05-03 10:05:22 +09:00
parent 74a04f9e7a
commit 0100907ca1
No known key found for this signature in database
GPG key ID: F13D1E9D890798CD

View file

@ -61,7 +61,19 @@ unsigned int CalculateNextWorkRequired(const CBlockIndex* pindexLast, int64_t nF
// Retarget
const arith_uint256 bnPowLimit = UintToArith256(params.powLimit);
arith_uint256 bnNew;
bnNew.SetCompact(pindexLast->nBits);
// Special difficulty rule for Testnet4
if (params.enforce_BIP94) {
// Here we use the first block of the difficulty period. This way
// the real difficulty is always preserved in the first block as
// it is not allowed to use the min-difficulty exception.
int nHeightFirst = pindexLast->nHeight - (params.DifficultyAdjustmentInterval()-1);
const CBlockIndex* pindexFirst = pindexLast->GetAncestor(nHeightFirst);
bnNew.SetCompact(pindexFirst->nBits);
} else {
bnNew.SetCompact(pindexLast->nBits);
}
bnNew *= nActualTimespan;
bnNew /= params.nPowTargetTimespan;