Aller au contenu

Votre Premier NFT

Ce tutoriel décrit comment créer et transférer des actifs non-fongibles sur la blockchain Aptos. Le tutoriel contient des exemples de codes opérationnels dans le SDK TypeScript, SDK Python, et SDK Rust.

Installez votre SDK préféré dans la liste ci-dessous :


Installez le binaire pré-compilé pour la CLI Aptos.


Clonez le repo aptos-ts-sdk et construisez-le :

Fenêtre de terminal
git clone https://github.com/aptos-labs/aptos-ts-sdk.git
cd aptos-ts-sdk
pnpm install
pnpm build

Naviguez vers le répertoire des exemples TypeScript :

Fenêtre de terminal
cd examples/typescript/

Installez les dépendances nécessaires :

Fenêtre de terminal
pnpm install

Exécutez l’exemple TypeScript simple_nft :

Fenêtre de terminal
pnpm run simple_nft

Clonez le repo aptos-python-sdk :

Fenêtre de terminal
git clone https://github.com/aptos-labs/aptos-python-sdk.git
cd aptos-python-sdk

Installez les dépendances nécessaires :

Fenêtre de terminal
curl -sSL https://install.python-poetry.org | python3
poetry install

Exécutez l’exemple Python simple_nft :

Fenêtre de terminal
poetry run python -m examples.simple_nft

Clonez le repo aptos-rust-sdk :

Fenêtre de terminal
git clone https://github.com/aptos-labs/aptos-rust-sdk.git
cd aptos-rust-sdk

Exécutez l’exemple Rust simple_nft :

Fenêtre de terminal
cargo run --example simple_nft

Tout d’abord, nous initialisons les objets Aptos et Account :

// Créer une instance Aptos pour interagir avec la blockchain
const aptos = new Aptos();
// Créer des comptes pour Alice et Bob
const alice = Account.generate();
const bob = Account.generate();
console.log("Adresse d'Alice :", alice.accountAddress.toString());
console.log("Adresse de Bob :", bob.accountAddress.toString());

Avant de pouvoir créer et transférer des NFT, nous devons financer les comptes avec des APT testnet :

// Financer le compte d'Alice
await aptos.fundAccount({
accountAddress: alice.accountAddress,
amount: 100_000_000, // 1 APT = 100_000_000 Octas
});
// Financer le compte de Bob
await aptos.fundAccount({
accountAddress: bob.accountAddress,
amount: 100_000_000,
});

Avant de créer des NFT individuels, nous devons créer une collection. Une collection agit comme un conteneur pour des NFT connexes :

// Créer une transaction pour créer une collection
const createCollectionTransaction = await aptos.createCollectionTransaction({
creator: alice,
description: "Collection de démonstration d'Alice",
name: "Collection d'Alice",
uri: "https://aptos.dev",
});
// Signer et soumettre la transaction
const committedTxn = await aptos.signAndSubmitTransaction({
signer: alice,
transaction: createCollectionTransaction,
});
// Attendre que la transaction soit confirmée
await aptos.waitForTransaction({ transactionHash: committedTxn.hash });
console.log("Collection créée !");

Maintenant que nous avons une collection, nous pouvons créer un NFT à l’intérieur :

// Créer une transaction pour créer un NFT
const createNftTransaction = await aptos.mintDigitalAssetTransaction({
creator: alice,
collection: "Collection d'Alice",
description: "Premier NFT d'Alice",
name: "NFT d'Alice",
uri: "https://aptos.dev/img/nft.jpeg",
});
// Signer et soumettre la transaction
const nftTxn = await aptos.signAndSubmitTransaction({
signer: alice,
transaction: createNftTransaction,
});
// Attendre que la transaction soit confirmée
await aptos.waitForTransaction({ transactionHash: nftTxn.hash });
console.log("NFT créé !");

Nous pouvons maintenant lire les données de notre NFT nouvellement créé :

// Obtenir les collections d'Alice
const alicesCollections = await aptos.getAccountCollections({
accountAddress: alice.accountAddress,
});
console.log("Collections d'Alice :", alicesCollections);
// Obtenir les NFT d'Alice
const alicesNfts = await aptos.getAccountOwnedTokens({
accountAddress: alice.accountAddress,
});
console.log("NFT d'Alice :", alicesNfts);

Maintenant transférons le NFT d’Alice à Bob :

