Introduction

Ethereum a été fondée par Vitalik Buterin en 2014, se positionnant comme une plateforme open source de lancement d'applications décentralisées (DApps). Une grande partie des motivations de Buterin pour créer une nouvelle blockchain provenaient du manque de flexibilité du protocole Bitcoin.

Depuis son lancement, la blockchain Ethereum a attiré des développeurs, des entreprises et des entrepreneurs, donnant naissance à une industrie croissante d'utilisateurs lançant des contrats intelligents et des applications distribuées.

Dans cet article, nous examinerons la norme ERC-20, un cadre important pour la création de jetons. Bien qu’il soit spécifique au réseau Ethereum, le cadre a également inspiré d’autres normes de blockchain, telles que le BEP-2 de Binance Chain.


Qu'est-ce que la norme ERC-20 ?

Dans Ethereum, un ERC est une demande de commentaires Ethereum. Il s’agit de documents techniques qui décrivent les normes de programmation sur Ethereum. Il ne faut pas les confondre avec les propositions d’amélioration d’Ethereum (EIP), qui, comme les BIP de Bitcoin, suggèrent des améliorations au protocole lui-même. Les ERC visent plutôt à établir des conventions qui facilitent l’interaction des candidatures et des contrats.

Rédigé par Vitalik Buterin et Fabian Vogelsteller en 2015, ERC-20 propose un format relativement simple pour les jetons basés sur Ethereum. En suivant le schéma, les développeurs n’ont pas besoin de réinventer la roue. Au lieu de cela, ils peuvent s’appuyer sur une base déjà utilisée dans l’ensemble de l’industrie.

Une fois les nouveaux tokens ERC-20 créés, ils sont automatiquement interopérables avec les services et logiciels prenant en charge la norme ERC-20 (portefeuilles logiciels, portefeuilles matériels, échanges, etc.).

Il convient de noter que la norme ERC-20 a été développée en un EIP (plus précisément, EIP-20). Cela s'est produit quelques années après la proposition initiale en raison de son utilisation généralisée. Cependant, même des années plus tard, le nom « ERC-20 » est resté.


Un petit récapitulatif sur les jetons Ethereum

Contrairement à l’ETH (la crypto-monnaie native d’Ethereum), les jetons ERC-20 ne sont pas détenus par des comptes. Les jetons n'existent que dans un contrat, qui ressemble à une base de données autonome. Il spécifie les règles relatives aux jetons (c'est-à-dire le nom, le symbole, la divisibilité) et conserve une liste qui mappe les soldes des utilisateurs à leurs adresses Ethereum.

Pour déplacer des jetons, les utilisateurs doivent envoyer une transaction au contrat lui demandant d'allouer une partie de leur solde ailleurs. Par exemple, si Alice souhaite envoyer 5 000 BinanceAcademyTokens à Bob, elle appelle une fonction dans le contrat intelligent BinanceAcademyToken pour lui demander de le faire.


Users interacting with a smart contract


Son appel est contenu dans ce qui semble être une transaction Ethereum régulière qui paie 0 ETH au contrat de jeton. L'appel est inclus dans un champ supplémentaire de la transaction, qui précise ce qu'Alice veut faire : dans notre cas, transférer des jetons à Bob.

Même si elle n’envoie pas d’éther, elle doit quand même payer des frais qui y sont libellés pour que sa transaction soit incluse dans un bloc. Si elle n’a pas d’ETH, elle doit en obtenir avant de transférer les tokens.

Voici un exemple concret de ce qui précède sur Etherscan : quelqu'un appelle le contrat BUSD. Vous pouvez voir que les jetons ont été transférés et que des frais ont été payés, même si le champ Valeur indique que 0 ETH a été envoyé.

Maintenant que nous sommes au courant, jetons un coup d’œil sous le capot pour mieux comprendre la structure d’un contrat ERC-20 typique. 


Comment les jetons ERC-20 sont-ils créés ?


Illustration of an ERC-20 token being created


Pour être conforme à l'ERC-20, votre contrat doit inclure six fonctions obligatoires : totalSupply, balanceOf, transfer, transferFrom, approuve et allocation. De plus, vous pouvez spécifier des fonctions facultatives, telles que le nom, le symbole et la décimale. Vous comprendrez peut-être clairement ce que font ces fonctions à partir de leurs noms. Si ce n’est pas le cas, ne vous inquiétez pas, nous les détaillerons. 

Vous trouverez ci-dessous les fonctions telles qu’elles apparaissent dans le langage Solidity spécialement conçu pour Ethereum.


approvisionnement total

la fonction totalSupply() renvoie la vue publique (uint256)

Lorsqu'elle est appelée par un utilisateur, la fonction ci-dessus renvoie l'offre totale de jetons détenus par le contrat.


équilibre des 

