
0x01 Qu’est-ce que l’ERC-721 ?
ERC est une abréviation d’Ethereum Request for Comment, et 721 est le numéro d’identification de la proposition. responsable de la construction d’un consensus avec la communauté Ethereum et une fois que la proposition est examinée et approuvée par la communauté, elle devient une norme. ERC-721 a été créé pour proposer la fonctionnalité de suivi et de transfert des NFT dans les contrats intelligents.
ERC-721 est une norme ouverte qui décrit comment créer des jetons non fongibles sur EVM (Ethereum Virtual Machine) blockchains compatibles ; il s’agit d’une interface standard pour les jetons non fongibles ; il a un ensemble de règles qui facilitent le travail avec les NFT. Les NFT ne sont pas uniquement de type ERC-721 ; ils peuvent également être des jetons ERC-1155.
Voici l’ensemble des fonctions et événements définis dans la norme ERC-721 :
ERC-721 définit certaines fonctions conformément à ERC-20. Cela permet aux portefeuilles existants d’afficher plus facilement des informations de jeton simples.
Fonctions de type ERC20 :
- Nom: Utilisé pour définir le nom du jeton, que d’autres contrats et applications peuvent identifier.
- symbole: Utilisé pour définir le nom abrégé ou le symbole du jeton.
- approvisionnement total : Cette fonction permet de définir le nombre total de tokens sur la blockchain ; l’offre n’a pas à être constante.
- équilibre des: Renvoie le nombre de NFT appartenant à une adresse.
Fonctions de propriété
- Propriétaire de: Cette fonction renvoie l’adresse du propriétaire d’un jeton. Comme chaque jeton ERC-721 est unique et non fongible, ils sont représentés sur la blockchain par un identifiant. D’autres utilisateurs, contrats et applications peuvent utiliser cet ID pour déterminer le propriétaire du jeton.
- approuver: Cette fonction accorde ou approuve une autre entité l’autorisation de transférer des jetons au nom du propriétaire.
- prendre possession: Il s’agit d’une fonction facultative qui agit comme une fonction de retrait puisqu’un tiers peut l’appeler pour retirer des jetons du compte d’un autre utilisateur. Par conséquent, takeOwnership peut être utilisé lorsqu’un utilisateur a été autorisé à posséder un certain nombre de jetons et souhaite retirer lesdits jetons du solde d’un autre utilisateur.
- transférer: C’est un autre type de fonction de transfert ; il permet au propriétaire de transférer le jeton à un autre utilisateur, tout comme les autres jetons/pièces numériques.
- tokenOfOwnerByIndex : Il s’agit d’une fonction facultative mais recommandée. Chaque propriétaire peut posséder plus d’un NFT en même temps. Son identifiant unique identifie chaque NFT, et finalement, il peut devenir difficile de garder une trace des identifiants. Ainsi, le contrat stocke ces identifiants dans un tableau et la fonction tokenOfOwnerByIndex nous permet de récupérer ces informations à partir du tableau.
Fonction de métadonnées
- tokenMetadata : Cette fonctionnalité optionnelle est une interface qui nous permet de découvrir les métadonnées d’un jeton ou un lien vers ses données.
Événements
- Transférer: Cet événement est déclenché lorsque la propriété du jeton change d’un individu à un autre. Il émet les informations sur quel compte a transféré le jeton, quel compte a reçu le jeton et quel jeton (par ID) a été transféré.
- Approuver: Cet événement est déclenché lorsqu’un utilisateur autorise un autre utilisateur à s’approprier le jeton, c’est-à-dire qu’il est déclenché chaque fois que la fonction d’approbation est exécutée. Il émet les informations sur le compte qui détient actuellement le jeton, sur le compte qui est approuvé pour devenir propriétaire du jeton à l’avenir et sur le jeton (par ID) dont la propriété est approuvée pour le transfert.
Scénario 0x02 de NFT
- Art numérique (ou art physique) : Les œuvres d’art sont les cas d’utilisation les plus populaires des NFT. Les ventes aux enchères d’art numérique ont été la première application des NFT et continuent de croître.
- Jeux : Fourniture d’achats dans le jeu et d’objets de collection de jeux.
- Immobilier: Tokéniser les propriétés et les contrats intelligents et effectuer l’achat et la vente.
- La finance: Instruments financiers tels que prêts, contrats à terme et autres responsabilités.
- Titres de logiciels : Licences logicielles pour garantir la protection contre le piratage et la confidentialité.
- Billets de concert/Billets de match sportif : Pour s’assurer qu’aucune fraude ne se produit dans la vente de billets et que les fans peuvent avoir un seul endroit pour voir les expériences passées.
- Conformité KYC : Création d’un jeton pour le KYC d’un utilisateur spécifique.
0x03 Obtention du test ETH
Nous déploierons notre contrat sur le Réseau de test de Ropsten. Pour commencer, vous aurez besoin de l’extension de navigateur Metamask pour créer un EPF portefeuille et un test ETH, que vous pouvez obtenir en vous rendant sur le Ropsten robinet. Vous devrez sélectionner Ropsten Test Network sur votre Métamasque portefeuille et copiez-collez l’adresse du portefeuille dans le champ de texte du robinet, puis cliquez sur Envoyez-moi tester Ether.
Ropsten Ethereum (également connu sous le nom de « Ethereum Testnet ») est un réseau de test Ethereum qui permet de tester le développement de la blockchain avant le déploiement sur Mainnet, le principal réseau Ethereum. Ropsten est le successeur de Morden, le premier Ethereum Testnet.

