Вернуться   Биткоин Форум > Разработка и Техническое Обсуждение
29 января 2011, 2:28:26 AM   # 1
 
 
Сообщения: 1652
Цитировать по имени
цитировать ответ
по умолчанию Re: 21million BTC составляет чуть более 51 бит точности ...

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


Всем кто хочет заработать Биткоины без вложений - рекомендую сайт http://bitcoin-zarabotat.ru
патчи ЛУКА-младший заставил меня задуматься о том, или не проходит двойной точности значений по JSON-RPC API когда-нибудь вызвать проблемы. Я убедил себя, что это не проблема:

Номера JSON являются двойной точностью значения с плавающей запятой 64-бит, которые имеют 53 бит точности.

21 миллион Bitcoins на самом деле 2,100,000,000,000,000 (2,1 квадриллионов) наименьшего возможного блока. Это чуть более 251 -- Вам нужно чуть более 51 бит для представления их.

Так что, если ваша библиотека JSON не глючит, вы никогда не должны впадать в ошибки округления преобразования в / из JSON, даже если вы отправляете 0,00000001 биткойны.
Гэвин Андресен сейчас офлайн Пожаловаться на Гэвин Андресен   Ответить с цитированием Мультицитирование сообщения от Gavin Andresen Быстрый ответ на сообщение Гэвин Андресен


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


29 января 2011, 7:27:13 AM   # 2
 
 
Сообщения: 2870
Цитировать по имени
цитировать ответ
по умолчанию Re: 21million BTC составляет чуть более 51 бит точности ...

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





Я наблюдал за ошибки поплавкового типа (0.9999999 и т.д.) от bitcoind выхода (при использовании bitcoind в качестве клиента RPC), хотя это было в очень старом релизе. Есть ли еще сделать это Bitcoin? (Я исправлен свою версию, чтобы использовать строки для всех чисел.)
theymos сейчас офлайн Пожаловаться на theymos   Ответить с цитированием Мультицитирование сообщения от theymos Быстрый ответ на сообщение theymos

29 января 2011, 8:11:14 AM   # 3
 
 
Сообщения: 1358
Цитировать по имени
цитировать ответ
по умолчанию Re: 21million BTC составляет чуть более 51 бит точности ...

Гэвин Андресен: Закон Мерфи гласит, что некоторые JSON LIBS находятся сломана. Используйте целые числа, не используйте с плавающей точкой.

МРБ сейчас офлайн Пожаловаться на МРБ   Ответить с цитированием Мультицитирование сообщения от MRB Быстрый ответ на сообщение MRB

29 января 2011, 12:05:36 PM   # 4
 
 
Сообщения: 826
Цитировать по имени
цитировать ответ
по умолчанию Re: 21million BTC составляет чуть более 51 бит точности ...

Закон Мерфи гласит, что некоторые JSON LIBS находятся сломана. Используйте целые числа, не используйте с плавающей точкой.
Если у вас есть достаточное количество бит чисел с плавающей запятой, вы можете представлять целые числа безопасно и точно. Но вы не можете сделать то же самое для десятичных дробей, из двоичного представления в пределах значения с плавающей точкой.

Так что, если вы представляете биткойны как bitdust (2,100,000,000,000,000), а не как монеты (21,000,000.00000000), он должен работать, если библиотека не очень нарушена (в этом случае это, вероятно, будет крайне сломана для целых тоже).

Но ... что, когда весь мир с помощью Bitcoin и точность получает распространяется за пределы 51 бит?
ribuck сейчас офлайн Пожаловаться на ribuck   Ответить с цитированием Мультицитирование сообщения от ribuck Быстрый ответ на сообщение ribuck

29 января 2011, 12:31:29 PM   # 5
 
 
Сообщения: 1526
Цитировать по имени
цитировать ответ
по умолчанию Re: 21million BTC составляет чуть более 51 бит точности ...

Я действительно не думаю, что когда-нибудь Bitcoins быть представлена ​​в виде поплавков для представления людей, за исключением.

