Пост
Поделитесь своими знаниями.
📦 Углубленный анализ модуля `sui: :package`: публикация и обновление пакетов в Move
В условиях стремительного развития технологии блокчейн язык программированияMoveотличается своей безопасностью**,гибкостиипроверяемости. Одна из его основных сильных сторон — усовершенствованное управление пакетами смарт-контрактов**.
В этой статье подробно рассматривается sui::package
модуль — движок публикации, обновления и обслуживания пакетов Move в блокчейне Sui.
🔍 Обзор модуля
sui::package
является краеугольным камнем экосистемы Move. Она предоставляет разработчикам надежные инструменты и интерфейсы для безопасного и эффективно**управления пакетами.
📦 Декларирование и импорт
module sui::package;
use std::ascii::String;
use std::type_name;
use sui::types;
Это определяет модуль и включает основные стандартные библиотеки Move и встроенные модули SUI для сложной логики.
🧩 Базовые структуры и публичные интерфейсы
1. Publisher
Обрабатываетидентификатор издателяпакета.
Ключевые функции:
claim
claim_and_keep
burn_publisher
2. UpgradeCap
Управляетвозможностью обновленияпакета.
Ключевые поля:
package_id
version
policy
(политика обновления)
Ключевые функции:
upgrade_package
restrict
3. UpgradeTicket
Предоставляет разрешение наконкретное обновление.
Ключевые функции:
ticket_package
ticket_policy
ticket_digest
4. UpgradeReceipt
Выпущено после успешного обновления.
Ключевые функции:
receipt_cap
receipt_package
🚨 Константы ошибок
Помогает разработчикам четко выполнять отладку.
-ENotOneTimeWitness
: Одноразовый свидетель недействителен
-ETooPermissive
: Политика обновлений слишком мягкая
-EInvalidPackage
: Предоставленный пакет недействителен
🔒 Константы стратегии обновления
Контролирует, как пакеты могут развиваться:
-COMPATIBLE
: Обновления с обратной совместимостью
-ADDITIVE
: Добавляйте новые функции, но не меняйте и не удаляйте существующие
-DEP_ONLY
: Разрешены только изменения зависимостей
Эти константы обеспечиваютбезопасные и контролируемые обновления.
🧱 Определения структур
Publisher
-адрес пакета: уникально идентифицирует издателя -имя модуля: пространство имен модуля издателя
UpgradeCap
-идентификатор пакета: целевой пакет -версия: текущая версия -политика: применена политика обновлений
UpgradeTicket
-upgrade_cap_id: ссылка на управляющий UpgradeCap -package_id: целевой пакет -политика: использованная политика обновлений -дайджест: сводка байт-кода (вектор байтов)
UpgradeReceipt
-upgrade_cap_id: идентификатор контроллера -package_id: обновленный пакет
🧠 Определения основных функций
claim
fun claim(otw: &OneTimeWitness) -> Publisher;
Утверждает личность издателя, используя одноразового свидетеля (OTW). Обеспечивает уникальность и доверие.
claim_and_keep
fun claim_and_keep(otw: &OneTimeWitness) -> Publisher;
Аналогичноclaim
, но отправляет объект Publisher в учетную запись вызывающего абонента.
burn_publisher
fun burn_publisher(publisher: &mut Publisher);
Уничтожает личность издателя и все связанные с ним привилегии.
authorize_upgrade
fun authorize_upgrade(cap: &UpgradeCap, package_id: &PackageID, policy: u8, digest: &vector<u8>) -> UpgradeTicket {
assert!(cap.package_id == *package_id, EInvalidPackage);
assert!(cap.policy <= policy, ETooPermissive);
UpgradeTicket {
upgrade_cap_id: cap.id(),
package_id: *package_id,
policy: policy,
digest: digest.clone()
}
}
Подтверждает:
- Это
UpgradeCap
соответствуетpackage_id
- Политикане более разрешительная, чем разрешена
UpgradeTicket
Затем возвращает подписанное.
upgrade_package
fun upgrade_package(ticket: &UpgradeTicket, data: &vector<u8>) -> UpgradeReceipt {
// Upgrade logic
}
- Проверяет
UpgradeTicket
data
- Заменяет текущий код пакета новым bytecode () - Возвращает a в
UpgradeReceipt
качестве доказательства успешного обновления
restrict
fun restrict(cap: &mut UpgradeCap, policy: u8) {
assert!(cap.policy < policy, ETooPermissive);
cap.policy = policy;
}
Используется дляужесточения разрешений на обновление. Невозможно перейти на более разрешительную политику**.
🛡️ Функции безопасности и аудита
sui::package
разработан с учетом требований безопасности и аудиту**:
-Одноразовый свидетель (OTW): предотвращает выдачу себя за другое лицо при публикации -Константы политики обновлений: предотвращение несанкционированных или взломанных обновлений -Утверждения: встроенные средства защиты, предотвращающие неправильное использование или непредвиденную логику
🧪 Поддержка тестирования и моделирования
Модуль включает в себяфункции, предназначенные только для тестирования, предназначенные для сред разработки и тестирования:
TestOnly
-: Помечает логику, предназначенную только для тестирования
-publish
: Имитирует публикацию в тестах
-upgrade
: Имитирует обновление в тестах
✅ Резюме
sui::package
Модуль предоставляет разработчикам Moveмощную, структурированную и безопаснуюсистему, позволяющую:
- Публикация пакетов
- Авторизация и выполнение обновлений
- Управление возможностями и политиками обновлений
Это обеспечиваетдоверие, гибкостьиремонтопригодностьпри разработке смарт-контрактов на Sui.
Благодаря таким модулям
sui::package
язык Move продолжает демонстрировать свои преимущества вмодульном дизайне,архитектуре, ориентированной на безопасностьиэргономике разработчиков, прокладывая путь к масштабируемым и безопасным системам Web3.
- Sui
- Architecture
Sui is a Layer 1 protocol blockchain designed as the first internet-scale programmable blockchain platform.
Заработай свою долю из 1000 Sui
Зарабатывай очки репутации и получай награды за помощь в развитии сообщества Sui.

- ... SUIMeaning.Sui+22
- ... SUI0xduckmove+17
- ... SUIfomo on Sui+16
- ... SUIMoonBags+11
- ... SUIHaGiang+10
- ... SUI
- ... SUI
- Почему BCS требует точного порядка полей для десериализации, когда структуры Move содержат именованные поля?53
- «Ошибки проверки нескольких источников» в публикациях модуля Sui Move — автоматическое устранение ошибок43
- Сбой транзакции Sui: объекты, зарезервированные для другой транзакции25
- Как ограничения возможностей взаимодействуют с динамическими полями в гетерогенных коллекциях?05