Как передать 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