// Obtenir l'adresse du NFT depuis les NFT d'Alice
const nftAddress = alicesNfts[0].token_data_id;
// Créer une transaction de transfert
const transferTransaction = await aptos.transferDigitalAssetTransaction({
sender: alice,
digitalAssetAddress: nftAddress,
recipient: bob.accountAddress,
});
// Signer et soumettre la transaction
const transferTxn = await aptos.signAndSubmitTransaction({
signer: alice,
transaction: transferTransaction,
});
// Attendre que la transaction soit confirmée
await aptos.waitForTransaction({ transactionHash: transferTxn.hash });
console.log("NFT transféré à Bob !");

Enfin, vérifions que Bob possède maintenant le NFT :

// Obtenir les NFT de Bob
const bobsNfts = await aptos.getAccountOwnedTokens({
accountAddress: bob.accountAddress,
});
console.log("NFT de Bob :", bobsNfts);
// Obtenir les NFT d'Alice (devrait être vide maintenant)
const alicesNftsAfterTransfer = await aptos.getAccountOwnedTokens({
accountAddress: alice.accountAddress,
});
console.log("NFT d'Alice après transfert :", alicesNftsAfterTransfer);

Chaque NFT (Digital Asset) sur Aptos contient les métadonnées suivantes :

  • Nom : Le nom du NFT
  • Description : Une description du NFT
  • URI : Un lien vers le media associé (image, vidéo, etc.)
  • Collection : La collection à laquelle appartient ce NFT

Les collections servent de conteneurs pour des NFT connexes et contiennent :

  • Nom : Nom de la collection
  • Description : Description de la collection
  • URI : URI pour les métadonnées de la collection
  • Créateur : L’adresse qui a créé la collection

Les Digital Assets sur Aptos ont plusieurs propriétés importantes :

  • Unicité : Chaque Digital Asset a une adresse unique sur la blockchain
  • Propriété : La propriété est suivie on-chain et peut être vérifiée
  • Transférabilité : Les NFT peuvent être transférés entre comptes
  • Métadonnées mutables : Les créateurs peuvent configurer si les métadonnées peuvent être modifiées

Vous pouvez ajouter des propriétés personnalisées à vos NFT :

const createNftWithProperties = await aptos.mintDigitalAssetTransaction({
creator: alice,
collection: "Collection d'Alice",
description: "NFT avec propriétés personnalisées",
name: "NFT Spécial",
uri: "https://aptos.dev/img/special-nft.jpeg",
propertyKeys: ["power", "rarity", "level"],
propertyTypes: ["u64", "string", "u8"],
propertyValues: [100, "legendary", 5],
});

Vous pouvez contrôler quels aspects de votre NFT peuvent être modifiés :

const createImmutableNft = await aptos.mintDigitalAssetTransaction({
creator: alice,
collection: "Collection d'Alice",
description: "NFT immuable",
name: "NFT Permanent",
uri: "https://aptos.dev/img/permanent-nft.jpeg",
// Contrôler quelles métadonnées peuvent être modifiées
mutableDescription: false,
mutableName: false,
mutableUri: false,
mutableProperties: false,
});

Vous pouvez détruire définitivement un NFT :

const burnTransaction = await aptos.burnDigitalAssetTransaction({
creator: alice,
digitalAssetAddress: nftAddress,
});
await aptos.signAndSubmitTransaction({
signer: alice,
transaction: burnTransaction,
});
  • Stockez les images et médias dans un stockage décentralisé comme IPFS
  • Utilisez des formats de métadonnées standards (par exemple, JSON)
  • Incluez des descriptions riches et des attributs
  • Validez toujours les entrées lors de la création de NFT
  • Considérez soigneusement les permissions de mutabilité
  • Testez sur testnet avant le déploiement en mainnet
  • Les coûts de gaz varient selon la complexité du NFT
  • Les NFT avec plus de propriétés coûtent plus de gaz
  • Considérez le groupement d’opérations quand c’est possible

Vous avez maintenant appris les bases de la création et gestion de NFT sur Aptos ! Vous pouvez maintenant :

  • Créer des collections NFT
  • Créer des NFT individuels avec métadonnées
  • Transférer des NFT entre comptes
  • Lire et vérifier la propriété de NFT
  • Ajouter des propriétés personnalisées
  • Contrôler la mutabilité