Qu’est-ce que la norme de jeton ERC-721 et comment fonctionne-t-elle sur la blockchain ?

Qu’est-ce que la norme de jeton ERC-721 et comment fonctionne-t-elle sur la blockchain ?

Qu’est-ce que la norme de jeton ERC-721 ?

ERC-721 est une norme Ethereum pour les NFT’s : des tokens uniques que l’on ne peut pas échanger un pour un comme s’ils étaient tous identiques. Chaque NFT possède son propre numéro, le tokenId. Ainsi, un contrat peut suivre précisément quelle adresse détient quel NFT.

On peut comparer cela à des cartes d’accès numérotées. Deux cartes peuvent toutes deux donner accès au même événement, mais la carte numéro 14 n’est techniquement pas la même carte que la numéro 15. Avec ERC-721, c’est la même logique : chaque token est enregistré séparément.

Un token ERC-721 est identifié par deux éléments réunis : l’adresse du smart contract et le tokenId. Cette combinaison désigne un token précis sur une chaîne Ethereum.

La norme fournit aux smart contracts un ensemble commun de règles. Ainsi, un wallet crypto, une place de marché ou une autre application peut reconnaître comment afficher, interroger et envoyer un NFT compatible. ERC-165 en fait aussi partie. Il s’agit d’un moyen pour les logiciels de vérifier quelle norme un contrat prend en charge.

Point important à retenir : un tokenId unique signifie seulement que le token est unique au sein de ce contrat. Cela ne prouve pas automatiquement que l’image associée, l’œuvre ou un objet physique est lui aussi réellement unique ou authentique.


À retenir

  • ERC-721 est une norme Ethereum pour des tokens uniques et non fongibles.
  • Chaque NFT possède son propre tokenId au sein d’un contrat.
  • L’adresse du contrat et le tokenId identifient ensemble un token précis.
  • La norme aide les wallets et les applications à reconnaître et traiter les NFT de manière uniforme.
  • Un tokenId unique ne prouve pas automatiquement que l’œuvre ou l’objet associé est authentique.

Comment fonctionne la norme de jeton ERC-721 ?

Un smart contract ERC-721 conserve pour chaque tokenId l’adresse blockchain qui en est le propriétaire actuel. Avec ownerOf(tokenId), vous pouvez interroger ce propriétaire. Avec balanceOf(adresse), vous voyez combien de NFT une adresse détient au total.

Lorsqu’une personne envoie un NFT, le contrat modifie le propriétaire enregistré. Pour ce type de transfert, on utilise notamment transferFrom et safeTransferFrom.

Cette deuxième option est généralement particulièrement importante lorsque vous envoyez un NFT vers un autre smart contract. safeTransferFrom vérifie alors si le contrat destinataire peut recevoir des tokens ERC-721. S’il ne le peut pas, la transaction est annulée. Cela évite qu’un NFT se retrouve bloqué par erreur dans un contrat qui ne peut rien en faire.

Un propriétaire peut aussi donner une autorisation à une autre adresse :

  • Avec approve, cette adresse peut déplacer un tokenId spécifique.
  • Avec setApprovalForAll, un opérateur reçoit l’autorisation de déplacer tous les tokens ERC-721 de ce propriétaire.

Cette dernière autorisation est donc assez large. N’accordez une telle permission qu’à un contrat en lequel vous avez confiance. Une autorisation pour un seul NFT expire dès que ce NFT est transféré.

Le contrat enregistre aussi les transferts et les autorisations dans des events : des notifications dans le journal public de la blockchain. Les applications peuvent ainsi suivre quand un NFT change de propriétaire ou quand un opérateur reçoit une autorisation.

ERC-721 ne définit pas la manière dont le minting ou le burning doivent fonctionner. Le minting consiste à créer et émettre un nouveau token, tandis que le burning retire définitivement un token de la circulation. Le créateur du contrat décide lui-même qui peut mint, combien de tokens peuvent exister et si les transferts peuvent, par exemple, être temporairement suspendus ou soumis à des frais.

À quoi servent les tokens ERC-721 ?

Les tokens ERC-721 servent pour des éléments que l’on souhaite suivre individuellement, car chaque token peut avoir ses propres caractéristiques ou sa propre fonction. Pensez à l’art numérique, aux objets de collection, aux éléments de jeu, aux billets d’événement, aux certificats, aux tokens d’accès et à l’identité en ligne.