В какой-то момент это вполне возможно, что мы хотим, чтобы переместить десятичную место вокруг. Если что-нибудь, что было бы хорошо, чтобы начать думать о том, как организовать это. Имея точку прописываются в API, может вызвать проблемы.
Майк Хирн сейчас офлайн Пожаловаться на Mike Хирн   Ответить с цитированием Мультицитирование сообщения от Mike Хирн Быстрый ответ на сообщение Mike Хирн

29 января 2011, 3:17:45 PM   # 6
 
 
Сообщения: 2282
Цитировать по имени
цитировать ответ
по умолчанию Re: 21million BTC составляет чуть более 51 бит точности ...

Но ... что, когда весь мир с помощью Bitcoin и точность получает распространяется за пределы 51 бит?
Как я понимаю, точность не может быть продлена без перезаписи всей системы и, начиная с новым генеза (который может быть копией старого "Последний блок" Я полагаю). В любом случае, 51 бит точности, как представляется, достаточно, даже для всего мира: Тональный Bitcoin основано на 1,0000 (65536 знаков) базовых величин, что дает максимум 7,750,54.00  (32000000000 десятичное) TBC-- достаточно для 4 TBC на человека, если каждый человек (маловероятно, что весь мир принимает Bitcoin так или иначе) имели такое же число (что само по себе маловероятно, тоже). Оттуда, Есть еще 16 бит точности остаются для деления на 1,0000 (65536 знаков) TBCᵇ штук. В худшем случае, каждый из этих TBCᵇ все равно должны быть достаточно малы для каких-либо значительных затрат, и более мелкие подразделения могут быть сделаны с отдельной микро-транзакций сети торговли 1000: 1 с ними.
Люк-младший сейчас офлайн Пожаловаться на Luke-Jr   Ответить с цитированием Мультицитирование сообщения от Luke-Jr Быстрый ответ на сообщение Luke-Jr

29 января 2011, 3:27:44 PM   # 7
 
 
Сообщения: 1652
Цитировать по имени
цитировать ответ
по умолчанию Re: 21million BTC составляет чуть более 51 бит точности ...

ribuck:

Точность / точность красно-сельдь, если вы не обрабатывать числа как строки, так как числа JSON-RPC ВСЕГДА число двойной точности с плавающей запятой (в соответствии с JavaScript / ECMAScript спецификации). Bitcoin может отправить номер, который выглядит как 2100000000000001, но код, который интерпретирует это число JSON-RPC преобразует его в неточный двойной точности с плавающей точкой эквивалента. И тогда код, который показывает, что число нужно будет решить, как закруглить и формат, что неточное число с плавающей запятой и отображать его пользователю.

Когда нам нужно больше, чем 51 бит точности (не хотели, чтобы быть фантастическая проблема есть!), То мы должны были бы отправить числа как строки, и имеют JavaScript (или любой другой) на другом конце кормить их в библиотека bignum типа для их обработки.
Гэвин Андресен сейчас офлайн Пожаловаться на Гэвин Андресен   Ответить с цитированием Мультицитирование сообщения от Gavin Andresen Быстрый ответ на сообщение Гэвин Андресен

29 января 2011, 3:31:36 PM   # 8
 
 
Сообщения: 2282
Цитировать по имени
цитировать ответ
по умолчанию Re: 21million BTC составляет чуть более 51 бит точности ...

Номера JSON-RPC ВСЕГДА число двойной точности с плавающей запятой (в соответствии с JavaScript / ECMAScript спецификации).
JSON не определено стандартом ECMAScript. Фактический стандарт JSON не определяет точность, или даже, что числа с плавающей точкой.
Люк-младший сейчас офлайн Пожаловаться на Luke-Jr   Ответить с цитированием Мультицитирование сообщения от Luke-Jr Быстрый ответ на сообщение Luke-Jr

29 января 2011, 6:21:41 PM   # 9
 
 
Сообщения: 826
Цитировать по имени
цитировать ответ
по умолчанию Re: 21million BTC составляет чуть более 51 бит точности ...

Bitcoin может отправить номер, который выглядит как 2100000000000001, но код, который интерпретирует это число JSON-RPC преобразует его в неточный двойной точности с плавающей точкой эквивалента. И тогда код, который показывает, что число нужно будет решить, как закруглить и формат, что неточное число с плавающей запятой и отображать его пользователю.

