Sui.

帖子

分享您的知识。

article banner.
Meaning.Sui.
Jul 08, 2025
文章

📦 对 “sui:: package” 模块的深度分析:Move 中的软件包发布和升级

在区块链技术的快速发展中,Move编程语言以其安全性灵活性可审计性而脱颖而出.
它的核心优势之一是智能合约包的精细管理.

本文深入探讨了该sui::package模块——在 Sui 区块链上发布、升级和维护 Move 包背后的引擎.


🔍 模块概述

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,但会将发布者对象发送到调用者的帐户.


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-用新的字节码 () 替换当前的软件包代码 -返回 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
分享
评论
.

Sui is a Layer 1 protocol blockchain designed as the first internet-scale programmable blockchain platform.

394帖子554答案
Sui.X.Peera.

赚取你的 1000 Sui 份额

获取声誉积分,并因帮助 Sui 社区成长而获得奖励。

奖励活动七月