Ils peuvent aussi servir à relier certains actifs physiques à un token (par exemple une maison). Mais il existe ici une différence importante : ERC-721 enregistre surtout qui gère le token sur la blockchain. Le fait que ce token donne aussi, en dehors de la blockchain, un droit sur un billet, un objet ou une autre revendication dépend du créateur, des metadata, des conditions du contrat et d’éventuels accords séparés.

Comme de nombreuses applications comprennent la même interface ERC-721, la plupart des usages peuvent en principe reconnaître et transférer un token. Cela rend la norme utile dans la crypto, sans que chaque application doive réexaminer le fonctionnement du contrat pour chaque collection de NFT. Il est donc aussi très facile pour les personnes de lancer elles-mêmes un projet NFT.

Quel rôle jouent les tokens ERC-721 dans les NFT ?

ERC-721 est une base technique largement utilisée pour les NFT sur Ethereum. La norme gère l’essentiel : identifier un NFT distinct, enregistrer le propriétaire, envoyer le NFT et gérer les autorisations.

NFT signifie simplement non-fungible token : un token qui n’est pas interchangeable comme une unité équivalente. ERC-721 n’est pas la même chose qu’un NFT. C’est une norme spécifique qui permet de construire des NFT. Un NFT peut donc aussi utiliser une autre norme technique.

Un contrat ERC-721 peut en outre contenir des règles supplémentaires. Par exemple des règles de minting, d’accès à certaines fonctions, de metadata ou de restrictions sur les transferts.

Les royalties ne sont pas intégrées par défaut dans ERC-721. ERC-2981 est une norme distincte qui permet d’interroger des informations sur les royalties. Cela ne signifie pas pour autant qu’une place de marché paiera automatiquement ces royalties : le paiement dépend de la place de marché ou d’une autre partie concernée.

Comment les droits de propriété numériques sont-ils enregistrés ?

Un contrat ERC-721 enregistre quelle adresse est propriétaire d’un tokenId donné. Tout le monde peut vérifier cet enregistrement technique de propriété via ownerOf et via les events Transfer du contrat. Tout est visible sur la blockchain, le propriétaire d’un NFT est donc presque toujours vérifiable ou consultable. Les smart contracts utilisés pour la collection NFT sont également consultables dans la plupart des cas.

Supposons que le tokenId 42 passe de l’adresse A à l’adresse B. L’adresse B devient alors le propriétaire enregistré du tokenId 42. L’adresse du contrat et le tokenId 42 restent entre-temps la même identification technique de ce token.

Le NFT peut également contenir des metadata : des informations supplémentaires sur le token. Via tokenURI, le contrat peut renvoyer vers, par exemple, un fichier JSON contenant un nom, une description et un lien vers une image.

Cette propriété on-chain n’est pas automatiquement la même chose que le droit d’auteur, la propriété intellectuelle ou la propriété juridique de l’image, de l’œuvre ou d’un objet physique. Détenir le NFT ne signifie donc pas automatiquement que vous obtenez tous les droits sur le contenu associé. Pour cela, un accord distinct et valide est généralement nécessaire.

Quelle est la différence entre ERC-721 et ERC-20 ?

ERC-20 est conçu pour des tokens fongibles, tandis qu’ERC-721 est conçu pour des tokens non fongibles. Fongible signifie que chaque unité est équivalente aux autres. Un token ERC-20 du même type est donc égal à un autre token ERC-20 de ce type.

Avec ERC-20, vous envoyez une quantité, par exemple 10 tokens. Avec ERC-721, vous envoyez un tokenId spécifique, par exemple le token numéro 42.

Les principales différences en résumé :

  • Transfert : ERC-20 repose sur un nombre de tokens. ERC-721 repose sur un tokenId unique.
  • Propriété : Avec ERC-20, une adresse possède un solde. Avec ERC-721, le contrat suit pour chaque tokenId qui en est le propriétaire.
  • Autorisation : ERC-20 utilise une allowance pour un montant dépensable. ERC-721 peut donner une autorisation pour un NFT ou pour tous les NFT d’un propriétaire.
  • Divisibilité : Les tokens ERC-20 peuvent être envoyés en quantités. Un token ERC-721 est techniquement un tokenId distinct et ne dispose pas d’une fonction decimals standard.
  • Quantité totale : ERC-20 dispose de totalSupply comme fonction standard. Avec ERC-721, totalSupply n’est disponible que si le contrat utilise l’extension optionnelle ERC721Enumerable.