Gavin, моя точка зрения такова:

Целое число 2100000000000001 находится в пределах диапазона, который представлен именно в двойной точности с плавающей точкой. С другой стороны, число 2100000,000000001 не является (и не может быть) представлено именно в двойной точности с плавающей точкой (поскольку он имеет десятичную дробную часть, которая не может быть точно представить в двоичной кодировке, используемой для плавающей точки).

предел для точного целочисленного представления в двойной точности с плавающей запятой является 9.007.199.254.740.992, которая достаточна для удовлетворения потребностей Bitcoin в.

Может быть, вы поняли, что я говорил, что, и указывают на то, что мы на милость библиотек JSON, который не может правильно обрабатывать преобразование из целого в двойной точности.

Если библиотеки, что глючит, это довольно печально.
ribuck сейчас офлайн Пожаловаться на ribuck   Ответить с цитированием Мультицитирование сообщения от ribuck Быстрый ответ на сообщение ribuck

29 января 2011, 8:01:03 PM   # 10
 
 
Сообщения: 2282
Цитировать по имени
цитировать ответ
по умолчанию Re: 21million BTC составляет чуть более 51 бит точности ...

Целое число 2100000000000001 находится в пределах диапазона, который представлен именно в двойной точности с плавающей точкой. С другой стороны, число 2100000,000000001 не является (и не может быть) представлено именно в двойной точности с плавающей точкой (поскольку он имеет десятичную дробную часть, которая не может быть точно представить в двоичной кодировке, используемой для плавающей точки).

предел для точного целочисленного представления в двойной точности с плавающей запятой является 9.007.199.254.740.992, которая достаточна для удовлетворения потребностей Bitcoin в.
Но до тех пор, как мы работаем в базовых единицах, нет никаких оснований для использования с плавающей точкой, а не простой int64 ...
Люк-младший сейчас офлайн Пожаловаться на Luke-Jr   Ответить с цитированием Мультицитирование сообщения от Luke-Jr Быстрый ответ на сообщение Luke-Jr

29 января 2011, 8:36:17 PM   # 11
 
 
Сообщения: 826
Цитировать по имени
цитировать ответ
по умолчанию Re: 21million BTC составляет чуть более 51 бит точности ...

...нет никаких оснований для использования с плавающей точкой, а не простой int64 ...
JSON-RPC не поддерживает тип Integer. Так что с плавающей точкой или строка.
ribuck сейчас офлайн Пожаловаться на ribuck   Ответить с цитированием Мультицитирование сообщения от ribuck Быстрый ответ на сообщение ribuck

29 января 2011, 8:52:12 PM   # 12
 
 
Сообщения: 2282
Цитировать по имени
цитировать ответ
по умолчанию Re: 21million BTC составляет чуть более 51 бит точности ...

...нет никаких оснований для использования с плавающей точкой, а не простой int64 ...
JSON-RPC не поддерживает тип Integer. Так что с плавающей точкой или строка.
На самом деле, JSON-RPC не поддерживает целое, ни с плавающей точкой. Он поддерживает "номер", Который не является обязательно либо.
Люк-младший сейчас офлайн Пожаловаться на Luke-Jr   Ответить с цитированием Мультицитирование сообщения от Luke-Jr Быстрый ответ на сообщение Luke-Jr

29 января 2011, 9:12:22 PM   # 13
 
 
Сообщения: 1484
Цитировать по имени
цитировать ответ
по умолчанию Re: 21million BTC составляет чуть более 51 бит точности ...

На самом деле, JSON-RPC не поддерживает целое, ни с плавающей точкой. Он поддерживает "номер", Который не является обязательно либо.

Ненужные различие. Определение "номер" требуется поддержка десятичных чисел.

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

29 января 2011, 9:30:37 PM   # 14
 
 
Сообщения: 1652
Цитировать по имени
цитировать ответ
по умолчанию Re: 21million BTC составляет чуть более 51 бит точности ...

Это сказало, многие библиотеки умные - такие, как Янссон -- и будет оценивать число непосредственно в целое число.
Из Янссон документы:

"целые числа, чьи абсолютные значения слишком велики, чтобы быть представленными в типе Int приведут к ошибке переполнения"

