ERC-721 : la norme Ethereum pour les jetons non fongibles

ERC-721 : la norme Ethereum pour les jetons non fongibles

ERC-721 est une norme pour les jetons non fongibles (NFT) sur Ethereum. Une norme est un ensemble de règles publié. Non fongible signifie que chaque jeton est distinct des autres. ERC-721 définit une interface, c’est-à-dire la liste des fonctions et des événements qu’un smart contract fournit. Un smart contract est un programme stocké sur une blockchain. Pour ERC-721, un jeton est une unité émise sur une blockchain existante par l’intermédiaire d’un smart contract.

ERC-721 est publiée sous la forme d’une Ethereum Improvement Proposal (EIP), un document de conception destiné à la communauté Ethereum. Le numéro de la proposition est 721, c’est pourquoi ERC-721 s’écrit aussi EIP-721. ERC désigne la catégorie des propositions concernant les normes au niveau des applications, c’est-à-dire les normes que suivent les applications sur Ethereum, comme les normes de jetons.

Le code d’ERC-721 nomme son interface ERC721. Un jeton ERC-721 est un jeton émis par un contrat qui respecte ERC-721.

Une fonction est une opération nommée qu’un contrat propose et qu’un utilisateur peut appeler. Un événement est un avis qu’un contrat enregistre sur la blockchain lorsqu’un changement survient, afin qu’un logiciel puisse suivre ce changement. Émettre un événement, c’est l’enregistrer.

Une blockchain est le registre partagé des transactions, conservé dans l’ordre. Une transaction est une requête qu’un utilisateur envoie à une blockchain, par exemple une demande de déplacement d’un jeton. Une adresse est un identifiant sur une blockchain, pour un utilisateur ou pour un smart contract.

Que définit la norme ERC-721 ?

La norme ERC-721 définit une interface : les fonctions qu’un contrat doit fournir et les événements qu’il doit émettre. Un logiciel peut alors appeler de la même manière tous les contrats qui respectent ERC-721.

ERC-721 exige également la détection d’interface via ERC-165, une norme qui permet à un contrat d’indiquer quelles interfaces il prend en charge.

ERC-721 décrit deux extensions optionnelles. L’extension de métadonnées ajoute des fonctions qui renvoient un nom et un symbole pour les jetons d’un contrat, ainsi qu’un lien pour chaque identifiant de jeton, tandis qu’une extension d’énumération ajoute des fonctions qui listent les jetons suivis par un contrat.

ERC-721 est une norme de NFT parmi d’autres, écrite pour Ethereum. D’autres blockchains et d’autres normes peuvent fonctionner différemment d’ERC-721.

Un contrat qui respecte ERC-721 distingue ses jetons par un identifiant de jeton, un nombre que le contrat attribue à chaque jeton. L’adresse du contrat qui suit les jetons, associée à un identifiant de jeton, identifie un jeton unique, et ERC-721 exige qu’un identifiant de jeton reste le même aussi longtemps que le contrat existe.

ERC-721 vs ERC-20 : quelles différences entre les deux normes ?

ERC-721 et ERC-20 diffèrent sur ce que suit un contrat, sur ce que désigne un transfert, et sur ce que couvre une approbation. ERC-20 est une norme pour les jetons fongibles, c’est-à-dire des jetons dont les unités sont interchangeables, une unité valant une autre. ERC-721 est une norme pour les jetons non fongibles, qu’un contrat distingue par identifiant de jeton, de sorte qu’échanger deux d’entre eux n’est pas un échange d’éléments identiques.

  • Un contrat ERC-20 enregistre combien d’unités chaque adresse détient, tandis qu’un contrat ERC-721 enregistre quelle adresse contrôle chaque identifiant de jeton.
  • Un transfert ERC-20 désigne une quantité de jetons, tandis qu’un transfert ERC-721 désigne un identifiant de jeton.
  • Une approbation ERC-20 couvre une quantité qu’une autre adresse peut transférer, tandis qu’une approbation ERC-721 couvre soit un seul identifiant de jeton, soit, lorsqu’elle désigne un opérateur, tous les jetons qu’une adresse contrôle dans le même contrat. Un opérateur est une adresse que l’adresse contrôlant les jetons a autorisée à les transférer tous.

Quelles fonctions et quels événements ERC-721 définit-elle ?

Ce tableau liste, par nom, les fonctions et les événements qu’ERC-721 définit, ainsi que la fonction de détection d’interface issue d’ERC-165, et précise le rôle de chacun.

Nom

Type

Rôle

balanceOf

fonction

Renvoie combien de jetons une adresse contrôle.

ownerOf

fonction

Renvoie l’adresse qui contrôle un identifiant de jeton.

transferFrom

fonction

Déplace un identifiant de jeton d’une adresse à une autre.

safeTransferFrom

fonction

