Sui.

Пост

Поделитесь своими знаниями.

article banner.
Meaning.Sui.
Jul 08, 2025
Статья

📦 Углубленный анализ модуля `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
0
Поделиться
Комментарии
.