la fonction balanceOf (adresse _propriétaire) renvoie la vue publique (solde uint256)

Contrairement à totalSupply, balanceOf prend un paramètre (une adresse). Lorsqu’il est appelé, il renvoie le solde des jetons de cette adresse. N’oubliez pas que les comptes sur le réseau Ethereum sont publics, vous pouvez donc consulter le solde de n’importe quel utilisateur à condition d’en connaître l’adresse.


transfert

transfert de fonction (adresse _to, uint256 _value) retours publics (succès booléen)

transfer transfère correctement les jetons d’un utilisateur à un autre. Ici, vous indiquez l'adresse à laquelle vous souhaitez envoyer et le montant à transférer.

Lorsqu'il est appelé, le transfert déclenche quelque chose appelé un événement (transfert d'événement, dans ce cas), qui indique essentiellement à la blockchain d'y inclure une référence.


transfert à partir de

fonction transferFrom (adresse _from, adresse _to, uint256 _value) retours publics (succès booléen)

La fonction transferFrom est une alternative pratique au transfert qui permet un peu plus de programmabilité dans les applications décentralisées. Comme le transfert, il est utilisé pour déplacer des jetons, mais ces jetons ne doivent pas nécessairement appartenir à la personne qui appelle le contrat. 

En d'autres termes, vous pouvez autoriser quelqu'un – ou un autre contrat – à transférer des fonds en votre nom. Un cas d’utilisation possible consiste à payer pour des services par abonnement, pour lesquels vous ne souhaitez pas envoyer manuellement un paiement chaque jour/semaine/mois. Au lieu de cela, vous laissez simplement un programme le faire à votre place.

Cette fonction déclenche le même événement que le transfert.


approuver

fonction approuver (adresse _spender, uint256 _value) retours publics (succès booléen)

approuver est une autre fonction utile du point de vue de la programmabilité. Avec cette fonction, vous pouvez limiter le nombre de tokens qu'un contrat intelligent peut retirer de votre solde. Sans cela, vous courez le risque que le contrat fonctionne mal (ou soit exploité) et vous vole tous vos fonds. 

Reprenons notre exemple de modèle d’abonnement. Supposons que vous disposiez d’une énorme quantité de BinanceAcademyTokens et que vous souhaitiez configurer des paiements récurrents hebdomadaires vers une DApp en streaming. Vous êtes occupé à lire le contenu de la Binance Academy jour et nuit, vous ne voulez donc pas prendre le temps chaque semaine de créer une transaction manuellement.

Vous disposez d’un solde énorme de BinanceAcademyTokens, dépassant de loin ce qui est nécessaire pour payer l’abonnement. Pour empêcher le DApp de tous les vider, vous pouvez définir une limite avec approuver. Supposons que votre abonnement coûte un BinanceAcademyToken par semaine. Si vous plafonniez la valeur approuvée à vingt jetons, votre abonnement pourrait alors être payé automatiquement pendant cinq mois.

Au pire, si le DApp tente de retirer tous vos fonds ou si un bug est détecté, vous ne pouvez perdre qu'une vingtaine de tokens. Ce n’est peut-être pas idéal, mais c’est certainement plus attrayant que de perdre tous vos avoirs.

Lorsqu'elle est appelée, approuver déclenche l'événement d'approbation. Comme l’événement de transfert, il écrit des données dans la blockchain.


allocation 

allocation de fonction (adresse _owner, adresse _spender) vue publique renvoie (uint256 restant)

l'allocation peut être utilisée conjointement avec l'approbation. Lorsque vous avez donné une autorisation contractuelle pour gérer vos jetons, vous pouvez l'utiliser pour vérifier combien il peut encore en retirer. Par exemple, si votre abonnement a utilisé douze de vos vingt jetons approuvés, l’appel de la fonction d’allocation devrait en renvoyer un total de huit.


Les fonctions optionnelles

Les fonctions évoquées précédemment sont obligatoires. D'un autre côté, le nom, le symbole et la décimale n'ont pas besoin d'être inclus, mais ils peuvent rendre votre contrat ERC-20 un peu plus joli. Respectivement, ils vous permettent d'ajouter un nom lisible par l'homme, de définir un symbole (par exemple, ETH, BTC, BNB) et de spécifier en combien de décimales les jetons sont divisibles. Par exemple, les jetons utilisés comme monnaie peuvent bénéficier davantage du fait d'être plus divisibles qu'un jeton qui représente la propriété d'une propriété.


Consultez cet exemple sur GitHub pour voir ces éléments dans un vrai contrat.


Que peuvent faire les jetons ERC-20 ?


Illustration of various uses of ERC-20 tokens


En regroupant toutes les fonctions ci-dessus, nous avons un contrat ERC-20. Nous pouvons interroger l'offre totale, vérifier les soldes, transférer des fonds et autoriser d'autres DApp à gérer les jetons pour nous.

