Как проверить обратимость 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