Например, предположим, что я хочу, чтобы отправить 0.00002 в "адрес",
Использование Джеффа Garzik в Python библиотеки я код что-то вроде этого:
котировка
x.sendtoaddress ("адрес", 0.00002)
Обратите внимание на то, что первую библиотеку, кажется, принимает только числа с плавающей точкой. Почему это? Почему мы используем поплавки для деликатных финансовых операций?
Приведенный выше код производит это:
котировка
Послать -> {"метод": "sendtoaddress", "Титулы": ["адрес", 2е-05], "Я бы": 1, "версия": "1,1"}
Теперь обратите внимание на Python поплавок был преобразован в эквивалентную экспоненциальную E нотацию, которая действует в формате JSON. Но она по-прежнему не меняет тот факт, что мы не говорим точности здесь, или мы? Может кто-нибудь объяснить, почему это безопасно? Например, есть ли какие-либо ситуации, когда Bitcoin или клиент JSON-RPC Python не получает фактическое количество монет из-за округления / плавающей ошибки преобразования точки? Это точная, почему обращаться с деньгами?
Кажется, стыдно даже имея это обсуждение, учитывая, что сам Satoshi было известно об этой проблеме, которая как раз (каламбур несколько предназначен), почему он использовал целые числа. Я понятия не имею, почему мы говорим о плавающей точкой, округление и усечение, когда эталонная реализация является внутренне совершенной. Это только мне кажется, что интерфейсы, чтобы поговорить с Bitcoin нет, если кто-то может мне объяснить, почему это безопасно. Wiki для правильных денег также упоминает, что требуется округление. Делается это правильное округление с помощью питона-bitcoinrpc? Эти вопросы не обсуждаются в любом месте. Wiki также продолжает говорить, что "Вы, или библиотека JSON вы используете, должны конвертировать суммы либо с фиксированной точкой десятичного представления (8 цифрами после десятичной точки) или в идеале 64-разрядное целое представление." Да, не шучу. Теперь любой образец кода на самом деле сделать это, или это в настоящее время невозможно с JSON типов с двойной точностью?
котировка
Защиту JSONtoAmount (значение):
вернуться длинным (круглое (значение * 1E8))
Защиту AmountToJSON (количество):
возвращение поплавок (количество / 1E8)
Контекст?вернуться длинным (круглое (значение * 1E8))
Защиту AmountToJSON (количество):
возвращение поплавок (количество / 1E8)
Если какие-либо из этих вопросов, кажется глупым, то я прошу прощения. Но люди всегда жалуются некомпетентными разработчиками и плохо защищенного программного обеспечения и Bitcoin даже не имеет надлежащую документацию для чего-то, как важно, как точное обращения денег. Который, достаточно справедливо, это все еще новый проект. Но я начинаю думать, что только основные разработчики имеют никакого понятия, как все это работает, и это очень трудно узнать, когда только надлежащая документация буквально проект 10000 линии + C ++.
Спасибо за прочтение.