Beitrag
Teile dein Wissen.
Wie funktionieren aktualisierbare NFTs in SUI
Bedeutet, dass eine Person eine Sammlung und Mints bereitstellt und verschiedene NFTs an Benutzer überträgt. Jetzt möchte die Person das NFT für ein Spiel oder einen Charakter aktualisieren, aber wie wird sie das machen, da NFTs den Benutzern gehören und wenn sie sie nicht als Mutable-Referenz weitergeben, kann das nicht passieren. Also, wie funktioniert das in SUI?
- Sui
Antworten
3Sie benötigen eine Funktion in Ihrem Smart Contract, die jeder Inhaber aufrufen muss, um sein NFT/Objekt zu ändern. Dieser Leitfaden sollte für Sie hilfreich sein https://docs.shinami.com/docs/sui-high-level-gaming-guide
Sie speichern die modifizierbaren Teile der NFT als dynamische Felder unter einem NFT-Objekt. Das Haupt-NFT-Objekt bleibt im Besitz des Benutzers, aber Sie (der Entwickler oder die Spiellogik) erhalten Funktionen oder kontrollierten Zugriff, um die aktualisierbaren Teile (Statistiken, Skins usw.) zu ändern.
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 ist ein Standardobjekt. Wenn es einem Benutzer gehört, kann es nicht von jemand anderem mutiert werden.
• UpgradeAuthority ist eine Funktion, die dem Spieleentwickler oder dem Systemvertrag gehört.
• Benutzer können sich anmelden, indem sie eine veränderbare Referenz ihres NFT angeben (z. B. wenn sie ein Spiellevel spielen), und dein Vertrag bestätigt die Autorität, bevor du das NFT aktualisierst.
// 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); }
Sie können keine Objekte mutieren, auf die Sie keinen veränderbaren Zugriff haben.
• Also entweder:
• Der Benutzer ruft die Funktion auf und übergibt die NFT als &mut, ODER
• Sie entwerfen das NFT mit einem internen „Stat-Objekt“, das dem Entwickler gehört und auf das der Haupt-NFT zeigt (über eine Objekt-ID oder ein dynamisches Feld), was externe Upgrades ermöglicht.
Wenn Sie in Sui NFTs nach der Prägung und Übertragung an die Benutzer aktualisierbar machen möchten, müssen Sie diese Flexibilität bereits in der Entwurfsphase einplanen. Da Sui strikte Eigentumsrechte durchsetzt und nur der Besitzer ein Objekt mutieren kann, kannst du das NFT eines Benutzers nicht direkt aktualisieren, es sei denn, er schickt es dir entweder zurück oder interagiert mit deinem Smart Contract und erteilt die Erlaubnis über eine veränderbare Referenz. Das gebräuchlichste und effektivste Muster besteht darin, die Kernidentität des NFT von seinen aktualisierbaren Daten zu trennen, indem eine zweiteilige Struktur verwendet wird: das NFT-Objekt selbst (das übertragen wird und gehört) und ein sekundäres Objekt (wie ein Metadaten- oder Statistikobjekt), auf das die NFT verweist. Dieses sekundäre Objekt kann gemeinsam genutzt oder über Funktionen gesteuert werden, sodass die Spiellogik oder dein Smart Contract es aktualisieren können, ohne dass du das volle Eigentum an der NFT benötigst. Sie können die Zugriffskontrolle auch mithilfe von Funktionen implementieren. Wenn Ihr Vertrag Benutzern eine Funktion einräumt, können sie Upgrades sicher autorisieren, ohne ihre NFT aufzugeben. Interaktionen im Spiel wie Schlachten oder Levelaufstiege würden Smart-Contract-Funktionen aufrufen, die sowohl die NFT als auch ihre Metadaten verwenden und sicherstellen, dass nur genehmigte Upgrades stattfinden. Wenn von Benutzern erwartet wird, dass sie Upgrades einleiten, kannst du von ihnen verlangen, dass sie deine Funktion mit der richtigen veränderlichen Referenz aufrufen. Andernfalls verhindert das Modell von Sui bewusst erzwungene Änderungen, was ein Sicherheitsmerkmal ist. Um aktualisierbare NFTs in der Praxis zu ermöglichen, strukturieren Sie sie entweder mit externen Metadaten, auf die Sie den Zugriff kontrollieren, oder Sie fordern die Benutzer auf, sich über von ihnen signierte Transaktionen für Upgrades zu entscheiden.
Lesen Sie mehr über dynamische und aktualisierbare Assets in Sui
Weißt du die Antwort?
Bitte melde dich an und teile sie.
Sui is a Layer 1 protocol blockchain designed as the first internet-scale programmable blockchain platform.
Verdiene deinen Anteil an 1000 Sui
Sammle Reputationspunkte und erhalte Belohnungen für deine Hilfe beim Wachstum der Sui-Community.
- Warum benötigt BCS eine genaue Feldreihenfolge für die Deserialisierung, wenn Move-Strukturen benannte Felder haben?53
- Fehler bei der Überprüfung mehrerer Quellen“ in den Veröffentlichungen des Sui Move-Moduls — Automatisierte Fehlerbehebung43
- Sui-Transaktion schlägt fehl: Objekte sind für eine andere Transaktion reserviert25
- Wie interagieren Fähigkeitsbeschränkungen mit dynamischen Feldern in heterogenen Sammlungen?05