Как обновить внутреннюю структуру Versioned в Sui
В обновлённом пакете может появиться тип V2, хотя объекты всё ещё содержат данные V1. Контейнер Versioned позволяет заменить содержимое при сохранении идентичности внешнего объекта.
Преобразуйте данные в одной транзакции
В модуле типов V1 и V2 получите изменяемую ссылку Versioned и проверьте, что текущая версия равна 1. Извлечение возвращает старое значение и полномочие на смену версии. Используйте его при сохранении преобразованных данных под большим номером.
let (old, change) = state.remove_value_for_upgrade<V1>();
let V1 { count } = old;
let next = V2 { count, paused: false };
state.upgrade(2, next, change);
Проверьте сохранность данных и повторный вызов
Если до миграции count равнялся 18, чтение V2 должно вернуть 18 и paused равным false. Полномочие привязано к контейнеру, а новая версия должна быть больше старой. При массовом обновлении учитывайте достигнутую версию объектов и обрабатывайте повторы без попытки прочесть V2 как V1.