Les metadata sont également optionnelles dans ERC-721. Un contrat n’est donc pas obligé de fournir un nom, un symbole ou tokenURI, même si la plupart des contrats NFT le font.

Comment créer un token ERC-721 ?

Vous créez un token ERC-721 en construisant un smart contract et en y ajoutant une logique de minting. ERC-721 ne fournit pas de fonction de mint publique prête à l’emploi, donc le développeur décide lui-même de la manière dont les nouveaux tokens apparaissent.

En pratique, cela se passe généralement ainsi :

  1. Construire ou utiliser un contrat ERC-721 Un développeur écrit un smart contract en Solidity qui prend en charge ERC-721 et ERC-165. Souvent, on étend une implémentation de base testée comme OpenZeppelin ERC721, plutôt que de tout écrire à partir de zéro.

  2. Définir les règles de minting Le contrat doit déterminer qui peut mint, comment les tokenIds sont attribués, s’il existe un nombre maximum de tokens et si le minting coûte de l’argent. Le contrôle d’accès fait aussi partie de cette étape : tout le monde n’a pas automatiquement le droit de créer de nouveaux NFT.

  3. Attribuer un nouveau tokenId Pour chaque nouveau NFT, le contrat doit utiliser un tokenId qui n’existe pas encore. Ce tokenId est attribué à une adresse valide, et non à une adresse vide.

  4. Utiliser, lorsque c’est possible, le minting safe _safeMint vérifie, lorsqu’un destinataire est lui-même un smart contract, si ce contrat peut recevoir des tokens ERC-721. Cela réduit le risque qu’un nouveau NFT se retrouve bloqué chez le destinataire.

  5. Déployer et exécuter des transactions Après le déploiement sur une chaîne EVM, le minting, les transferts et les autorisations sont exécutés sous forme de transactions blockchain. Les coûts et les risques dépendent de la chaîne choisie et surtout du code du contrat.

Copier un contrat ne suffit pas pour une utilisation sûre. Une logique supplémentaire pour les paiements, les whitelists, les mises à niveau ou les royalties peut introduire de nouvelles vulnérabilités. Les tests et, lorsque cela est pertinent, un audit de sécurité indépendant sont donc importants.

Quels éléments contient un smart contract ERC-721 ?

Un smart contract ERC-721 doit proposer un noyau fixe de fonctions et d’events. Cette interface standard permet aux autres applications de savoir comment interagir avec les NFT.

Les éléments obligatoires comprennent notamment :

  • balanceOf : interroge combien de NFT une adresse détient.
  • ownerOf : interroge quelle adresse est propriétaire d’un tokenId spécifique.
  • transferFrom et safeTransferFrom : envoient un NFT vers une autre adresse.
  • approve et getApproved : gèrent et vérifient l’autorisation pour un NFT spécifique.
  • setApprovalForAll et isApprovedForAll : gèrent et vérifient l’autorisation pour tous les NFT d’un propriétaire.
  • Transfer, Approval et ApprovalForAll : events permettant aux applications de suivre les transferts et les permissions.
  • supportsInterface : la fonction ERC-165 qui permet aux applications de vérifier que le contrat prend en charge ERC-721.

Il existe aussi des extensions optionnelles. ERC721Metadata ajoute name, symbol et tokenURI. ERC721Enumerable ajoute notamment totalSupply et des fonctions pour énumérer les tokenIds.

En outre, un contrat pratique comporte souvent ses propres fonctions, comme une fonction de mint, des rôles d’administrateur, des règles de vente, une base URI ou une fonction de burn. La manière dont le contrat stocke ses données en interne, par exemple les propriétaires et les autorisations, n’est pas imposée par ERC-721. La norme concerne ce que le contrat doit pouvoir faire vers l’extérieur.

Comment les metadata sont-elles liées à un token ERC-721 ?

Les metadata sont généralement liées via tokenURI(tokenId), une fonction optionnelle qui renvoie une référence vers des informations sur un NFT précis. Cette URI peut par exemple pointer vers un fichier JSON.

