aboutsummaryrefslogtreecommitdiff
path: root/src/pow.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/pow.cpp')
-rw-r--r--src/pow.cpp23
1 files changed, 15 insertions, 8 deletions
diff --git a/src/pow.cpp b/src/pow.cpp
index d76928bda2..1d2b743b48 100644
--- a/src/pow.cpp
+++ b/src/pow.cpp
@@ -94,29 +94,36 @@ bool CheckProofOfWork(uint256 hash, unsigned int nBits)
}
//
-// minimum amount of work that could possibly be required nTime after
-// minimum work required was nBase
+// true if nBits is greater than the minimum amount of work that could
+// possibly be required deltaTime after minimum work required was nBase
//
-unsigned int ComputeMinWork(unsigned int nBase, int64_t nTime)
+bool CheckMinWork(unsigned int nBits, unsigned int nBase, int64_t deltaTime)
{
+ bool fOverflow = false;
+ uint256 bnNewBlock;
+ bnNewBlock.SetCompact(nBits, NULL, &fOverflow);
+ if (fOverflow)
+ return false;
+
const uint256 &bnLimit = Params().ProofOfWorkLimit();
// Testnet has min-difficulty blocks
// after Params().TargetSpacing()*2 time between blocks:
- if (Params().AllowMinDifficultyBlocks() && nTime > Params().TargetSpacing()*2)
- return bnLimit.GetCompact();
+ if (Params().AllowMinDifficultyBlocks() && deltaTime > Params().TargetSpacing()*2)
+ return bnNewBlock <= bnLimit;
uint256 bnResult;
bnResult.SetCompact(nBase);
- while (nTime > 0 && bnResult < bnLimit)
+ while (deltaTime > 0 && bnResult < bnLimit)
{
// Maximum 400% adjustment...
bnResult *= 4;
// ... in best-case exactly 4-times-normal target time
- nTime -= Params().TargetTimespan()*4;
+ deltaTime -= Params().TargetTimespan()*4;
}
if (bnResult > bnLimit)
bnResult = bnLimit;
- return bnResult.GetCompact();
+
+ return bnNewBlock <= bnResult;
}
void UpdateTime(CBlockHeader* pblock, const CBlockIndex* pindexPrev)