Как расширить состояние пакета Aptos с сохранением формата ресурса

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

Сохраните прежний ресурс и добавьте сопутствующий тип

Пусть Position с полем units уже опубликован. Оставьте поля неизменными и определите отдельный ресурс PositionLabel. Опубликуйте его по нужному адресу через уполномоченный signer. Существующие Position сохранят исходный формат.

struct Position has key { units: u64 }
struct PositionLabel has key { label: vector<u8> }

Учтите держателей без новых данных

У прежнего держателя может быть Position без PositionLabel. Проверяйте наличие метки и возвращайте предусмотренное значение по умолчанию. Перед релизом прочитайте запись пакета в code::PackageRegistry и проверьте политику обновления. Неизменяемый пакет не допускает такого дополнения путём обновления существующего пакета.

Источники