Une grande partie de l’attrait des jetons ERC-20 réside dans leur flexibilité. Les conventions énoncées ne restreignent pas le développement, les parties peuvent donc implémenter des fonctionnalités supplémentaires et définir des paramètres spécifiques en fonction de leurs besoins.


Pièces stables

Les Stablecoins (jetons liés aux monnaies fiduciaires) utilisent souvent la norme de jeton ERC-20. La transaction sur le contrat BUSD à laquelle nous avons fait référence plus tôt en est un exemple, et la plupart des principales pièces stables sont également disponibles dans ce format.

Pour un stablecoin typique adossé à un fiat, un émetteur détient des réserves d'euros, de dollars, etc. Ensuite, pour chaque unité de sa réserve, il émet un jeton. Cela signifie que si 10 000 $ étaient enfermés dans un coffre-fort, l'émetteur pourrait créer 10 000 jetons, chacun échangeable contre 1 $.

C’est assez facile à mettre en œuvre dans Ethereum, techniquement parlant. Un émetteur lance simplement un contrat avec 10 000 tokens. Ensuite, ils les distribueront aux utilisateurs avec la promesse qu’ils pourront ensuite les échanger contre un montant proportionnel de monnaie fiduciaire. 

Les utilisateurs peuvent faire un certain nombre de choses avec leurs jetons : ils peuvent acheter des biens et des services ou les utiliser dans des DApps. Ils pourraient également demander à l’émetteur de les échanger immédiatement. Dans ce cas, l’émetteur brûle les jetons restitués (les rendant inutilisables) et retire le montant correct de fiat de ses réserves.

Le contrat qui régit ce système, comme mentionné ci-dessus, est relativement simpliste. Cependant, lancer un stablecoin nécessite beaucoup de travail sur des facteurs externes tels que la logistique, la conformité réglementaire, etc.


Jetons de sécurité

Les jetons de sécurité sont similaires aux pièces stables. Au niveau contractuel, les deux pourraient même être identiques puisqu’ils fonctionnent de la même manière. La distinction se fait au niveau de l’émetteur. Les jetons de sécurité représentent des titres, tels que des actions, des obligations ou des actifs physiques. Souvent (même si ce n’est pas toujours le cas), ils accordent au détenteur une sorte de participation dans une entreprise ou un bien.


Jetons utilitaires

Les jetons utilitaires sont peut-être les types de jetons les plus courants que l’on trouve aujourd’hui. Contrairement aux deux offres précédentes, elles ne sont soutenues par rien. Si les jetons adossés à des actifs sont comme les actions d’une compagnie aérienne, alors les jetons utilitaires sont comme des programmes de fidélisation : ils remplissent une fonction, mais ils n’ont aucune valeur externe. Les jetons utilitaires peuvent répondre à une myriade de cas d’utilisation, servant de monnaie dans le jeu, de carburant pour des applications décentralisées, de points de fidélité et bien plus encore.


➠ Vous cherchez à vous lancer dans la crypto-monnaie ? Achetez de l'éther sur Binance !


Pouvez-vous extraire des jetons ERC-20 ?

Vous pouvez extraire de l’éther (ETH), mais les jetons ne peuvent pas être exploités – nous disons qu’ils sont émis lorsque de nouveaux sont créés. Lorsqu'un contrat est lancé, les développeurs répartissent l'offre selon leurs plans et leur feuille de route.

En règle générale, cela se fait via une offre initiale de pièces (ICO), une offre d'échange initiale (IEO) ou une offre de jetons de sécurité (STO). Vous rencontrerez peut-être des variantes de ces acronymes, mais ces concepts sont assez similaires. Les investisseurs envoient de l'éther à l'adresse du contrat et, en retour, reçoivent de nouveaux jetons. L'argent collecté est utilisé pour financer la poursuite du développement du projet. Les utilisateurs s'attendent à pouvoir utiliser leurs jetons (immédiatement ou ultérieurement) ou les revendre avec profit au fur et à mesure du développement du projet.

La distribution des jetons n'a pas besoin d'être automatisée. De nombreux événements de financement participatif permettent aux utilisateurs de payer avec une gamme de devises numériques différentes (telles que BNB, BTC, ETH et USDT). Les soldes respectifs sont ensuite attribués aux adresses fournies par les utilisateurs.


Avantages et inconvénients des jetons ERC-20

Avantages des jetons ERC-20

Fongible

Les jetons ERC-20 sont fongibles – chaque unité est interchangeable avec une autre. Si vous déteniez un BinanceAcademyToken, le jeton spécifique que vous possédez n'aurait pas d'importance. Vous pourriez l’échanger contre celui de quelqu’un d’autre, et ils seraient toujours fonctionnellement identiques, tout comme l’argent ou l’or.

