Création d'un NFT - Partie 1
Création d'un actif non fongible
Introduction
Avalanche est un réseau financier mondial pour l'émission et le commerce de biens numériques. Sur Avalanche, ces biens numériques sont représentés sous forme de jetons, qui peuvent être des actifs ou des utilitaires. Certains jetons sont fongibles, ce qui signifie qu'un jeton est interchangeable avec n'importe quel autre jeton. La monnaie du monde réel est fongible, par exemple; un billet de 5 $ est traité comme étant le même que tout autre billet de 5 $.
Avalanche prend également en charge les jetons non fongibles (NFT). Par définition, chaque NFT est unique et n'est pas parfaitement interchangeable avec un autre NFT. Par exemple, il pourrait y avoir un NFT qui représente la propriété d'une œuvre d'art du monde réel; chaque œuvre d'art, comme chaque NFT, est unique. Les NFT représentent une rareté numérique et peuvent s'avérer encore plus utiles que les jetons fongibles traditionnels.
Dans ce didacticiel, nous allons créer et envoyer des NFT à l'aide de l'API d'AvalancheGo. Dans un prochain tutoriel, nous allons créer une famille NFT personnalisée à l'aide d'AvalancheJS et explorer les NFT plus en détail.
Hypothèses
Nous supposons que le lecteur a déjà terminé le guide pour commencer et est familiarisé avec l'architecture d'Avalanche. Dans ce tutoriel, nous utilisons la collection Postman d'Avalanche pour nous aider à faire des appels API.
Créer la famille NFT
Chaque NFT appartient à une famille, qui a un nom et un symbole. Chaque famille est composée de groupes. Le nombre de groupes dans une famille est spécifié lors de la création de la famille. Notre NFT existera sur la X-Chain, donc pour créer notre famille NFT, nous appellerons avm.createNFTAsset
, qui est une méthode de l'API de X-Chain.
La signature de cette méthode est :
Méthode
Paramètres
name
est un nom lisible par l'homme pour l'actif. Pas nécessairement unique. Entre 0 et 128 caractères.symbol
est un symbole abrégé de l'actif. Entre 0 et 4 caractères. Pas nécessairement unique. Peut être omis.minterSets
est une liste où chaque élément spécifie que le seuilthreshold
des adresses dans lesminters
peut ensemble minter plus de pièces de l'actif en signant une transaction de frappe.Effectuer une transaction sur la X-Chain nécessite des frais de transaction payés en AVAX.
username
etpassword
indiquent quel utilisateur paie les frais.Chaque élément de
initialHolders
spécifie que l'address
contient les unités de montant de l'actifamount
lors de la genèse.from
sont les adresses que vous souhaitez utiliser pour cette opération. En cas d'omission, utilise l'une de vos adresses au besoin.changeAddr
est l'adresse à laquelle tout changement sera envoyé. En cas d'omission, la modification est envoyée à l'une des adresses contrôlées par l'utilisateur.
Réponse
assetID
est l'ID du nouvel actif.changeAddr
dans le résultat est l'adresse à laquelle tout changement a été envoyé.
Plus loin dans cet exemple, nous créerons un NFT. Assurez-vous donc de remplacer au moins 1 adresse dans le set de minter par une adresse que votre utilisateur contrôle.
La réponse devrait ressembler à ça :
Quelques points à noter: tout d'abord, en plus de créer une famille NFT, avm.createNFTAsset
d'AvalancheGo crée également un groupe pour chacun des minterSets
qui sont transmis. Par exemple, si minterSets a 3 éléments, la famille NFT a 3 groupes. Deuxièmement, notez le assetID
qui est retourné dans la réponse. Il s'agit de l'ID d'élément de la famille NFT nouvellement créée et vous en aurez besoin plus tard pour émettre des NFT.
Vous vous demandez peut-être pourquoi nous spécifions des sets d'adresses qui peuvent frapper plus d'unités de l'actif plutôt qu'une seule adresse. Voici les raisons :
Sécurité : Si une seule adresse peut frapper plus de l'actif et que la clé privée de cette adresse est perdue, aucune autre unité ne peut jamais être frappée. De même, si une seule adresse peut frapper plus de l'actif, rien n'empêche le détenteur de cette adresse de frapper unilatéralement autant qu'il le souhaite.
Flexibilité : C’est bien de pouvoir encoder une logique comme «Alice peut unilatéralement frapper plus d’unités de cet élément, ou Dinesh, Ellin et Jamie peuvent ensemble en fabriquer plus.»
Obtenez les UTXO pour NFT
Les sorties NFT n'apparaissent pas dans les appels à avm.getBalance
ou avm.getAllBalances
. Pour voir vos NFT, vous devez appeler avm.getUTXOs
, puis analyser l'utxo pour vérifier le type de l'ID. Les sorties NFT Mint ont un identifiant de type 00 00 00 0a
en hexadécimal (10
en décimal) et les sorties de transfert NFT ont un identifiant de type 00 00 00 0b
en hexdécimal (11
en décimal).
Méthode
Paramètres :
addresses
sont les adresses pour lesquelles récupérer les UTXO.
Résponse:
numFetched
est le nombre total d'UTXO dans la réponse.utxos
est un tableau de chaîne de caractères codées CB58.endIndex
Cette méthode prend en charge la pagination.endIndex
désigne le dernier UTXO renvoyé.
La réponse contient une liste d'UTXO :
avm.getUTXOs
renvoie 2 UTXO. Prenons le premier et décodons-le pour confirmer qu’il s’agit d’une sortie NFT Mint. Tout d'abord, nous convertissons la chaîne de caractères codée Base58Check qui est retournée par avm.getUTXOs
en hexadécimal. La chaîne de caractères CB58 suivante :
est exprimé en hexadécimal comme cela :
Nous pouvons maintenant décomposer l'hexagone en composants individuels de l'UTXO en se référant au format de sérialisation de transaction :
Notez que le TypeID
est 00 00 00 0a
qui est un type d'ID correct pour une sortie NFT Mint. Notez également que le GroupID
est 00 00 00 00
. Ce GroupID
a été créé en fonction du nombre de MinterSets
que j'ai transmis à avm.createNFTAsset
.
Frapper l'actif
Maintenant que nous avons une famille NFT et un groupe pour le seul MinterSet
, nous sommes en mesure de créer des NFT appartenant à ce groupe. Pour ce faire, nous appelons avm.mintNFT
:
Méthode
Paramètres
assetID
est l'ID de la famille NFT.payload
est une charge utile encodée CB58 arbitraire jusqu'à 1024 octets. Dans la partie 2 (BIENTÔT), nous explorerons la création d'un protocole autour de la charge utile NFT. Pour ce didacticiel, la payload est la chaîne de caractères «AVA Labs».to
est l'adresse qui recevra le NFT nouvellement créé. Remplacezto
par une adresse que votre utilisateur contrôle afin que vous puissiez plus tard envoyer une partie du NFT nouvellement créé.username
doit être un utilisateur qui détient des clés lui donnant la permission de frapper plus de ce NFT. Autrement dit, il contrôle au moins les clés dethresold
pour l'un des sets de minter que nous avons spécifiés ci-dessus.password
est le mot de passe valide pour l'username
Résponses
txID
est l'ID de transaction.changeAddr
dans le résultat est l'adresse à laquelle tout changement a été envoyé.
La réponse contient l'ID de la transaction :
Semblable à l'étape précédente, nous pouvons maintenant confirmer qu'un NFT a été frappé (mint) en appelant avm.getUTXOs
et en analysant l'UTXO pour confirmer que nous avons maintenant une sortie de transfert NFT.
Cela devrait donner :
Comme à l'étape précédente, nous pouvons maintenant décoder l'UTXO codé CB58 en hexadécimal, puis le décomposer en ses composants individuels pour confirmer que nous avons le bon UTXO et le bon type.
Tout d'abord, nous convertissons la chaîne de caractères codée Base58Check qui est retournée par avm.getUTXOs
en hexadécimal. La chaîne de caractères CB58 suivante :
est exprimé en hexadécimal comme :
Nous pouvons maintenant décomposer l'hexadécimal en composants individuels de l'UTXO :
Notez que le TypeID
est 00 00 00 0b
qui est l'identifiant de type correct pour une sortie de transfert NFT. Notez également que le Payload
est inclus.
Envoyer les NFT
Vous pouvez désormais envoyer le NFT à n'importe qui. Pour ce faire, utilisez la méthode API avm.sendNFT
d'AvalancheGo.
Méthode
Paramètres
assetID
est l'ID du NFT que nous envoyons.to
est l'adresse qui recevra le NFT nouvellement créé.groupID
est le groupe NFT à partir duquel envoyer le NFT.username
est l'utilisateur qui contrôle le NFT.password
est le mot de passe valide pourusername
Réponses
txID
est l'ID de transaction.changeAddr
dans le résultat est l'adresse à laquelle tout changement a été envoyé.
La réponse confirme que votre opération de transfert NFT a réussi :
Vous pouvez appeler avm.getUTXOs
pour l'adresse à laquelle vous avez envoyé le NFT et décomposer l'UTXO renvoyé, après la conversion de CB58 en hexadécimal, pour confirmer qu'il existe un UTXO avec l'ID de type 00 00 00 0b
en hexadécimal ou 11
en décimal.
Récapitulatif
La technologie blockchain et la tokenomique représentent une nouvelle façon radicale de représenter les actifs numériques. Les jetons non fongibles permettent de tokeniser des actifs rares. Dans ce tutoriel, nous avons :
Utilisé
createNFTAsset
pour créer une famille et un groupe d'actifs non fongibles.Utilisé
mintNFT
pour frapper les unités d'un NFT au groupe.Utilisé
getUTXOs
pour récupérer des UTXO pour une adresse. Nous avons ensuite converti l'UTXO encodé CB58 en hexadécimal et l'avons décomposé en ses composants individuels.Utilisé
sendNFT
pour transférer des NFT entre adresses.
Dans la deuxième partie de cette série, nous irons plus en profondeur en utilisant AvalancheJS pour créer un protocole pour notre Payload
NFT et en émettant vers plusieurs groupes.
Dernière mise à jour