Детерминизм для блокчейна — не приятная опция, а свойство, позволяющее двум машинам, которые никогда не встречались, совпасть в результате. Плавающая точка тихо его ломает: округление, слитое умножение-сложение и флаги компилятора могут сдвинуть последний бит, а цепочка, расходящаяся в последнем бите, — это форк.
Поэтому суммы — беззнаковые 64-битные целые с девятью знаками, веса считаются в фиксированной точке Q32.32, а в наборе инструкций виртуальной машины нет ни одного опкода с плавающей точкой. Проверка на деплое отвергает его, если он как-то появится.
- Балансам не нужна длинная арифметика — u64 с девятью знаками достигает потолка представления около 1,8 × 10¹⁰ целых монет.
- Подсчёт использует фиксированную точку, поэтому калькулятор веса в браузере и валидатор в дата-центре считают одно число.
- Учёт исключает всё, на что могли бы повлиять часы или аллокатор.