Dans un tel fichier JSON, on peut trouver des champs comme name, description et image. Une place de marché NFT ou un wallet crypto peut utiliser ces données pour afficher le nom, la description et l’image du token. Comme chaque NFT possède ses propres statistiques, on peut le voir comme une sorte de vignettes à collectionner. Certaines vignettes sont uniques et rares, tandis que d’autres sont courantes. C’est aussi ainsi que la valeur des NFT est généralement déterminée.

Un développeur peut stocker une URI distincte pour chaque NFT. Une autre option consiste à utiliser une base URI et à y ajouter pour chaque token un numéro ou une partie propre. OpenZeppelin propose notamment ERC721URIStorage avec _setTokenURI.

Point important à surveiller : ERC-721 n’oblige pas les metadata à être permanentes ou immuables. Une URI est une référence textuelle vers des données situées hors de la blockchain. Qui peut modifier l’URI et où le contenu est stocké dépend du contrat et de l’architecture de stockage. Une image ou un fichier JSON peut donc éventuellement changer ou ne plus être disponible.

Quels sont les avantages et les inconvénients d’ERC-721 ?

ERC-721 est utile parce qu’il offre une manière claire et commune de créer des tokens uniques sur Ethereum. Mais la norme ne résout pas tous les problèmes liés aux NFT.

Avantages :

  • Interopérabilité : les wallets, brokers, enchères et autres applications peuvent reconnaître et traiter les NFT ERC-721 de manière prévisible.
  • Traçabilité : pour chaque tokenId, on voit quelle adresse en est propriétaire et quels transferts ont eu lieu.
  • Autorisations flexibles : vous pouvez donner à une adresse l’autorisation pour un NFT, ou à un opérateur pour tous vos NFT.
  • Extensible : les metadata et l’énumération sont optionnelles. Un contrat peut donc rester léger ou recevoir des fonctions supplémentaires.

Inconvénients et risques :

  • Beaucoup de pouvoir avec setApprovalForAll : un opérateur approuvé peut déplacer tous les tokens ERC-721 de votre adresse. Vérifiez régulièrement ces autorisations et ne les accordez qu’à des contrats de confiance.
  • Risque avec transferFrom : un NFT peut se retrouver bloqué si le contrat destinataire ne peut pas le gérer. safeTransferFrom vérifie cela plus efficacement, mais l’appel externe supplémentaire peut créer un risque de reentrancy. Dans ce cas, un autre contrat tente d’appeler à nouveau une fonction pendant l’exécution.
  • Coûts plus élevés avec l’énumération : ERC721Enumerable est souvent peu utilisé, car l’énumération des tokens on-chain peut coûter beaucoup de gas supplémentaire.
  • Aucune garantie hors blockchain : ERC-721 ne prouve pas automatiquement le droit d’auteur, l’authenticité des revendications, la permanence des metadata ou un paiement obligatoire des royalties.

En bref : ERC-721 fournit une base technique pour la propriété et le transfert d’un NFT. La sécurité d’une collection et les droits exacts qui y sont liés dépendent du code du contrat, des droits d’administration, des metadata et des accords conclus hors de la blockchain.

En résumé

ERC-721 est la norme Ethereum qui donne aux NFT une identité propre. Un smart contract enregistre pour chaque tokenId qui en est le propriétaire, comment un NFT est transféré et qui dispose de l’autorisation nécessaire.

Cela rend ERC-721 utile notamment pour l’art numérique, les éléments de jeu, les billets et les tokens d’accès. En même temps, un NFT ne constitue pas automatiquement une preuve de droit d’auteur, d’authenticité ou de propriété juridique de ce qui lui est associé. Il faut donc regarder non seulement le NFT lui-même, mais aussi les règles du contrat, les metadata et les autorisations que vous accordez à un contrat.

A propos de Finst

Finst est l'une des principales plateformes de cryptomonnaies aux Pays-Bas. Elle propose des frais de trading ultra-compétitifs, une sécurité de niveau institutionnel et une offre complète de services crypto incluant le trading, la conservation, le staking ainsi que des solutions de fiat on/off ramp. Fondée par d’anciens cadres de DEGIRO, Finst est autorisée sous MiCAR en tant que prestataire de services sur crypto-actifs par l’Autorité néerlandaise des marchés financiers (AFM). La plateforme est disponible pour les investisseurs particuliers et institutionnels dans 30 pays européens.

La plateforme crypto pour tous les investisseurs

Que vous soyez un trader actif ou un investisseur de long terme, Finst vous offre les outils pour investir dans les crypto-actifs en toute simplicité

Inscription