Почему деление felt в Cairo может дать большое число

Вычисление трёх делить на два в цепочке может вернуть очень большой элемент поля. Деление felt в Cairo использует обратный элемент конечного поля.

Воспроизведите операцию в поле

Пусть P — простое число поля Starknet. Целое (P + 3) / 2 существует без остатка, поскольку P нечётно. После удвоения получается P + 3, что по модулю P равно трём. Поэтому это частное трёх и двух в поле.

3 / 2 as felt252 = (P + 3) / 2
2 × ((P + 3) / 2) mod P = 3

Если правило приложения требует одну единицу с остатком один, используйте подходящий беззнаковый целый тип и явные целочисленные операции. Числа с плавающей точкой в интерфейсе ненадёжно представляют большие значения.

Проверьте границы делителя и суммы

Добавьте случаи с остатком и нулевым делителем. Для комиссий или токенов задайте правило округления. Перед использованием felt как ограниченного целого может понадобиться проверяемое преобразование типа. starknet.io The Cairo Programming Language