15 assert(pindexLast !=
nullptr);
27 return nProofOfWorkLimit;
33 pindex = pindex->
pprev;
37 return pindexLast->
nBits;
52 return pindexLast->
nBits;
55 int64_t nActualTimespan = pindexLast->
GetBlockTime() - nFirstBlockTime;
77 bnNew *= nActualTimespan;
80 if (bnNew > bnPowLimit)
102 largest_difficulty_target.
SetCompact(old_nbits);
103 largest_difficulty_target *= largest_timespan;
106 if (largest_difficulty_target > pow_limit) {
107 largest_difficulty_target = pow_limit;
114 if (maximum_new_target < observed_new_target)
return false;
118 smallest_difficulty_target.
SetCompact(old_nbits);
119 smallest_difficulty_target *= smallest_timespan;
122 if (smallest_difficulty_target > pow_limit) {
123 smallest_difficulty_target = pow_limit;
130 if (minimum_new_target > observed_new_target)
return false;
131 }
else if (old_nbits != new_nbits) {
143 bnTarget.
SetCompact(nBits, &fNegative, &fOverflow);
bool PermittedDifficultyTransition(const Consensus::Params ¶ms, int64_t height, uint32_t old_nbits, uint32_t new_nbits)
Return false if the proof-of-work requirement specified by new_nbits at a given height is not possibl...
int64_t GetBlockTime() const
int64_t nPowTargetTimespan
CBlockIndex * pprev
pointer to the index of the predecessor of this block
bool fPowAllowMinDifficultyBlocks
unsigned int CalculateNextWorkRequired(const CBlockIndex *pindexLast, int64_t nFirstBlockTime, const Consensus::Params ¶ms)
uint32_t GetCompact(bool fNegative=false) const
arith_uint256 UintToArith256(const uint256 &a)
uint256 powLimit
Proof of work parameters.
unsigned int GetNextWorkRequired(const CBlockIndex *pindexLast, const CBlockHeader *pblock, const Consensus::Params ¶ms)
int64_t nPowTargetSpacing
Parameters that influence chain consensus.
bool CheckProofOfWork(uint256 hash, unsigned int nBits, const Consensus::Params ¶ms)
Check whether a block hash satisfies the proof-of-work requirement specified by nBits.
256-bit unsigned big integer.
int64_t DifficultyAdjustmentInterval() const
bool enforce_BIP94
Enfore BIP94 timewarp attack mitigation.
The block chain is a tree shaped structure starting with the genesis block at the root...
arith_uint256 & SetCompact(uint32_t nCompact, bool *pfNegative=nullptr, bool *pfOverflow=nullptr)
The "compact" format is a representation of a whole number N using an unsigned 32bit number similar t...
int nHeight
height of the entry in the chain. The genesis block has height 0
CBlockIndex * GetAncestor(int height)
Efficiently find an ancestor of this block.