8 minutes de lecture
Introduction
Les objets de collection numériques compatibles avec la norme ERC-721 ont connu un grand succès depuis le lancement de Cryptokitties et se sont largement démocratisés ces derniers mois. Ce guide vous expliquera comment créer et lancer votre propre ERC-721 (NFT) à l'aide de la bibliothèque de contrats intelligents 0xcert/ethereum-erc721.
Qu'est-ce qu'un jeton non fongible ?
« Fongible » signifie que quelque chose est identique ou interchangeable. Par exemple, dans le cas des jetons Ethereum, tous les jetons d’une même classe ont la même valeur. Il en va de même pour les jetons Cardano. Les jetons fongibles sont interchangeables à raison de 1 pour 1.
Dans cette optique, les NFT sont uniques : chacun est différent et possède des caractéristiques propres. Les objets pouvant être des NFT sont notamment des cartes à collectionner, des œuvres d’art, des billets d’avion, etc. Ils se distinguent clairement les uns des autres et ne sont pas interchangeables. Considérez les jetons non fongibles (NFT) comme des objets de collection très rares, chacun doté de caractéristiques uniques, d’attributs inhabituels et, dans la plupart des cas, de ses propres métadonnées.
Qu'est-ce que l'ERC-721 ?
ERC est l'abréviation de « Ethereum Request for Comment » et 721 est le numéro d'identification de la proposition. Les ERC sont des normes au niveau des applications pour l'écosystème Ethereum ; il peut s'agir, par exemple, d'une norme pour les contrats intelligents comme l'ERC-20.
L'auteur d'un ERC a pour mission de parvenir à un consensus au sein de la communauté Ethereum ; une fois examiné et approuvé par celle-ci, il devient une norme. Vous pouvez suivre toutes les propositions d'ERC récentes ici.
La norme ERC-721 a été créée pour permettre le suivi et le transfert des NFT dans les contrats intelligents.
ERC-721 est une norme ouverte qui décrit comment créer des jetons non fongibles (NFT) sur des blockchains compatibles avec l'EVM (Ethereum Virtual Machine). Elle définit un ensemble de règles qui facilitent l'utilisation des NFT. Les NFT ne se limitent pas à la norme ERC-721 ; ils peuvent également être des jetons ERC-1155.
Voici les fonctions et les événements définis dans la norme ERC-721 :
La norme ERC-721 définit certaines fonctionnalités conformes à la norme ERC-20. Cela facilite grandement l'affichage des informations relatives aux jetons dans certains portefeuilles déjà existants.
Fonctionnalités ERC-20
- nom : Permet de définir le nom sous lequel d'autres contrats ou applications peuvent l'identifier.
- symbole : Permet de définir le symbole ou le nom abrégé.
- totalSupply : cette fonction sert à définir le nombre total de jetons existant sur la blockchain ; ce nombre n'est pas nécessairement constant.
- balanceOf : Renvoie le nombre de NFT détenus par une adresse.
Fonctions liées à la propriété du jeton
- ownerOf : Cette fonction renvoie l'adresse du propriétaire d'un jeton. Chaque jeton ERC-721 étant unique et non fongible, il est représenté sur la blockchain par un identifiant. D'autres utilisateurs, contrats ou applications peuvent utiliser cet identifiant pour déterminer qui est le propriétaire d'un jeton.
- Approuver : cette fonction permet de valider le transfert du jeton.
- takeOwnership : Il s'agit d'une fonction facultative permettant de retirer des jetons à un utilisateur lorsque cette adresse a déjà été préalablement autorisée à effectuer ce retrait.
- transfert : fonction permettant au détenteur d'un token de transférer ses tokens vers une autre adresse, comme s'il s'agissait de n'importe quel autre token ou devise.
- tokenOfOwnerByIndex : Il s'agit d'une fonction facultative, mais dont la mise en œuvre est vivement recommandée. Chaque propriétaire d'un jeton peut détenir simultanément plusieurs exemplaires du même NFT. L'identifiant unique de chaque NFT permet de les identifier, mais il devient parfois très difficile de suivre ces identifiants. Le contrat conserve donc une trace des identifiants associés à leur propriétaire, et cette fonction nous permet d'obtenir les informations nécessaires à ce suivi.
Fonction de métadonnées
- tokenMetadata : cette fonctionnalité facultative est une interface qui permet de récupérer les informations relatives au jeton.
Événements
- Transfert : cet événement est déclenché lorsqu'un jeton change de propriétaire. Il fournit des informations sur l'adresse à partir de laquelle le jeton a été transféré, l'adresse qui l'a reçu et l'identifiant du jeton transféré.
- Approuver : cet événement est déclenché lorsqu'un utilisateur autorise un autre utilisateur à disposer du jeton, par exemple lorsque la fonction « approve » est exécutée. Il fournit des informations sur l'adresse qui détient actuellement le jeton, l'adresse qui a été autorisée à disposer du jeton à l'avenir et l'ID du jeton dont la prise de possession a été approuvée.
Cas d'utilisation des jetons non fongibles (NFT) :
- Art numérique (ou art physique) : il s'agit de l'utilisation la plus courante des NFT. Les ventes aux enchères d'art numérique ont été l'une des premières applications des NFT et continuent de se développer.
- Jeux : pour proposer des achats intégrés au jeu et des objets de collection.
- Immobilier : Possibilité de tokeniser des biens immobiliers et de créer des contrats intelligents pour faciliter les achats et les ventes.
- Finances : instruments financiers tels que les prêts, les contrats à terme et autres engagements.
- Logiciels : licences logicielles visant à lutter contre le piratage et à garantir la confidentialité.
- Billets de concert ou d'événements sportifs : afin d'éviter toute fraude lors de la vente de billets et de permettre aux fans de disposer d'un espace unique où consulter l'historique de leurs expériences.
Obtenir un test ETH
Maintenant que nous savons ce qu'est un jeton ERC-721 et comment il fonctionne, voyons comment créer et lancer notre propre jeton.
Nous allons déployer notre contrat sur la blockchain de test Ropsten. Pour commencer, vous devrez installer l'extension de navigateur Metamask afin de pouvoir créer un portefeuille ETH et obtenir un peu d'ETH de test via le « faucet » Ropsten. Sélectionnez « Ropsten Test Network » dans votre portefeuille Metamask, copiez l'adresse du portefeuille dans le champ de texte du « faucet », puis cliquez sur « Send me test Ether ».

