Как проверить обратимость StorePacking в Cairo
Упаковка нескольких полей в один слот сокращает число записей состояния. Ошибка раскладки может наложить поля друг на друга без видимого изменения внешних типов.
Выделите непересекающиеся диапазоны бит
Псевдокод упаковывает 16-битный счётчик и 32-битные флаги в более широкое целое. Расширьте операнды до сдвига. При счётчике 65535 и флагах 1 ожидается число 131071, из которого извлекается исходная пара.
packed = uint16(counter) | (uint32(flags) << 16)
counter = packed & 0xffff
flags = packed >> 16
Проверьте нули, максимум каждого поля и смешанные значения. Сравните unpack(pack(x)) с x и убедитесь, что вместимости типа хватает без усечения и редукции поля. Согласуйте оба преобразования в реализации StorePacking.
Считайте раскладку постоянным форматом
Изменение ширины или порядка полей меняет чтение ранее записанных слотов. Для обновления нужна миграция либо версия представления. Изменение одного ABI-сериализатора не исправит значения из старой раскладки. starknet.io The Cairo Programming Language