Table des matières
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.
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.
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é.
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.
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.
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.
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 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.
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.
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.
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.