Déplace un identifiant de jeton d’une adresse à une autre et effectue également une vérification du destinataire lorsque l’adresse réceptrice est un smart contract.

approve

fonction

Permet à une adresse désignée de transférer un identifiant de jeton.

getApproved

fonction

Renvoie l’adresse approuvée pour transférer un identifiant de jeton.

setApprovalForAll

fonction

Permet à une adresse d’activer ou de désactiver un opérateur pour tous ses jetons dans le même contrat.

isApprovedForAll

fonction

Indique si une adresse est opérateur pour une autre adresse.

supportsInterface

fonction, issue d’ERC-165

Indique si un contrat prend en charge une interface donnée.

Transfer

événement

Annonce que l’adresse qui contrôle un jeton a changé.

Approval

événement

Annonce que l’adresse approuvée pour un identifiant de jeton a été modifiée ou réaffirmée.

ApprovalForAll

événement

Annonce qu’un opérateur a été activé ou désactivé.

Quelle fonction vérifie le contrat destinataire ?

La fonction safeTransferFrom effectue une vérification du destinataire après avoir déplacé un jeton. Lorsque l’adresse réceptrice est un smart contract, le contrat ERC-721 appelle sur celui-ci une fonction nommée onERC721Received, la fonction de réception. Le contrat destinataire fournit cette fonction de réception, qui renvoie une réponse précise définie par ERC-721 et qui indique au contrat ERC-721 que le contrat destinataire accepte le transfert. Si le contrat destinataire renvoie autre chose, la transaction est annulée, ce qu’ERC-721 appelle un revert.

La fonction transferFrom n’appelle pas de fonction de réception. ERC-721 laisse à l’appelant, c’est-à-dire à celui qui envoie la transaction appelant la fonction, le soin de vérifier que l’adresse réceptrice peut recevoir des jetons. Un jeton envoyé à un contrat qui ne fournit pas la fonction de réception peut être perdu.

Comment fonctionnent les approbations et les opérateurs ?

Une approbation permet à une autre adresse de transférer un jeton. La fonction approve désigne une seule adresse pour un seul identifiant de jeton, et getApproved renvoie cette adresse. ERC-721 précise que l’adresse approuvée est réinitialisée à néant lorsque le jeton est transféré.

Un opérateur est une adresse autorisée, via setApprovalForAll, à transférer tous les jetons qu’une autre adresse contrôle dans le même contrat. ERC-721 exige qu’un contrat autorise plusieurs opérateurs pour chaque adresse qui contrôle des jetons, et isApprovedForAll indique si une adresse est opérateur pour une autre adresse.

Selon ERC-721, un transfert peut être demandé par l’adresse qui contrôle le jeton, par un opérateur de cette adresse, ou par l’adresse approuvée pour cet identifiant de jeton.

Que fournit l’extension optionnelle de métadonnées ?

L’extension optionnelle de métadonnées d’ERC-721 ajoute trois fonctions à un contrat : name, symbol et tokenURI. Les métadonnées sont des données qui décrivent les jetons, et ces trois fonctions les renvoient.

La fonction name renvoie un nom pour les jetons qu’un contrat suit, et symbol en renvoie une forme abrégée.

La fonction tokenURI renvoie un URI pour un identifiant de jeton donné. Un URI, abréviation d’uniform resource identifier, est un lien. Un contrat qui n’inclut pas cette extension n’a pas d’URI.

ERC-721 précise que l’URI renvoyé par tokenURI peut pointer vers un fichier JSON, un format texte pour les données structurées. Ce fichier peut contenir des champs de nom, de description et d’image.

ERC-721 permet à un contrat de modifier l’URI qu’il renvoie pour un identifiant de jeton, de sorte que le même identifiant puisse ensuite pointer vers un fichier différent. ERC-721 ne précise pas où est stocké le fichier vers lequel pointe l’URI.

Que laisse ERC-721 à la discrétion de chaque contrat ?

En octobre 2026, ERC-721 ne définit ni le contenu d’un jeton, ni les droits qui lui sont associés, ni l’endroit où sont stockés les fichiers d’un jeton, ni la manière dont les jetons sont créés ou détruits, ni le statut juridique d’un jeton. L’entrée du glossaire Jeton non fongible (NFT) explique ce que l’enregistrement d’un jeton, c’est-à-dire les informations qu’un contrat conserve sur chaque jeton, ne couvre pas.

Les contrats qui respectent ERC-721 peuvent malgré tout se comporter différemment. ERC-721 liste les cas dans lesquels un transfert doit échouer, et permet à un contrat d’annuler un transfert dans d’autres cas, par exemple lorsque les transferts sont suspendus. Un contrat peut donc refuser un transfert pour des raisons qu’ERC-721 ne liste pas.

5 janvier 2026

Actualités GoMining

Vous pourriez être intéressé par :