Une introduction aux tokens ERC-20
Accueil
Articles
Une introduction aux tokens ERC-20

Une introduction aux tokens ERC-20

Intermédiaire
Publié le Jul 31, 2020Mis à jour le Dec 28, 2022
12m

Table des matiĂšres


Introduction

Ethereum a été fondé par Vitalik Buterin en 2014, se positionnant comme une plateforme open-source pour le lancement d'applications décentralisées (DApps). La motivation de Buterin pour créer une nouvelle blockchain repose sur le manque de flexibilité du 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 smart contracts et des applications distribuées.
Dans cet article, nous allons examiner la norme ERC-20, un cadre important pour la création de tokens. Bien qu'il soit spécifique au réseau Ethereum, le cadre a également inspiré d'autres normes de blockchain, comme celle de la Binance Chain, BEP-2.


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

Sur Ethereum, un ERC est une Ethereum Request for Comments. Il s'agit de documents techniques qui dĂ©finissent 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 entre les applications et les contrats.

Défini par Vitalik Buterin et Fabian Vogelsteller en 2015, ERC-20 propose un format relativement simple pour les tokens basés sur Ethereum. En suivant son schéma, les développeurs n'ont pas besoin de réinventer la roue. Au lieu de cela, ils peuvent construire sur une fondation déjà utilisée dans le secteur.

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, exchanges, etc.).

Il convient de noter que la norme ERC-20 a Ă©tĂ© dĂ©veloppĂ©e par un EIP (en particulier, l'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 bref rappel sur les tokens Ethereum

Contrairement à l'ETH (la cryptomonnaie native d'Ethereum), les tokens ERC-20 ne sont pas détenus par des comptes. Les tokens n'existent que dans un contrat, qui est comme une base de données autonome. Il spécifie les rÚgles des tokens (nom, symbole, divisibilité) et conserve une liste qui associe les soldes des utilisateurs à leurs adresses Ethereum.

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



Son appel est contenu dans ce qui semble ĂȘtre une transaction Ethereum rĂ©guliĂšre qui paie 0 ETH au contrat du token. L'appel est inclus dans un champ supplĂ©mentaire de la transaction, qui spĂ©cifie ce qu'Alice souhaite faire. Dans notre cas, transfĂ©rer des tokens vers Bob.

MĂȘme si elle n'envoie pas d'ethers, elle doit toujours payer des frais 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 fait un appel au contrat BUSD. Vous pouvez voir que des tokens 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 comprenons les bases, regardons sous le capot pour mieux comprendre la structure d'un contrat ERC-20 typique.


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



Pour ĂȘtre conforme Ă  la norme ERC-20, votre contrat doit inclure six fonctions obligatoires :  totalSupply,  balanceOf, transfer, transferFrom, approve et allowance. En outre, vous pouvez spĂ©cifier des fonctions facultatives, telles que name, symbol et decimal. Les noms de ces fonctions vous indiquent peut-ĂȘtre clairement ce qu'elles font. Si ce n'est pas le cas, ne vous inquiĂ©tez pas, nous allons l'expliquer ci-dessous.

Voici les fonctions telles qu'elles apparaissent dans le langage Solidity spécialement conçu pour Ethereum.


totalSupply

function totalSupply() public view returns (uint256)
Lorsqu'elle est appelée par un utilisateur, la fonction ci-dessus renvoie l'offre totale de tokens que le contrat détient.


balanceOf 

function balanceOf(address _owner) public view returns (uint256 balance)
Contrairement à totalSupply, balanceOf prend un paramÚtre (une adresse). Lorsqu'elle est appelée, elle renvoie le solde des tokens détenus par cette adresse. Rappelez-vous que les comptes sur le réseau Ethereum sont publics, vous pouvez donc interroger le solde de n'importe quel utilisateur à condition de connaßtre son adresse.


transfer

function transfer(address _to, uint256 _value) public returns (bool success)
transfer transfÚre les tokens d'un utilisateur à un autre. Ici, vous indiquez l'adresse à laquelle vous souhaitez envoyer l'argent et le montant à transférer.
Lorsqu'elle est appelée, transfer déclenche quelque chose appelé un événement (l'événement transfert, dans ce cas), qui indique essentiellement à la blockchain d'y inclure une référence.


transferFrom

function transferFrom(address _from, address _to, uint256 _value) public returns (bool success)
La fonction transferFrom est une alternative pratique à transfer qui permet un peu plus de programmabilité dans les applications décentralisées. Comme transfer, elle est utilisée pour déplacer des tokens, mais ces derniers ne doivent pas nécessairement appartenir à la personne qui appelle le contrat.