Ajouter des fichiers à IPFS
Avant de rédiger notre contrat NFT, nous devons enregistrer l'œuvre d'art associée au NFT et créer un fichier de métadonnées. Pour cela, nous utiliserons IPFS, un système distribué de partage de fichiers. Téléchargez et installez IPFS CLI sur votre système d'exploitation en suivant le guide d'installation d'IPFS ci-dessous.
Vous trouverez ci-dessous les étapes à suivre pour enregistrer l'image et le fichier de métadonnées
Étape 1 : Création du référentiel IPFS. Lancez le référentiel IPFS en saisissant les commandes suivantes dans le terminal
ipfs init
Étape 2 : Démarrer le moniteur IPFS
Ouvrez un nouveau terminal et saisissez la commande suivante
démon IPFS
Étape 3 : Ajouter l'image à l'IPFS
Dans le premier terminal, ajoutez l'image (art.png dans cet exemple)
ipfs ajouter art.png

Copiez le hash qui commence par « Qm » et ajoutez « https://ipfs.io/ipfs/ » au début ; vous devriez obtenir quelque chose de similaire à ceci : https://ipfs.io/ipfs/QmQEVVLJUR1WLN15S49rzDJsSP7za9DxeqpUzWuG4aondg
Étape 4 : Ajouter un fichier JSON à IPFS
Créez un fichier JSON nommé nft.json et enregistrez-le dans le même répertoire que l'image.
Le fichier JSON :
{
"name": "NFT Art",
"description": "This image shows the true nature of NFT.",
"image": "https://ipfs.io/ipfs/QmZzBdKF7sQX1Q49CQGmreuZHxt9sVB3hTc3TTXYcVZ7jC",
}
Maintenant, ajoutez le fichier JSON à IPFS
ipfs ajouter nft.json
Copiez le hash commençant par « Qm » et ajoutez « https://ipfs.io/ipfs/ » au début ; vous devriez obtenir quelque chose de similaire à ceci : https://ipfs.io/ipfs/QmUFbUjAifv9GwJo7ufTB5sccnrNqELhDMafoEmZdPPng7
Regarde cette URL, on va en avoir besoin pour lancer notre NFT.
Création de notre jeton
Pour plus de simplicité et de sécurité, nous allons utiliser 0xcert/ethereum-erc721 pour créer notre contrat NFT. Avec 0xcert/ethereum-erc721, nous n'aurons pas à réécrire l'intégralité de l'interface ERC-721 ; nous pourrons au contraire l'importer et utiliser ses fonctions.
Rendez-vous sur l'IDE Ethereum Remix et créez un nouveau fichier Solidity, par exemple : nft.sol
Copie le code suivant dans ton nouveau fichier Solidity :
// SPDX-License-Identifier: MIT
pragma solidity 0.8.0;
import "https://github.com/0xcert/ethereum-erc721/src/contracts/tokens/nf-token-metadata.sol";
import "https://github.com/0xcert/ethereum-erc721/src/contracts/ownership/ownable.sol";
contract newNFT is NFTokenMetadata, Ownable {
constructor() {
nftName = "Synth NFT";
nftSymbol = "SYN";
}
function mint(address _to, uint256 _tokenId, string calldata _uri) external onlyOwner {
super._mint(_to, _tokenId);
super._setTokenUri(_tokenId, _uri);
}
}
Explication du code ci-dessus :
Ligne 1 : Spécification du type de licence SPDX, un ajout obligatoire depuis Solidity ^0.6.8. Chaque fois que le code d'un smart contract est mis à la disposition du public, ces licences peuvent aider à résoudre et à éviter les problèmes liés aux droits d'auteur. Si vous ne souhaitez spécifier aucun type de licence, vous pouvez utiliser la valeur « Unlicensed » ou simplement ne pas ajouter de commentaire (cela n'entraînera pas d'erreur, mais seulement un avertissement).
Ligne 2 : Déclare la version de Solidity du contrat intelligent.
Lignes 4-5 : Importez le contrat 0xcert/ethereum-erc721
Ligne 7 : Le contrat commence par être nommé « newNFT » et hérite d'autres contrats appelés « NFTokenMetadata » et « Ownable ».
Lignes 9 à 12 : Initialisation du constructeur et définition du nom et du symbole de notre jeton.
Ligne 14 : Nous déclarons la fonction `mint` avec trois arguments : la variable `_to` de type `address`, qui contiendra l'adresse destinataire du jeton NFT ; la variable `_tokenId` de type `uint256`, qui contiendra l'identifiant du jeton ; et la variable `_uri`, qui contiendra l'URI du fichier JSON. Le fait de déclarer cette fonction `mint` comme `external` signifie qu'elle est accessible depuis d'autres contrats intelligents et depuis l'extérieur de la portée du contrat lui-même.
Ligne 15 : Supprimez le jeton en utilisant l'adresse qui va le recevoir et l'identifiant du jeton.
Ligne 16 : Définir l'URI à l'aide de l'identifiant du jeton et de l'URI du fichier JSON.
Compilez le smart contract, puis déployez-le à l'aide de Web3 injecté (assurez-vous que le réseau Ropsten Testnet est sélectionné dans Metamask avant de compiler le contrat).
Valider la transaction dans Metamask.

