Move {Get,Set}Compact from bignum to uint256

This commit is contained in:
Pieter Wuille
2014-04-20 03:19:20 +02:00
parent a7031507e6
commit df9eb5e14f
13 changed files with 243 additions and 199 deletions

View File

@@ -10,7 +10,6 @@
#include "bitcoin-config.h"
#endif
#include "bignum.h"
#include "chainparams.h"
#include "coins.h"
#include "core.h"
@@ -816,13 +815,19 @@ public:
return (int64_t)nTime;
}
CBigNum GetBlockWork() const
uint256 GetBlockWork() const
{
CBigNum bnTarget;
bnTarget.SetCompact(nBits);
if (bnTarget <= 0)
uint256 bnTarget;
bool fNegative;
bool fOverflow;
bnTarget.SetCompact(nBits, &fNegative, &fOverflow);
if (fNegative || fOverflow || bnTarget == 0)
return 0;
return (CBigNum(1)<<256) / (bnTarget+1);
// We need to compute 2**256 / (bnTarget+1), but we can't represent 2**256
// as it's too large for a uint256. However, as 2**256 is at least as large
// as bnTarget+1, it is equal to ((2**256 - bnTarget - 1) / (bnTarget+1)) + 1,
// or ~bnTarget / (nTarget+1) + 1.
return (~bnTarget / (bnTarget + 1)) + 1;
}
bool CheckIndex() const