En d'autres termes, vous pouvez autoriser une personne, ou un autre contrat, Ă  transfĂ©rer des fonds en votre nom. Un cas d'utilisation possible implique le paiement de services par abonnement, oĂč vous ne souhaitez pas envoyer manuellement de paiement tous les jours/semaines/mois. Au lieu de cela, vous laissez un programme le faire pour vous.

Cette fonction dĂ©clenche le mĂȘme Ă©vĂ©nement que transfer.


approve

function approve(address _spender, uint256 _value) public returns (bool success)
approve est une autre fonction utile du point de vue de la programmabilité. Grùce à cette fonction, vous pouvez limiter le nombre de tokens qu'un smart contract peut retirer de votre solde. Sans elle, le contrat peut dysfonctionner (ou devenir malicieux) et cela peut entraßner la perte de tous vos fonds.
Reprenons notre exemple de modĂšle d'abonnement. Supposons que vous disposez d'une grande quantitĂ© de BinanceAcademyTokens et que vous souhaitez configurer des paiements hebdomadaires rĂ©currents pour une DApp de streaming. Vous ĂȘtes occupĂ© Ă  lire jour et nuit le contenu de Binance Academy. Vous n'avez donc pas envie de prendre le temps, chaque semaine, de crĂ©er une transaction manuellement.
Vous avez un énorme solde de BinanceAcademyTokens, bien au-delà de ce qui est nécessaire pour payer l'abonnement. Pour éviter que le DApp ne les draine tous, vous pouvez fixer une limite avec approve. Supposons que votre abonnement coûte un BinanceAcademyToken par semaine. Si vous plafonnez la valeur approuvée à vingt tokens, vous pourriez alors faire payer votre abonnement automatiquement pendant cinq mois.

Au pire, si la DApp tente de retirer tous vos fonds ou si un bug est dĂ©couvert, vous ne pouvez perdre que vingt tokens. Ce n'est peut-ĂȘtre pas la solution idĂ©ale, mais c'est certainement plus attrayant que de perdre tous vos fonds.

Lorsqu'elle est appelé, approve déclenche l'événement approval. Comme l'événement transfer, il écrit des données dans la blockchain.


allowance

function allowance(address _owner, address _spender) public view returns (uint256 remaining)
allowance peut ĂȘtre utilisĂ©e en conjonction avec approve. Lorsque vous avez accordĂ© une autorisation de contrat pour gĂ©rer vos tokens, vous pouvez l'utiliser pour vĂ©rifier combien il peut encore se retirer. Par exemple, si votre abonnement a consommĂ© douze de vos vingt tokens approuvĂ©s, l'appel de la fonction allowance devrait renvoyer un total de huit.


Les fonctions facultatives

Les fonctions prĂ©sentĂ©es prĂ©cĂ©demment sont obligatoires. Mais les fonctions, name, symbol et decimal n'ont pas besoin d'ĂȘtre incluses, mais elles peuvent rendre votre contrat ERC-20 un peu plus joli. Respectivement, elles vous permettent d'ajouter un nom lisible par l'homme, de dĂ©finir un symbole (par exemple, ETH, BTC, BNB) et de spĂ©cifier le nombre de dĂ©cimales auxquelles les tokens sont divisibles. Par exemple, les tokens utilisĂ©s comme devises peuvent ĂȘtre plus divisibles qu'un tokens qui reprĂ©sente la propriĂ©tĂ© d'un bien.


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


Que peuvent faire les tokens ERC-20 ?



En rassemblant toutes les fonctions ci-dessus, nous obtenons un contrat ERC-20. Nous pouvons interroger l'offre totale, vérifier les soldes, transférer des fonds et donner des autorisations à d'autres DApps pour gérer les tokens.

Une grande partie de l'attrait des tokens ERC-20 rĂ©side dans leur flexibilitĂ©. Les conventions dĂ©finies ne limitent pas le dĂ©veloppement, de sorte que les parties peuvent mettre en Ɠuvre des fonctionnalitĂ©s supplĂ©mentaires et dĂ©finir des paramĂštres spĂ©cifiques pour rĂ©pondre Ă  leurs besoins.


Stablecoins

Les stablecoins (les tokens liés à des devises fiat) utilisent souvent la norme de token ERC-20. La transaction du contrat BUSD que nous avons mentionnée précédemment est un exemple, et la plupart des principales stablecoins sont également disponibles dans ce format.

Pour un stablecoin classique soutenue par du fiat, un émetteur détient des réserves d'euros, de dollars, etc. Ensuite, pour chaque unité en réserve, ils émettent un token. Cela signifie que si 10 000 $ étaient bloqués dans un coffre-fort, l'émetteur pourrait créer 10 000 tokens, chacun échangeable contre 1 $.

