Le standard ERC721

Le standard ERC721 est le standard Ethereum utilisé pour les Non-Fungible Token (NFT). Chaque NFT est un actif numérique unique, non interchangeable et indivisible. Les attributs contract address et unint256 (identifiant du token) garantissent son unicité. Le concept de rareté numérique y est exploité à son plein potentiel.

Cette norme a été formalisée le 24 janvier 2018 suite à une demande de William Entriken, Dieter Shirley, Jacob Evans, Nastassia Sachs. Voici les préconisations pour créer et interagir avec des jetons non fongibles.

D’autres normes, telles que l’ERC165 doivent également être implémentées pour garantir que le destinataire de la transaction implémente bien les interfaces qui permettent de supporter le NFT.

Les fonctions

Pour interagir avec un NFT, ou en créer un, le smart contract de token doit mettre en application ces fonctions :

  • balanceOf: permet de connaitre le nombre de NFT attribué à un compte. [obligatoire].
  • ownerOf: permet de connaitre l’adresse du propriétaire d’un NFT. [obligatoire].
  • safeTransferFrom: permet de transférer un NFT d’un compte vers un autre compte. Si l’initiateur de la transaction n’est pas le propriétaire du compte, une adresse de smart contract ou une adresse autorisée, un message d’erreur doit être remonter. Un contrôle est également réalisé pour lever une erreur si l’adresse de destination n’existe pas ou si l’identifiant du token n’est pas valide. [obligatoire].
  • transferFrom: est la fonction que doit réaliser l’initiateur de la transaction pour vérifier que le bénéficiaire est bien capable de recevoir le NFT, auquel cas le NFT peut être définitivement perdu. Pour les conditions de lever d’erreur, ce sont les mêmes que safeTransferFrom. [obligatoire].
  • approve: est une fonction permettant d’approuver un transfert par une adresse d’un tiers qui n’est pas le propriétaire du compte. Une adresse de destinataire vide équivaut à un refus de sa part. [obligatoire].
  • setApproveForAll: est une fonction permettant au détenteur d’un contrat de token d’approuver ou de refuser à une application tierce de gérer l’ensemble des actifs de son compte. Le contrat doit permettre à plusieurs ‘operator’ de gérer un compte. [obligatoire].
  • getApproved: renvoie l’adresse de ‘l’operator’ tierce qui a des autorisations sur un NFT donné. [obligatoire].
  • isApprovedForAll: vérifie si l’adresse de ‘l’operator’ est autorisée par le propriétaire du compte. [obligatoire].
  • onRCFC721Received: le smart contract doit appeler cette fonction sur l’adresse de réception du NFT pour s’assurer que le transfert s’est bien déroulé.

Les métadonnées

Ci-dessous les métadonnées liées au token :

  • name: retourne le nom du token. [optionnelle].
  • symbol: retourne le symbole du token. [optionnelle].
  • tokenURI: retourne l’URI d’un actif. [optionnelle].

Les événements

Ci-dessous les événements déclenchés par les fonctions :

  • Transfer: doit se déclencher quand les NFT sont transférés. Ils se déclenchent quand les fonctions ‘safeTransferFrom’ et ‘transferFrom’ sont appelés pour tracer l’historique de la transaction.
  • Approval: doit se déclencher à chaque appel réussie de la fonction ‘approve’.
  • ApprovalForAll: doit se déclencher à chaque appel réussie de la fonction ‘setApproveForAll’.

Les énumérations

Les énumérations permettent aux smart contracts de lister entièrement des NFTs et de les rendre visibles:

  • totalSupply: renvoie le nombre total de tokens en circulation sur ce smart contract. [optionelle].
  • totalByIndex: énumère les NFTs valides [optionelle].
  • totalOfOwnerByIndex: renvoie le nombre total de NFTs que possède un compte. [optionelle].

ERC165

  • supportsInterface : est implémenté pour savoir si l’adresse du destinataire supporte le NFT. Le retour de la méthode est un boolean. Cette requête doit consommé moins de 30 000 gas. Le gas est l’unité de mesure de la quantité d’efforts des opérations spécifiques sur le réseau Ethereum. [obligatoire].

Il est conseillé de faire en sorte que le smart contract puisse implémenter d’autres fonctionnalités comme la création ou la destruction d’un NFT. Les vérifications de l’existence du destinataire et de sa capacité à recevoir un NFT permet de garantir une certaine sécurité lors des transctions.

D’autres standards existent :

  • ERC20 : pour créer et gérer les tokens standards
  • ERC223 : une amélioration de ERC20
  • ERC1155 : pour gérer les tokens standards et les NFTs

3 commentaires

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l’aide de votre compte WordPress.com. Déconnexion /  Changer )

Image Twitter

Vous commentez à l’aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l’aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s