Как посчитать элементы массива enum в calldata Cairo
Префикс массива Cairo считает логические элементы, хотя варианты enum могут занимать разное число felt. Если считать длину сырого хвоста, декодер захватит следующий аргумент.
Читайте варианты по ABI последовательно
В условном enum вариант без данных объявлен под индексом ноль, вариант с u256 имеет индекс один. Первый felt массива равен двум. Следующий выбирает None и не требует полезной нагрузки.
enum Choice { None, Amount: u256 }
[None, Amount(2^128)] → [2, 0, 1, 0, 1]
Далее селектор один. Прочитайте ещё два felt для Amount: младший ноль и старший один. На этом обработаны два элемента. Следующий аргумент функции начинается после пяти felt примера.
Возьмите порядок объявления из развёрнутого ABI
Индексы вариантов определяет порядок объявления. При добавлении или перестановке варианта неверная версия ABI может иначе трактовать входные данные. Явно отклоняйте неизвестные селекторы и усечённые значения. starknet.io The Cairo Programming Language