Le standard ERC20 pour les tokens d’Ethereum
ERC20 est une sorte de norme (un standard) utilisé pour définir un ensemble de règles communes pour les smart contracts d’Ethereum qui utilisent cette norme.
C’est le standard utilisé pour générer des tokens “fongibles” c’est-à-dire des tokens qui se ressemblent tous, par exemple les Bitcoin ou les Ethereum sont fongibles, les euros ou les dollars sont fongibles chaque dollar à la même valeur, c’est tout l’inverse d’un token non fongible (NFT) qui lui a une valeur unique comme une œuvre d’art unique
ERC20 c’est la norme qui a eu le plus de succès lors de la bulle ICO de 2017, car la quasi-intégralité des levées de fonds en crypto monnaies s’est faite sur cette norme. Depuis on retient deux standards lors de l’émission de nouveaux jetons : ERC20 et ERC721 la norme utilisée pour les NFT (non-fungible token).
Ce standard a été proposé en novembre 2015 par Fabian Vogelsteller un développeur Ethereum. La liste complète des tokens ERC20 disponible est dispo à cette adresse.
ERC20 et frais de transactions en Ether (ETH)
Comme nous l’avons vu dans cet article, il est nécessaire d’utiliser du gas pour payer les frais de transactions, il est donc nécessaire de payer en Ether le token natif d’Ethereum pour faire transiter les tokens ERC20 d’un wallet à un autre wallet ou pour envoyer les fonds à un smart contract.
Les règles communes à retenir de ce standard
Le standard définit des fonctions comme :
- le transfert de jetons d’un compte à un autre ;
- l’obtention du solde actuel de jetons d’un compte
- l’obtention de l’offre totale du jeton disponible sur le réseau.
La création des tokens ERC20 se fait de la façon suivante : un contrat de tokens est déployé sur Ethereum, c’est un smart contract avec un registre de qui possède combien de tokens.
Comprenez par qui une clé publique Ethereum :
Sur ce tableau on voit la liste des détenteurs ainsi que leur solde en token, c’est comme ça que les smart contracts savent combien vous possédez de Tether (USDT), Chainlink (LINK) ou Uniswap (UNI) par exemple !
Lorsque vous effectuez une transaction vous envoyez vos tokens ERC20 de votre adresse à une adresse différente, cela se traduit par le fait que vous payez des frais en gas pour effectuer cette transaction, le contrat de tokens lui va mettre à jour son registre pour changer la balance de l’émetteur de la transaction et le bénéficiaire de la transaction, exemple en image :
Images by Ethereum France
L’intérêt d’utiliser le standard ERC20 pour le développement d’applications
L’avantage de définir une norme commune à tous les jetons ERC20 c’est que l’on peut prévoir ce que peut faire et ne pas faire ces tokens, cela permet de contrôler le périmètre lors du développement d’applications comme des Wallet qui gèrent les tokens ERC20 comme Metamask ou Ledger ou de Blockchain Explorer comme Etherscan.
Cela facilite aussi la gestion des tokens de la même norme pour les applications décentralisées (dAPP) comme Uniswap, AAVE, Sushiswap, 1inch ect.
Cela permet également de limiter les bugs et simplifier les audit du code informatique utilisé pour les contrats. Chaque token ERC20 de renommé est audité par des sociétés spécialisés dans la sécurité des smart contracts comme Certik.
Spécifications du standard ERC20 pour les geeks
Les fonctions et les événements qu’un token « ERC20 » doit pouvoir gérer sont les suivants :
- [name] est la fonction qui doit renvoyer le nom du token (par exemple Chainlink ou Uniswap ou VariabL Contribution Token) ;
- [symbol] doit renvoyer le symbole du token (par exemple « LINK» est le symbole du token Chainlink, « UNI » est le symbole de Uniswap) ;
- [decimals] renvoie le nombre de décimales qu’il faut prendre en compte pour le token. Les balances de tokens sont gérés sans décimales par les contrats ERC20 – pour une personne possédant 1 token à 18 décimales, la fonction balanceOf définie ci-dessous renverra 1000000000000000000. En général, c’est 18 décimales qui est choisi pour un token ERC20.
- [totalSupply] doit renvoyer le nombre total de tokens existant ;
- [balanceOf] doit permettre de consulter le nombre de tokens détenu par un compte ;
- [allowance] renvoie le nombre de tokens qu’une adresse est autorisée à retirer du contrat de token ;
- [transfer] est la fonction permettant à un compte possédant des tokens d’en envoyer à un autre compte
- [transferFrom] permet de transférer des tokens d’une adresse à une autre, sans que l’adresse qui envoie la transaction soit celle qui détient les tokens
- [approve] est une fonction permettant au détenteur d’un contrat de token d’approuver un retrait pour un montant déterminé par un compte précis (change l'[allowance] de ce compte)
Ces fonctions doivent également déclencher deux événements :
- -Transfer- se déclenche pour chaque appel à la fonction [transfer] ou [transferFrom]
- -Approval- se déclenche à chaque appel à la fonction [approve]
Vous l’aurez compris, le standard ERC20 est une sorte d’API standardisé pour faciliter le travail des développeurs et leur éviter de réinventer la roue.
Merci particulier à Ethereum France pour cette documentation très claire.