C'est assez facile Ă  mettre en Ɠuvre sur Ethereum, techniquement parlant. Un Ă©metteur lance simplement un contrat avec 10 000 tokens. Ensuite, il les distribue aux utilisateurs en leur promettant qu'ils pourront plus tard Ă©changer les tokens contre un montant proportionnel de monnaie fiduciaire.

Les utilisateurs peuvent faire un certain nombre de choses avec leurs tokens : ils peuvent acheter des biens et des services ou les utiliser dans des DApps. Ils peuvent aussi demander à l'émetteur de les échanger immédiatement. Dans ce cas, l'émetteur brûle les tokens retournés (ce qui les rend inutilisables) et retire le montant correspondant de fiat de ses réserves.

Le contrat qui régit ce systÚme, comme mentionné précédemment, est relativement simple. Cependant, le lancement d'un stablecoin nécessite beaucoup de travail sur des facteurs externes tels que la logistique, la conformité réglementaire, etc.


Tokens financiers

Les tokens financiers sont similaires aux stablecoins. Au niveau du contrat, les deux pourraient mĂȘme ĂȘtre identiques car ils fonctionnent de la mĂȘme maniĂšre. La distinction se produit au niveau de l'Ă©metteur. Les tokens financiers 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 reprĂ©sentant la participation du titulaire dans une entreprise ou un bien.


Tokens utilitaires

Les tokens utilitaires sont peut-ĂȘtre les types de tokens les plus courants d'aujourd'hui. Contrairement aux deux types prĂ©cĂ©dents, ils ne sont pas adossĂ©s Ă  un autre actif. Si les tokens adossĂ©s Ă  des actifs sont comme des actions d'une compagnie aĂ©rienne, les tokens utilitaires sont comme des programmes de fidĂ©litĂ© : ils remplissent une fonction, mais n'ont pas de valeur externe. Les tokens utilitaires peuvent rĂ©pondre Ă  une myriade de cas d'utilisation, servant de monnaie de jeu, de carburant pour les applications dĂ©centralisĂ©es, de points de fidĂ©litĂ©, et bien plus encore.



Pouvez-vous miner des tokens ERC-20 ?

Vous pouvez miner de l'Ether (ETH), mais les tokens ne sont pas minables, nous disons qu'ils sont émis lorsque de nouveaux tokens sont créés. Lorsqu'un contrat est lancé, les développeurs distribuent l'offre en fonction de leurs plans et de leur feuille de route.
Cela se fait généralement via une offre initiale de piÚces (ICO), une offre initiale d'exchange (IEO) ou une offre de tokens financiers (STO). Vous pouvez rencontrer des variations de ces acronymes, mais ces concepts sont assez similaires. Les investisseurs envoient des éthers à l'adresse du contrat et, en retour, reçoivent de nouveaux tokens. L'argent collecté est utilisé pour financer la poursuite du développement du projet. Les utilisateurs s'attendent à pouvoir utiliser leurs tokens (immédiatement ou à une date ultérieure) ou les revendre pour un bénéfice au fur et à mesure que le projet se développe.