Как я уже говорил в теме про возможно изменение кривой ECDSA Bitcoin использует, программисты любят решать "проблемы" что они знают, что они могут решить, и что они думают, что будет делать вещи немного лучше. Но, по моему скромному мнению, если вы не решить важную проблему изменить положение вещей, потому что вы думаете, что вы знаете, как это часто плохая идея.

Это идеальный пример: изменить RPC, чтобы выплюнуть 64-битные целые числа (или перейти на новый RPC, который выплевывает целые числа) и кто-нибудь с помощью Jansson на 32-разрядной платформе Int получит ошибку переполнения.

Я вроде как предложение tcatm, чтобы определить новые методы RPC, которые определяют базовый блок с помощью строки ... но потом я подумал о нем:

Мы могли бы использовать научные обозначения, так что 1 BTC будет 1e08 базовых величин; затем, если мы когда-нибудь нужно больше точности интерфейс JSON не изменит, вы можете просто указать 1e-03 в качестве значения ....
... но это именно то, что мы имеем сейчас. 1 BTC является 1e00, 1 базовый блок 1e-08, и если мы когда-нибудь нужно больше точности интерфейс JSON готов.
Гэвин Андресен сейчас офлайн Пожаловаться на Гэвин Андресен   Ответить с цитированием Мультицитирование сообщения от Gavin Andresen Быстрый ответ на сообщение Гэвин Андресен

29 января 2011, 11:52:51 PM   # 15
 
 
Сообщения: 2282
Цитировать по имени
цитировать ответ
по умолчанию Re: 21million BTC составляет чуть более 51 бит точности ...

Как я уже говорил в теме про возможно изменение кривой ECDSA Bitcoin использует, программисты любят решать "проблемы" что они знают, что они могут решить, и что они думают, что будет делать вещи немного лучше. Но, по моему скромному мнению, если вы не решить важную проблему изменить положение вещей, потому что вы думаете, что вы знаете, как это часто плохая идея.

Это идеальный пример: изменить RPC, чтобы выплюнуть 64-битные целые числа (или перейти на новый RPC, который выплевывает целые числа) и кто-нибудь с помощью Jansson на 32-разрядной платформе Int получит ошибку переполнения.
ИЛИ, кто использует Jansson бы просто использовать (не дробная) плавает. Как упоминалось ранее, типы с плавающей точкой могут представлять весь спектр базового Bitcoins тонкого, до тех пор пока они не представлены в виде десятичных чисел.
Я вроде как предложение tcatm, чтобы определить новые методы RPC, которые определяют базовый блок с помощью строки ... но потом я подумал о нем:

Мы могли бы использовать научные обозначения, так что 1 BTC будет 1e08 базовых величин; затем, если мы когда-нибудь нужно больше точности интерфейс JSON не изменит, вы можете просто указать 1e-03 в качестве значения ....
... но это именно то, что мы имеем сейчас. 1 BTC является 1e00, 1 базовый блок 1e-08, и если мы когда-нибудь нужно больше точности интерфейс JSON готов.
1E8 является совершенно законным номер JSON. 1 BTC не должно быть 1e00, его должен быть 1E8. И независимо от того, как оно написано (0.001 или 1e-03), остаются вопросы дробной с плавающей точкой.

Это хорошо работает с нейтральной отрасли: ./bitcoind -rpcversion = 1 sendtoaddress 1KczVqwopWXQdFLe5sNQbpCq7yGSmXx2oo 1E8
Люк-младший сейчас офлайн Пожаловаться на Luke-Jr   Ответить с цитированием Мультицитирование сообщения от Luke-Jr Быстрый ответ на сообщение Luke-Jr

30 января 2011, 12:06:40 AM   # 16
 
 
Сообщения: 1358
Цитировать по имени
цитировать ответ
по умолчанию Re: 21million BTC составляет чуть более 51 бит точности ...

ribuck делает правильную точку, почему двойной точности с плавающей точкой делает не Работа. Для того, чтобы сделать свой собственный пример, если точное значение 3000000.00000001 (около 3M) хранится в двойной точности с плавающей запятой, она будет храниться в виде примерно как 3000000.0000000098. Поэтому делать какие-либо математику на это число рисков усиления ошибки округления (например, расчета начисленных процентов и т.д.).