0x04 Ajout de fichiers à IPFS
Avant de rédiger notre contrat NFT, nous devons héberger notre art pour NFT et créer un fichier de métadonnées ; pour cela, nous utiliserons IPFS – un système distribué de stockage et de partage de fichiers peer-to-peer.
Étape 1: Création du référentiel IPFS.
Démarrez le dépôt IPFS en tapant ce qui suit dans une fenêtre terminal/cmd.

Repo est le référentiel de stockage des nœuds IPFS, et c’est le sous-système où les nœuds IPFS stockent réellement les données. Tous les objets IPFS sont stockés dans un référentiel (similaire à git). Il existe plusieurs implémentations de dépôt, selon le support de stockage utilisé. Le plus souvent, les nœuds IPFS utilisent fs-repo (stocké dans le système de fichiers os), mais aussi mem-repo et s3-repo.
Étape 2: Démarrage du démon IPFS.
Démarrez le démon IPFS, ouvrez une fenêtre terminal/cmd séparée et tapez ce qui suit.

La commande ipfs daemon est utilisée pour démarrer un nœud IPFS connecté au réseau
Étape 3: Ajout d’une image à IPFS
Allez dans la première fenêtre du terminal et ajoutez l’image à IPFS (art.png ici).


Copiez le hachage à partir de Qm et ajoutez-y le préfixe « https://ipfs.io/ipfs/ » ; ça doit ressembler à quelque chose comme ça
https://ipfs.io/ipfs/QmQEVVLJUR1WLN15S49rzDJsSP7za9DxeqpUzWuG4a
remarque : chaque fichier stocké sur le réseau IPFS a une adresse de hachage unique (c’est-à-dire l’adresse de contenu, également appelée CID), et l’adresse est la valeur de hachage formée par l’algorithme. Ces valeurs de hachage sont uniques et les utilisateurs peuvent localiser des fichiers et accéder aux données tant qu’ils accèdent aux hachages correspondants. Chaque fois que le fichier change, l’adresse de hachage (valeur) change. Ensuite, vous constaterez que le hachage de la plupart des fichiers IPFS commence par « Qm ». Afin de représenter le hachage de l’objet approximatif du fichier, IPFS utilise le format Multihash et l’encodage Base58.
Le format de Multihash est en fait une chaîne composée de trois parties : l’encodage de l’algorithme de hachage, la longueur de la valeur HasH (nombre d’octets) et la valeur Hash. Le multihash commence par un octet (0x12), qui indiquera de quel algorithme de hachage il s’agit. Ceci est suivi d’un autre octet de longueur (0x20). Actuellement, IPFS utilise l’algorithme de fonction de hachage sha2–256 par défaut, et la longueur binaire du résumé de hachage est de 32 octets. Après avoir ajouté la valeur de hachage, la longueur de la chaîne est très, très longue. À l’heure actuelle, la technologie d’encodage Base58 est utilisée, de sorte que la longueur de la chaîne puisse être compressée, ce qui est pratique pour le stockage et la transmission. Étant donné que la valeur Multihash actuelle d’IPFS commence par 1220, et selon l’opération d’encodage Base58, les résultats calculés commencent tous par « Qm ».
Étape 4: Ajout du fichier JSON à IPFS
Créez un fichier JSON nft.json et enregistrez-le dans le même répertoire que l’image.
Format de fichier JSON :

Ajoutez maintenant le fichier JSON.