C’est idéal si votre jeton vise à être une monnaie quelconque. Vous ne voudriez pas d’unités individuelles présentant des caractéristiques distinctives, ce qui les rendrait non fongibles. Cela pourrait amener certains jetons à devenir plus – ou moins - précieux que d’autres, compromettant ainsi leur objectif.


Flexible

Comme nous l'avons exploré dans la section précédente, les jetons ERC-20 sont hautement personnalisables et peuvent être adaptés à de nombreuses applications différentes. Par exemple, ils peuvent être utilisés comme monnaie de jeu, dans des programmes de points de fidélité, comme objets de collection numériques, ou même pour représenter des œuvres d'art et des droits de propriété.


Populaire

La popularité de l’ERC-20 dans le secteur des crypto-monnaies est une raison très impérieuse de l’utiliser comme modèle. Il existe une multitude d’échanges, de portefeuilles et de contrats intelligents déjà compatibles avec les jetons nouvellement lancés. De plus, le support et la documentation des développeurs sont abondants. 


Inconvénients des jetons ERC-20

Évolutivité

Comme pour de nombreux réseaux de crypto-monnaie, Ethereum n’est pas à l’abri des difficultés de croissance. Dans sa forme actuelle, il n’est pas bien évolutif : tenter d’envoyer une transaction aux heures de pointe entraîne des frais et des retards élevés. Si vous lancez un jeton ERC-20 et que le réseau est encombré, sa convivialité pourrait être affectée.

Ce n’est pas un problème exclusif à Ethereum. Il s'agit plutôt d'un compromis nécessaire dans les systèmes sécurisés et distribués. La communauté prévoit de résoudre ces problèmes lors de la migration vers Ethereum 2.0, qui mettra en œuvre des mises à niveau telles que Ethereum Plasma et Ethereum Casper.

Apprenez-en davantage sur les problèmes d’évolutivité dans Blockchain Scalability : Sidechains and Payment Channels.


Escroqueries

Bien que ce ne soit pas un problème lié à la technologie elle-même, la facilité avec laquelle un jeton peut être lancé pourrait être considérée comme un inconvénient à certains égards. La création d’un simple jeton ERC-20 demande un minimum d’efforts, ce qui signifie que n’importe qui peut le faire – pour le meilleur ou pour le pire.

En tant que tel, vous devez faire attention à ce dans quoi vous investissez. Il existe un certain nombre de systèmes Pyramide et Ponzi déguisés en projets blockchain.  Faites vos propres recherches avant d’investir pour tirer vos propres conclusions quant à la légitimité d’une opportunité.

 

ERC-20, ERC-1155, ERC-223, ERC-721 : quelle est la différence ?

ERC-20 a été la première norme de jeton Ethereum (et, à ce jour, la plus populaire), mais ce n’est en aucun cas la seule. Au fil des années, de nombreuses autres solutions ont vu le jour, proposant soit des améliorations à l'ERC-20, soit tentant d'atteindre des objectifs complètement différents.

Certaines des normes les moins courantes sont celles utilisées dans les jetons non fongibles (NFT). Parfois, votre cas d’utilisation bénéficie réellement du fait de disposer de jetons uniques avec des attributs différents. Si vous souhaitez symboliser une œuvre d'art unique, un actif de jeu, etc., l'un de ces types de contrat pourrait être plus attrayant.

La norme ERC-721, par exemple, a été utilisée pour le très populaire DApp CryptoKitties. Un tel contrat fournit une API permettant aux utilisateurs de créer leurs propres jetons non fongibles et d'encoder des métadonnées (images, descriptions, etc.). 

La norme ERC-1155 pourrait être considérée comme une amélioration par rapport à l'ERC-721 et à l'ERC-20. Il décrit une norme qui prend en charge les jetons fongibles et non fongibles dans le même contrat.

D'autres options comme ERC-223 ou ERC-621 visent à améliorer la convivialité. Le premier met en œuvre des garanties pour empêcher les transferts accidentels de jetons. Ce dernier ajoute des fonctions supplémentaires pour augmenter et diminuer l’offre de jetons.

Pour en savoir plus sur le sujet des NFT, n'oubliez pas de consulter le Guide des objets de collection cryptographiques et des jetons non fongibles (NFT).


Pensées finales

La norme ERC-20 domine le secteur des actifs cryptographiques depuis des années, et il n’est pas difficile de comprendre pourquoi. Avec une relative facilité, n’importe qui peut déployer un contrat simple pour répondre à un large éventail de cas d’utilisation (jetons utilitaires, pièces stables, etc.). Cela dit, l’ERC-20 ne dispose pas de certaines fonctionnalités apportées par d’autres normes. Il reste à voir si les types de contrats ultérieurs prendront sa place.