Sui.

帖子

分享您的知识。

MoonBags.
Jul 20, 2025
讨论

可升级的 NFT 在 SUI 中是如何工作的

意味着一个人部署集合和铸币并将不同的 NFT 转移给用户. 现在,该人想为游戏或角色升级 NFT,但他将如何升级,因为 NFT 归用户所有,如果他们不将其作为可变引用传递,那就不可能发生. 那么这在 SUI 中是如何运作的?

  • Sui
2
3
分享
评论
.

答案

3
Meaning.Sui.
Jul 20 2025, 06:08

您的智能合约中需要一个函数,每个持有者都必须调用该函数来修改其 nft/对象. 本指南应该对你有所帮助 https://docs.shinami.com/docs/sui-high-level-gaming-guide

3
最佳答案
评论
.
0xduckmove.
Jul 23 2025, 03:40

您可以将 NFT 的可修改部分存储为 NFT 对象下的动态字段. 主要 NFT 对象仍归用户所有,但您(开发者或游戏逻辑)有能力或受控访问权限来更改可升级部分(统计数据、皮肤等).

module mygame::upgradable_nft {

    use sui::object::{Self, UID};
    use sui::tx_context::TxContext;
    use sui::dynamic_field::{Self, DynamicField};
    use sui::balance;

    // --- The base NFT object ---
    struct NFT has key {
        id: UID,
        name: String,
        level: u64,
    }

    // --- Admin capability to control upgrades ---
    struct UpgradeAuthority has key, store {
        id: UID,
    }

    /// Create an upgrade authority
    public fun init_authority(ctx: &mut TxContext): UpgradeAuthority {
        UpgradeAuthority { id: object::new(ctx) }
    }

    /// Mint an NFT to the user
    public fun mint_nft(
        name: String,
        recipient: address,
        ctx: &mut TxContext
    ): NFT {
        let nft = NFT {
            id: object::new(ctx),
            name,
            level: 1,
        };
        transfer::transfer(nft, recipient)
    }

    /// Upgrade NFT by mutable reference (only if caller has authority)
    public fun upgrade_nft(
        authority: &UpgradeAuthority,
        nft: &mut NFT
    ) {
        nft.level = nft.level + 1;
    }
}```

NFT 是一个标准对象. 当用户拥有它时,它不能被其他人改变. 
 • UpgradeAuthority 是游戏开发者或系统合同拥有的一项功能. 
 • 用户可以通过提供其 NFT 的可变引用(例如,在玩游戏关卡时)来选择加入,您的合约将在升级 NFT 之前验证权限. 


// Assume Alice owns an NFT and plays a game // She agrees to let the game system upgrade her NFT if she wins

entry fun user_plays_and_gets_upgrade( authority: &UpgradeAuthority, nft: &mut NFT, ctx: &mut TxContext ) { // Game logic... // If win: upgrade_nft(authority, nft); }

你不能改变你没有可变访问权限的对象. 
 • 所以要么:
 • 用户调用该函数并将 NFT 作为 &mut、OR 传递
 • 您使用内部 “统计对象” 设计 NFT,该对象归开发者所有并由主 NFT(通过对象 ID 或动态字段)指向,从而允许外部升级. 

2
评论
.
shamueely.
Jul 20 2025, 20:00

在Sui中,如果你想在铸造NFT并将其转移给用户之后使其可升级,你需要从设计阶段就为这种灵活性做好规划. 由于 Sui 强制执行严格的所有权并且只有所有者才能更改对象,因此除非用户将其发送回给您,或者与您的智能合约进行交互并通过可变引用授予许可,否则您无法直接升级用户的 NFT. 最常见和最有效的模式是使用由两部分组成的结构将NFT的核心身份与其可升级的数据分开:NFT对象本身(被转让和拥有)和NFT指向的辅助对象(例如元数据或统计对象). 这个辅助对象可以通过功能进行共享或控制,因此游戏逻辑或您的智能合约可以在不需要 NFT 的完全所有权的情况下对其进行更新. 您还可以使用功能实现访问控制——如果您的合同向用户颁发了权能,他们可以在不放弃 NFT 的情况下安全地授权升级. 战斗或升级等游戏内互动将调用同时采用 NFT 及其元数据的智能合约函数,从而确保只有经过批准的升级才会发生. 如果希望用户启动升级,则可以要求他们使用正确的可变引用调用您的函数. 否则,Sui 的模型会故意防止强制更改,这是一项安全功能. 因此,要在实践中启用可升级的 NFT,你要么使用你控制访问权限的外部元数据来构建它们,要么要求用户通过他们签署的交易选择升级.

阅读有关 Sui 中动态和可升级资产的更多信息

1
评论
.

你知道答案吗?

请登录并分享。

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

637帖子1665答案
Sui.X.Peera.

赚取你的 1000 Sui 份额

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

奖励活动八月