Si vous recevez un message d'erreur avant le déploiement (« This contract may be abstract »), assurez-vous d'avoir sélectionné le contrat approprié dans l'option « Contracts ».

Rendez-vous maintenant dans la section « Deployed Contracts » (Contrats déployés) de Remix et développez le contrat que vous venez de déployer. Vous verrez alors toute une série de fonctions/méthodes. Développez la fonction « mint » et ajoutez les détails suivants :
- Ajoute ton adresse Ropsten dans le champ _to
- Ajoutez un nombre dans le champ _tokenid (nous vous suggérons 1, car c'est le premier)
- Ajoutez l'URI du fichier JSON dans le champ _uri ; nous l'avons obtenu dans la section précédente.
Cliquez sur « Transact » et confirmez la transaction dans Metamask. Vous disposez désormais du token sur le réseau Ropsten.
Vous pouvez vérifier d'autres informations telles que le nom, le symbole, le propriétaire et le « tokenuri » en saisissant le « tokenid » que nous avons mentionné précédemment.

Conclusion
Félicitations pour avoir créé ton propre NFT ! Aide un ami artiste en mettant son œuvre sur le réseau Ethereum ou en devenant toi-même artiste. Tu peux consulter le dépôt GitHub de 0xcert/ethereum-erc721 pour découvrir d'autres exemples.
Abonnez-vous à notre newsletter pour découvrir d'autres articles et guides sur Ethereum. Si vous avez des remarques, n'hésitez pas à les partager sur notre compte Twitter. Vous pouvez également nous contacter à tout moment sur notre serveur Discord, où vous trouverez certains des meilleurs développeurs :)