Как передать Cairo u256 без перестановки половин
Контракт Starknet принимает u256 в виде двух элементов поля. Проверка только маленького числа может скрыть ошибку порядка половин.
Проверьте значение за границей одной половины
Выделите младшие 128 бит и оставшиеся старшие 128 бит. Сначала запишите младшую часть. Обратное преобразование примера складывает low и high, умноженное на 2^128.
value = 2^128 + 42
low = 42
high = 1
calldata = [42, 1]
Если декодер считает первый элемент старшим, получится 42 умножить на 2^128 плюс один. Берите тесты с разными ненулевыми половинами и целочисленную арифметику полной разрядности.
Проверьте диапазон каждой части
Обе половины должны помещаться в u128, хотя по сети передаются как felt. Обычный анализатор элементов поля может принять большее значение, которое декодер u256 контракта отклонит. Проверьте обе части до отправки. starknet.io The Cairo Programming Language