Чтобы процитировать пословицу от вложенного мира разработки: "если вы используете с плавающей точкой, вы, вероятно, еще не поняли проблему, которую вы пытаетесь решить",

Не следует использовать с плавающей точкой, когда-либо сохранить объемы BTC. Использование одного 64-разрядное целое число. Или два 32-разрядных целых чисел для представления десятичной и дробной части.

Не хранить без дробных значений с плавающей точкой либо. Это даже не более дружественная для разработки, чем при использовании целых чисел. И это опасный способ либо случайно забывают использовать двойную точность во всем мире, или чтобы побудить разработчик, получающих такое значение от API разделить на 100000000, чтобы получить десятичную точку в нужном месте, что приводит к неточным результатам.
МРБ сейчас офлайн Пожаловаться на МРБ   Ответить с цитированием Мультицитирование сообщения от MRB Быстрый ответ на сообщение MRB

30 января 2011, 12:09:57 AM   # 17
 
 
Сообщения: 1484
Цитировать по имени
цитировать ответ
по умолчанию Re: 21million BTC составляет чуть более 51 бит точности ...

Если бы я был переписать интерфейс JSON-RPC с нуля, я бы, вероятно, использовать строки для представления полной int64 Bitcoin значения, без каких-либо знаков после запятой.

Но идеальный враг хорошего.

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

30 января 2011, 10:06:48 AM   # 18
 
 
Сообщения: 826
Цитировать по имени
цитировать ответ
по умолчанию Re: 21million BTC составляет чуть более 51 бит точности ...

ribuck делает правильную точку, почему двойной точности с плавающей точкой делает не Работа. Для того, чтобы сделать свой собственный пример, если точное значение 3000000.00000001 (около 3M) хранится в двойной точности с плавающей запятой, она будет храниться в виде примерно как 3000000.0000000098. Поэтому делать какие-либо математику на это число рисков усиления ошибки округления (например, расчета начисленных процентов и т.д.).
Конечно, это правда, но это тривиально работал вокруг, храня его в двойной точности, как 300000000000001 и вставив десятичную при отображении номера.

Симпатичные цитаты, но внедренный мир истинных целых чисел для работы с; JSON-RPC не делает.
ribuck сейчас офлайн Пожаловаться на ribuck   Ответить с цитированием Мультицитирование сообщения от ribuck Быстрый ответ на сообщение ribuck

30 января 2011, 6:42:26 PM   # 19
 
 
Сообщения: 2282
Цитировать по имени
цитировать ответ
по умолчанию Re: 21million BTC составляет чуть более 51 бит точности ...

Наш текущий интерфейс работает просто отлично, и все это делает гору из кротовой норы. Я не вижу значение в изменении того, что используется в настоящее время.
Она не работает, просто отлично. Невозможно отправить значение с суб-цент точностью, и, следовательно, невозможно отправить практически любые TBC монеты. И только потому, что вы лично не заботятся о TBC это не повод, чтобы сделать жизнь более трудной для тех, кто это делает. Это ничем не отличается, чем разработчики Windows, которые пытаются предотвратить порт Linux (или Mac) их программного обеспечения с открытым исходным кодом, просто указав "она отлично работает для нас на ОС Windows" как предлог, чтобы не сливаться патчи, которые делают его работу на обеих платформах. Bitcoin сообщество растет, и не каждый будет иметь те же идеалы, или даже основные причины быть частью сообщества; не заставляйте узкое подмножество интересов на все остальное, чьи интересы могут и не совпадать с вашим.
Люк-младший сейчас офлайн Пожаловаться на Luke-Jr   Ответить с цитированием Мультицитирование сообщения от Luke-Jr Быстрый ответ на сообщение Luke-Jr

30 января 2011, 6:43:34 PM   # 20
 
 
Сообщения: 1484
Цитировать по имени
цитировать ответ
по умолчанию Re: 21million BTC составляет чуть более 51 бит точности ...

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



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

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

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

3HmAQ9FkRFk6HZGuwExYxL62y7C1B9MwPW