fix fPowAllowMinDifficultyBlocks to work on the testnet
This commit is contained in:
parent
7930840005
commit
fe493bff9e
1 changed files with 8 additions and 19 deletions
19
src/pow.cpp
19
src/pow.cpp
|
@ -14,32 +14,21 @@
|
||||||
unsigned int GetNextWorkRequired(const CBlockIndex* pindexLast, const CBlockHeader *pblock, const Consensus::Params& params)
|
unsigned int GetNextWorkRequired(const CBlockIndex* pindexLast, const CBlockHeader *pblock, const Consensus::Params& params)
|
||||||
{
|
{
|
||||||
unsigned int nProofOfWorkLimit = UintToArith256(params.powLimit).GetCompact();
|
unsigned int nProofOfWorkLimit = UintToArith256(params.powLimit).GetCompact();
|
||||||
|
|
||||||
// Genesis block
|
// Genesis block
|
||||||
if (pindexLast == NULL)
|
if (pindexLast == NULL)
|
||||||
return nProofOfWorkLimit;
|
return nProofOfWorkLimit;
|
||||||
|
|
||||||
// Only change once per difficulty adjustment interval
|
|
||||||
if ((pindexLast->nHeight+1) % params.DifficultyAdjustmentInterval() != 0)
|
|
||||||
{
|
|
||||||
if (params.fPowAllowMinDifficultyBlocks)
|
if (params.fPowAllowMinDifficultyBlocks)
|
||||||
{
|
{
|
||||||
// Special difficulty rule for testnet:
|
// Special difficulty rule for testnet:
|
||||||
// If the new block's timestamp is more than 2* 10 minutes
|
// If the new block's timestamp is twice the target block time
|
||||||
// then allow mining of a min-difficulty block.
|
// then allow mining of a min-difficulty block.
|
||||||
if (pblock->GetBlockTime() > pindexLast->GetBlockTime() + params.nPowTargetSpacing*2)
|
// This is to prevent the testnet from gettig stuck when a large amount
|
||||||
|
// of hashrate drops off the network.
|
||||||
|
if (pblock->GetBlockTime() > pindexLast->GetBlockTime() + params.nPowTargetSpacing*2){
|
||||||
return nProofOfWorkLimit;
|
return nProofOfWorkLimit;
|
||||||
else
|
|
||||||
{
|
|
||||||
// Return the last non-special-min-difficulty-rules-block
|
|
||||||
const CBlockIndex* pindex = pindexLast;
|
|
||||||
while (pindex->pprev && pindex->nHeight % params.DifficultyAdjustmentInterval() != 0 && pindex->nBits == nProofOfWorkLimit)
|
|
||||||
pindex = pindex->pprev;
|
|
||||||
return pindex->nBits;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return pindexLast->nBits;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Go back the full period unless it's the first retarget after genesis.
|
// Go back the full period unless it's the first retarget after genesis.
|
||||||
int blockstogoback = params.DifficultyAdjustmentInterval()-1;
|
int blockstogoback = params.DifficultyAdjustmentInterval()-1;
|
||||||
|
|
Loading…
Reference in a new issue