La distribution des tokens n'a pas besoin d'ĂȘtre automatisĂ©e. De nombreux Ă©vĂ©nements de financement participatif permettent aux utilisateurs de payer dans diffĂ©rentes devises numĂ©riques (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 tokens ERC-20

Avantages des tokens ERC-20

Fongible

Les tokens ERC-20 sont fongibles, chaque unité est interchangeable avec une autre. Si vous détenez un BinanceAcademyToken, le token spécifique que vous possédez n'a pas d'importance. Vous pourriez l'échanger contre celui de quelqu'un d'autre, et ils seraient toujours identiques, comme du liquide ou de l'or.

C'est l'idéal si votre token vise à devenir une sorte de monnaie. Vous ne voudriez pas des unités individuelles avec des traits distinctifs, ce qui les rendrait non fongibles. Ainsi, certains tokens pourraient avoir plus ou moins de valeur que d'autres, ce qui nuirait à leur utilité.


Flexibilité

Comme nous l'avons vu dans la section prĂ©cĂ©dente, les tokens ERC-20 sont hautement personnalisables et peuvent ĂȘtre adaptĂ©s Ă  de nombreuses applications diffĂ©rentes. Par exemple, ils peuvent ĂȘtre utilisĂ©s comme monnaie en jeu, dans des programmes de fidĂ©litĂ©, comme objets de collection numĂ©riques, ou mĂȘme pour reprĂ©senter des droits de propriĂ©tĂ© et des oeuvres d'art.


Populaire

La popularité de l'ERC-20 dans le secteur des cryptomonnaies est une raison trÚs convaincante de l'utiliser comme modÚle. Il existe une pléthore d'exchanges, de portefeuilles et de smart contracts déjà compatibles avec les tokens récemment lancés. De plus, le support des développeurs et la documentation sont nombreux.


Inconvénients des tokens ERC-20

Scalabilité

Comme pour de nombreux rĂ©seaux de cryptomonnaies, Ethereum n'est pas Ă  l'abri des difficultĂ©s croissantes. Dans sa forme actuelle, il n'est pas trĂšs scalable : essayer d'envoyer une transaction aux heures de pointe entraĂźne des frais Ă©levĂ©s et des dĂ©lais. Si vous lancez un token ERC-20 et que le rĂ©seau est encombrĂ©, son utilisation peut en ĂȘtre affectĂ©e.

Ce n'est pas un problĂšme exclusif Ă  Ethereum. Il s'agit plutĂŽt d'un compromis nĂ©cessaire pour tous 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 comme Ethereum Plasma et Ethereum Casper.
Pour en savoir plus sur les problĂšmes de scalabilitĂ©, consultez ÉvolutivitĂ© de la blockchain : Sidechains et passerelles de paiement.


Les escroqueries

Bien qu'il ne s'agisse pas d'un problĂšme avec la technologie elle-mĂȘme, la facilitĂ© avec laquelle un token peut ĂȘtre lancĂ© peut ĂȘtre considĂ©rĂ©e comme un inconvĂ©nient Ă  certains Ă©gards. Il suffit d'un effort trĂšs faible pour crĂ©er un token ERC-20 simple, ce qui signifie que n'importe qui pourrait le faire, que ce soit Ă  bon ou Ă  mauvais escient.

Vous devez donc faire attention à ce dans quoi vous investissez. Il existe un certain nombre de systÚmes pyramidaux et de Ponzi déguisés en projets blockchain. Faites vos propres recherches avant d'investir afin de vous faire vos propres idées sur la légitimité d'une opportunité.

 

ERC-20, ERC-1155, ERC-223, ERC-721, quelle sont les différences ?

ERC-20 a Ă©tĂ© la premiĂšre norme de token Ethereum (et, Ă  ce jour, la plus populaire), mais elle est loin d'ĂȘtre la seule. Au fil des ans, beaucoup d'autres ont Ă©mergĂ©, soit en proposant des amĂ©liorations sur l'ERC-20, soit en essayant d'atteindre des objectifs diffĂ©rents.

Certaines des normes les moins courantes sont celles utilisĂ©es dans les tokens non fongibles (NFT). Parfois, il est avantageux pour votre cas d'usage de disposer de tokens uniques avec des attributs diffĂ©rents. Si vous souhaitez symboliser une Ɠuvre d'art unique, un actif dans un jeu, etc., l'un de ces types de contrat pourrait ĂȘtre plus intĂ©ressant.
La norme ERC-721, par exemple, a été utilisée pour l'immensément populaire DApp CryptoKitties. Un tel contrat fournit une API permettant aux utilisateurs d'émettre leurs propres tokens non fongibles et d'encoder des métadonnées (images, descriptions, etc.).

La norme ERC-1155 peut ĂȘtre considĂ©rĂ©e comme une amĂ©lioration des normes ERC-721 et ERC-20. Elle prĂ©sente une norme qui prend en charge les tokens fongibles et non fongibles dans le mĂȘme contrat.

D'autres options comme ERC-223 ou ERC-621 visent Ă  amĂ©liorer la convivialitĂ©. La premiĂšre met en Ɠuvre des mesures de protection pour Ă©viter les transferts accidentels de tokens. La seconde ajoute des fonctions supplĂ©mentaires pour augmenter et diminuer l'offre de tokens.

Pour en savoir plus sur les NFT, consultez le site Un guide des objets de collection crypto et des tokens non fongibles (NFT) .


Pour conclure

Depuis des annĂ©es, la norme ERC-20 domine l'espace des crypto-actifs, et il n'est pas difficile de comprendre pourquoi. Avec une relative facilitĂ©, n'importe qui peut dĂ©ployer un contrat simple pour s'adapter Ă  un large Ă©ventail de cas d'usage (tokens utilitaires, stablecoins, etc.). Cela dit, l'ERC-20 n'a pas certaines des fonctionnalitĂ©s mises en Ɠuvre par d'autres normes. Il reste Ă  voir si des types de contrats ultĂ©rieurs seront mis en place.