Copiez le hachage à partir de Qm et ajoutez-y le préfixe « https://ipfs.io/ipfs/ » ; ça doit ressembler à ça https://ipfs.io/ipfs/QmUFbUjAifv9GwJo7ufTB5sccnrNqELhDMafoEmZdPPng7
Enregistrez cette URL. Nous en aurons besoin pour frapper notre NFT.
0x05 Création de votre propre jeton.
Pour plus de facilité et de sécurité, nous utiliserons le contrat 0xcert/ethereum-erc721 pour créer notre NFT. Avec 0xcert/ethereum-erc721, nous n’avons pas besoin d’écrire toute l’interface ERC-721. Au lieu de cela, nous pouvons importer le contrat de bibliothèque et utiliser ses fonctions.
Dirigez-vous vers le Ethereum Remix IDE et créez un nouveau fichier Solidity, par exemple – nft.sol
Remix IDE est un outil de compilation, de test et de déploiement de contrats intelligents en ligne. Utilisez-le pour interagir facilement avec les contrats intelligents.
Collez le code suivant dans votre nouveau script Solidity :

En précisant Type de licence SPDX, qui est un ajout après Solidity ^0.6.8. Chaque fois que le code source d’un contrat intelligent est mis à la disposition du public, ces licences peuvent aider à résoudre/éviter les problèmes de droits d’auteur. Si vous ne souhaitez spécifier aucun type de licence, vous pouvez utiliser une valeur spéciale UNLICENSED ou simplement ignorer tout le commentaire (cela n’entraînera pas d’erreur, juste un avertissement).
Web3 injecté: C’est l’option à utiliser pour le plugin du navigateur (MetaMask). Ici, vous dites à Remix de reporter tout le contrôle de l’intégration de la blockchain au plugin MetaMask. À ce stade, MetaMask contrôle le réseau auquel vous vous connectez.
Ligne 2 : Déclarer la version de solidité.
Ligne 4–5 : Importation de contrats 0xcert/ethereum-erc721.
Ligne 7 : Commencer notre contrat nommé newNFT et mentionner qu’il étend les contrats NFTokenMetadata et Ownable.
Ligne 9–12 : Initialisation du constructeur et nom du paramètre, un symbole de notre jeton.
Ligne 14 : Fonction déclarante mint avec trois arguments, variable _to de type address qui stockera l’adresse du récepteur du token NFT, variable _tokenId de type uint256 qui contiendra l’id du token, variable _uri de type string qui stockera l’URI de le fichier JSON. Déclarant la menthe comme un moyen externe, il est accessible à partir d’autres contrats intelligents et en dehors de la portée de soi.
Ligne 15 : frappe du jeton à l’aide de l’adresse du destinataire et de l’identifiant du jeton.
Ligne 16 : Définition de l’URI du jeton à l’aide de l’ID du jeton et de l’URI du fichier JSON.
Compilez le contrat intelligent et déployez-le en utilisant Web3 injecté (assurez-vous de sélectionner Ropsten testnet sur Metamask avant de compiler le contrat). Approuvez la transaction à partir du métamasque.

Si vous recevez un message d’erreur avant le déploiement, « Ce contrat peut être abstrait,” assurez-vous de sélectionner le contrat approprié sous l’onglet Contrat.

Allez maintenant dans la section « Contrats déployés » dans Remix et développez le contrat déployé. Vous verrez un tas de fonctions/méthodes. Développez la fonction menthe et ajoutez les détails suivants :
- Ajoutez votre adresse Ropsten dans le champ _to.
- Entrez n’importe quelle valeur de grand nombre dans le champ _tokenid (nous suggérons 1 puisque c’est le premier).
- Ajoutez l’URI du fichier JSON dans le champ _uri, que nous avons obtenu dans la section précédente.
Cliquez sur transact et confirmez la transaction de metamask. Vous avez maintenant le jeton sur la chaîne Ropsten.
Vous pouvez vérifier d’autres détails comme le nom, le symbole, le propriétaire ou le tokenuri en entrant l’identifiant du jeton que nous avons mentionné précédemment. Confirmez la transaction dans Metamask

0x05 conclusion
Bravo! maintenant vous avez votre propre NFT, GARDEZ-LE !
ref:https://ipfs.io/#install ——guide d’installation dans la documentation IPFS.
0xcert/ethereum-erc721:https://github.com/nibbstack/erc721
https://remix.ethereum.org/:Ethereum Remix IDE
Liste des licences SPDX : https://spdx.org/licenses/
Rejoignez Coinmonks Telegram Channel et Youtube Channel pour en savoir plus sur le trading et l’investissement cryptographiques