Пост
Поделитесь своими знаниями.
Модули Move, отвечающие требованиям завтрашнего дня без нарушения совместимости
_Поскольку модули Move после публикации остаются неизменными, планирование обновлений является важной частью разработки. Я видел случаи, когда разработчики сохраняют «мастер-объект», указывающий на текущую логическую версию, но мне интересно, какие стратегии лучше всего работают на практике. _
- Move CLI
- Move
- Move Module
- Move Script
Ответы
1Чтобы ваши модули Move на Sui могли работать в будущем без нарушения совместимости, необходимо тщательно планировать обновления, поскольку опубликованные модули неизменны, но система обновления пакетов Sui позволяет выпускать новые версии, сохраняющие совместимость, добавляя или улучшая функциональность. Одна из лучших стратегий — использование шаблона «мастер-объект», при котором центральный объект (например, объект Version или Config) хранит текущую логическую версию и указатели на активные модули, что позволяет перенаправлять вызовы на обновленную логику без изменения существующих интерфейсов. Вы можете определить этот объект в исходном модуле с помощью поля версии и функции обновления, например public fun update_version (config: &mut Config, new_package: address), гарантируя, что его могут вызывать только уполномоченные лица (например, с помощью UpgradeCap). Это обеспечивает стабильность публичного API вашего приложения, поэтому пользователи и другие контракты не будут расторгнуты при публикации нового пакета с обновленной логикой. Другой подход заключается в разработке модулей с модульными аддитивными изменениями: сохраняйте подписи публичных функций и структуры данных без изменений в новых версиях, добавляйте только новые функции или поля и используйте проверки совместимости (sui upgrade --verify-compatibility) для выявления проблем перед развертыванием. Для общих объектов используйте теги версий и логику миграции, чтобы без проблем обрабатывать обновления данных, например перенос балансов в новые структуры. На практике паттерн мастер-объектов отлично подходит для сложных приложений, таких как протоколы DeFi, как это было в таких проектах, как Cetus, где он упрощает обмен логикой, не мешая пользователям. Остерегайтесь рисков безопасности: жестко ограничьте разрешения на обновление, в идеале используя мультиподпись или DAO, чтобы предотвратить вредоносные изменения, и тестируйте обновления в тестовой сети Sui, чтобы смоделировать реальные последствия. Старайтесь не слишком полагаться на общие объекты, так как они могут усложнить миграцию из-за требований консенсуса.
Знаете ответ?
Пожалуйста, войдите в систему и поделитесь им.
Move is an executable bytecode language used to implement custom transactions and smart contracts.
Заработай свою долю из 1000 Sui
Зарабатывай очки репутации и получай награды за помощь в развитии сообщества Sui.
