帖子
分享您的知识。
可升级的 NFT 在 SUI 中是如何工作的
意味着一个人部署集合和铸币并将不同的 NFT 转移给用户. 现在,该人想为游戏或角色升级 NFT,但他将如何升级,因为 NFT 归用户所有,如果他们不将其作为可变引用传递,那就不可能发生. 那么这在 SUI 中是如何运作的?
- Sui
答案
3您的智能合约中需要一个函数,每个持有者都必须调用该函数来修改其 nft/对象. 本指南应该对你有所帮助 https://docs.shinami.com/docs/sui-high-level-gaming-guide
您可以将 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 或动态字段)指向,从而允许外部升级.
在Sui中,如果你想在铸造NFT并将其转移给用户之后使其可升级,你需要从设计阶段就为这种灵活性做好规划. 由于 Sui 强制执行严格的所有权并且只有所有者才能更改对象,因此除非用户将其发送回给您,或者与您的智能合约进行交互并通过可变引用授予许可,否则您无法直接升级用户的 NFT. 最常见和最有效的模式是使用由两部分组成的结构将NFT的核心身份与其可升级的数据分开:NFT对象本身(被转让和拥有)和NFT指向的辅助对象(例如元数据或统计对象). 这个辅助对象可以通过功能进行共享或控制,因此游戏逻辑或您的智能合约可以在不需要 NFT 的完全所有权的情况下对其进行更新. 您还可以使用功能实现访问控制——如果您的合同向用户颁发了权能,他们可以在不放弃 NFT 的情况下安全地授权升级. 战斗或升级等游戏内互动将调用同时采用 NFT 及其元数据的智能合约函数,从而确保只有经过批准的升级才会发生. 如果希望用户启动升级,则可以要求他们使用正确的可变引用调用您的函数. 否则,Sui 的模型会故意防止强制更改,这是一项安全功能. 因此,要在实践中启用可升级的 NFT,你要么使用你控制访问权限的外部元数据来构建它们,要么要求用户通过他们签署的交易选择升级.
你知道答案吗?
请登录并分享。
Sui is a Layer 1 protocol blockchain designed as the first internet-scale programmable blockchain platform.