1) http://blockexplorer.com/b/124677 -> Сложность ?: 157 416.401843 ("Биты": 1a6a93b3)
2) http://blockexplorer.com/q/getdifficulty -> 157426.20628986
Почему так?
hextarget = 0000 0000 0000 6A93 В300 00000000000000000000000000000000000000000000
maxtarget = 0000 0000 0000 0000 FFFF, 00000000000000000000000000000000000000000000
Если мы разделим их, результат будет +157416,4018436490, значение в информации блока.
Проблема заключается в getdifficulty функции:
Код:
двойная GetDifficulty ()
{
// Число с плавающей точкой, которая является кратной минимальной сложностью,
// минимальная сложность = 1,0.
если (pindexBest == NULL)
вернуться 1,0;
INT nShift = 256 - 32 - 31; // чтобы поместиться в UINT
двойная dMinimum = (CBigNum (). SetCompact (bnProofOfWorkLimit.GetCompact ()) >> nShift) .getuint ();
двойная dCurrently = (CBigNum (). SetCompact (pindexBest->Nbits) >> nShift) .getuint ();
вернуться dMinimum / dCurrently;
}
Так, bnProofOfWorkLimit >> nShift = 0x7FFF8000
в то время как Nbits >> nShift = 0x3549
возвращение будет 157426,20628986100, что мы наблюдаем на getdifficulty blockexplorer и в Bitcoin клиента.
С 24 "мантисса" биты hextarget только 15 используются, и проблема будет увеличиваться с большим трудом. В 2-х миллиардах будут получит от нуля дивизии.
К сожалению, если он был disscussed, я не нашел никаких упоминаний ...