Как сохранить литералы Michelson при сериализации Micheline JSON

Обычный JSON-конвертер может округлить целое число из цепочки или добавить префикс к байтовому литералу. У Micheline для этих значений есть отдельные формы узлов.

Проверьте обратное преобразование на границе точности

Сериализуйте пару ниже и пропустите её через тот же код, который формирует вызовы контрактов. Десятичное число превышает безопасный целочисленный диапазон JavaScript. Сохраняйте его строковую запись на всём пути.

{"prim":"Pair","args":[{"int":"9007199254740993"},{"bytes":"00ff"}]}

В узле bytes четыре шестнадцатеричных знака обозначают два байта. Ведущий ноль значим. Преобразование в число потеряет первый байт и изменит параметр контракта.

Проверяйте тип отдельно от синтаксиса

Корректное дерево Micheline может иметь неподходящий тип Michelson или порядок полей для точки входа. После сериализации сверьте тип параметра контракта. Сохраняйте аннотации, если приложение использует их для поиска полей и точек входа. octez.tezos.com Octez protocol documentation