Вернуться   Биткоин Форум > Разработка и Техническое Обсуждение
17 мая 2011, 8:29:48 PM   # 1
 
 
Сообщения: 4
Цитировать по имени
цитировать ответ
по умолчанию Re: усечение ошибка в GetDifficulty () - 157416.4 157426.2 против

Взлом Биткоин адресов.
500 Биткоинов взломаны в "мозговом кошельке" с паролем "bitcoin is awesome"
Адрес кошелька: 14NWDXkQwcGN1Pd9fboL8npVynD5SfyJAE
Приватный ключ: 5J64pq77XjeacCezwmAr2V1s7snvvJkuAz8sENxw7xCkikceV6e
подробнее...


Всем кто хочет заработать Биткоины без вложений - рекомендую сайт http://bitcoin-zarabotat.ru
Мне кажется, что функция GetDifficulty () в rpc.cpp есть проблема усечения, которая уже сейчас и наблюдатель может привести к дальнейшим проблемам, вплоть до деления на ноль.

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, я не нашел никаких упоминаний ...
OverQuantum сейчас офлайн Пожаловаться на OverQuantum   Ответить с цитированием Мультицитирование сообщения от OverQuantum Быстрый ответ на сообщение OverQuantum


Как заработать Биткоины?
Без вложений. Не майнинг.


18 мая 2011, 12:59:50 AM   # 2
 
 
Сообщения: 2870
Цитировать по имени
цитировать ответ
по умолчанию Re: усечение ошибка в GetDifficulty () - 157416.4 157426.2 против

Получил 1806 Биткоинов
Реальная история.





Я также слышал сообщения о том, что последняя версия дает немного разные номера сложности, чем старые версии. Это практически невозможно рассчитать "официальный" трудность. Я предпочел бы деление длинных чисел.
theymos сейчас офлайн Пожаловаться на theymos   Ответить с цитированием Мультицитирование сообщения от theymos Быстрый ответ на сообщение theymos

18 мая 2011, 6:39:53 PM   # 3
 
 
Сообщения: 4
Цитировать по имени
цитировать ответ
по умолчанию Re: усечение ошибка в GetDifficulty () - 157416.4 157426.2 против

Направлено в GitHub
https://github.com/bitcoin/bitcoin/issues/236
OverQuantum сейчас офлайн Пожаловаться на OverQuantum   Ответить с цитированием Мультицитирование сообщения от OverQuantum Быстрый ответ на сообщение OverQuantum



Как заработать Биткоины?

Bitcoin Wallet * Portefeuille Bitcoin * Monedero Bitcoin * Carteira Bitcoin * Portafoglio Bitcoin * Bitcoin Cüzdan * 比特币钱包

bitcoin-zarabotat.ru
Почта для связи: bitcoin-zarabotat.ru@yandex.ru

3HmAQ9FkRFk6HZGuwExYxL62y7C1B9MwPW