MCPcopy Create free account
hub / github.com/ElementsProject/elements / CalculateNextWorkRequired

Function CalculateNextWorkRequired

src/pow.cpp:49–72  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

47}
48
49unsigned int CalculateNextWorkRequired(const CBlockIndex* pindexLast, int64_t nFirstBlockTime, const Consensus::Params& params)
50{
51 if (params.fPowNoRetargeting)
52 return pindexLast->nBits;
53
54 // Limit adjustment step
55 int64_t nActualTimespan = pindexLast->GetBlockTime() - nFirstBlockTime;
56 if (nActualTimespan < params.nPowTargetTimespan/4)
57 nActualTimespan = params.nPowTargetTimespan/4;
58 if (nActualTimespan > params.nPowTargetTimespan*4)
59 nActualTimespan = params.nPowTargetTimespan*4;
60
61 // Retarget
62 const arith_uint256 bnPowLimit = UintToArith256(params.powLimit);
63 arith_uint256 bnNew;
64 bnNew.SetCompact(pindexLast->nBits);
65 bnNew *= nActualTimespan;
66 bnNew /= params.nPowTargetTimespan;
67
68 if (bnNew > bnPowLimit)
69 bnNew = bnPowLimit;
70
71 return bnNew.GetCompact();
72}
73
74bool CheckProofOfWork(uint256 hash, unsigned int nBits, const Consensus::Params& params)
75{

Callers 3

GetNextWorkRequiredFunction · 0.85
BOOST_AUTO_TEST_CASEFunction · 0.85
FUZZ_TARGET_INITFunction · 0.85

Calls 3

UintToArith256Function · 0.85
GetCompactMethod · 0.80
GetBlockTimeMethod · 0.45

Tested by 2

BOOST_AUTO_TEST_CASEFunction · 0.68
FUZZ_TARGET_INITFunction · 0.68