Skip to content

Commit a9e9cdf

Browse files
committed
core: separate GetNextWorkRequired and its' underlying DAA
1 parent 603b86a commit a9e9cdf

File tree

2 files changed

+19
-18
lines changed

2 files changed

+19
-18
lines changed

src/pow.cpp

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -17,58 +17,58 @@
1717

1818
#include <algorithm>
1919

20+
2021
const CBlockIndex* GetLastBlockIndex(const CBlockIndex* pindex)
2122
{
2223
while (pindex && pindex->pprev)
2324
pindex = pindex->pprev;
2425
return pindex;
2526
}
2627

27-
unsigned int GetNextWorkRequired(const INDEX_TYPE pindexLast, const BLOCK_TYPE block, const Consensus::Params& params)
28-
{
28+
unsigned int GetNextWorkRequired(const INDEX_TYPE pindexLast, const BLOCK_TYPE block, const Consensus::Params& params) {
2929
assert(pindexLast != nullptr);
30+
3031
if (pindexLast->nHeight + 1 <= params.nUpdateDiffAlgoHeight)
3132
return UintToArith256(params.powLimit).GetCompact(); // genesis block and first x (nUpdateDiffAlgoHeight) blocks use the default difficulty
3233

34+
return DigiShield(pindexLast, params.nPowAveragingWindow, params.AveragingWindowTimespan(), params.MinActualTimespan(), params.MaxActualTimespan(), params);
35+
}
36+
37+
unsigned int DigiShield(const CBlockIndex* pindexLast, const int64_t AveragingWindow, const int64_t AveragingWindowTimespan, const int64_t MinActualTimespan, const int64_t MaxActualTimespan, const Consensus::Params& params)
38+
{
3339
// Find the first block in the averaging interval
3440
const CBlockIndex* pindexFirst = pindexLast;
3541
arith_uint256 bnTot{0};
36-
for (int i = 0; pindexFirst && i < params.nPowAveragingWindow; i++) {
42+
43+
for (int i = 0; pindexFirst && i < AveragingWindow; i++) {
3744
arith_uint256 bnTmp;
3845
bnTmp.SetCompact(pindexFirst->nBits);
3946
bnTot += bnTmp;
4047
pindexFirst = pindexFirst->pprev;
4148
}
42-
arith_uint256 bnAvg{bnTot / params.nPowAveragingWindow};
49+
50+
arith_uint256 bnAvg { bnTot / AveragingWindow };
4351

4452
// Use medians to prevent time-warp attacks
4553
int64_t nLastBlockTime = pindexLast->GetMedianTimePast();
4654
int64_t nFirstBlockTime = pindexFirst->GetMedianTimePast();
4755
int64_t nActualTimespan = nLastBlockTime - nFirstBlockTime;
48-
LogPrint("pow", " nActualTimespan = %d before dampening\n", nActualTimespan);
49-
nActualTimespan = params.AveragingWindowTimespan() + (nActualTimespan - params.AveragingWindowTimespan()) / 4;
50-
LogPrint("pow", " nActualTimespan = %d before bounds\n", nActualTimespan);
56+
nActualTimespan = AveragingWindowTimespan + (nActualTimespan - AveragingWindowTimespan) / 4;
5157

52-
if (nActualTimespan < params.MinActualTimespan())
53-
nActualTimespan = params.MinActualTimespan();
54-
if (nActualTimespan > params.MaxActualTimespan())
55-
nActualTimespan = params.MaxActualTimespan();
58+
if (nActualTimespan < MinActualTimespan)
59+
nActualTimespan = MinActualTimespan;
60+
if (nActualTimespan > MaxActualTimespan)
61+
nActualTimespan = MaxActualTimespan;
5662

5763
// Retarget
5864
const arith_uint256 bnPowLimit = UintToArith256(params.powLimit);
5965
arith_uint256 bnNew{bnAvg};
60-
bnNew /= params.AveragingWindowTimespan();
66+
bnNew /= AveragingWindowTimespan;
6167
bnNew *= nActualTimespan;
6268

6369
if (bnNew > bnPowLimit)
6470
bnNew = bnPowLimit;
6571

66-
/// debug print
67-
LogPrint("pow", "GetNextWorkRequired RETARGET\n");
68-
LogPrint("pow", "params.AveragingWindowTimespan() = %d nActualTimespan = %d\n", params.AveragingWindowTimespan(), nActualTimespan);
69-
LogPrint("pow", "Current average: %08x %s\n", bnAvg.GetCompact(), bnAvg.ToString());
70-
LogPrint("pow", "After: %08x %s\n", bnNew.GetCompact(), bnNew.ToString());
71-
7272
return bnNew.GetCompact();
7373
}
7474

src/pow.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ bool CheckForkIsTrue(const CBlockIndex* pindexLast, bool fTableFlip = false);
4343

4444
unsigned int LegacyRetargetBlock(const CBlockIndex* pindexLast, const CBlockHeader* pblock, const Consensus::Params&);
4545
unsigned int GetNextWorkRequired(const INDEX_TYPE pindexLast, const BLOCK_TYPE block, const Consensus::Params&);
46+
unsigned int DigiShield(const CBlockIndex* pindexLast, const int64_t AveragingWindow, const int64_t AveragingWindowTimespan, const int64_t MinActualTimespan, const int64_t MaxActualTimespan, const Consensus::Params& params);
4647

4748
/** Check whether a block hash satisfies the proof-of-work requirement specified by nBits */
4849
bool CheckProofOfWork(uint256 hash, unsigned int nBits, const Consensus::Params&);

0 commit comments

Comments
 (0)