The implementation of GetBlockWork()
in the bitcoin v0.9.3 source (https://github.com/bitcoin/bitcoin/blob/v0.9.3/src/main.h#L815-L822) seems strange to me. The code is given below for convenience.
CBigNum GetBlockWork() const
{
CBigNum bnTarget;
bnTarget.SetCompact(nBits);
if (bnTarget <= 0)
return 0;
return (CBigNum(1)<<256) / (bnTarget+1);
}
- Why the +1 in the denominator?
- And shouldn't the numerator be the maximum possible 256 bit integer, instead of 2^256?
I would expect the implementation to be:
CBigNum GetBlockWork() const
{
CBigNum bnTarget;
bnTarget.SetCompact(nBits);
if (bnTarget <= 0)
return 0;
CBigNum bnMax;
bnMax.SetHex("0xFFFFFFFFFFFFFFFF"); // Max 256 bit int
return (bnMax / bnTarget);
}