Un guide détaillé sur la norme des jetons ERC20 (y compris la création de contrats de jetons ERC20)

Les jetons ERC-20 sont des crypto-monnaies qui fonctionnent sur la blockchain Ethereum. Ils sont alimentés par des contrats intelligents du réseau Ethereum, l’utilisent pour effectuer des transactions et interagissent avec ses adresses et ses portefeuilles. Dans le même temps, les jetons ERC 20 ont leurs propres tickers, taux d’approvisionnement, prix et autres paramètres. Par exemple, bien qu’EOS soit un jeton Ethereum, il a une capitalisation boursière de 11,5 milliards de dollars, ce qui est plus que ce que l’on peut dire de la majorité des crypto-monnaies obtenues par minage.

L'ERC20 est devenu le foyer de facto du DeFi

Grâce à l’accessibilité de l’architecture ERC20, il est assez facile de créer et de déployer votre propre jeton et de le distribuer (par exemple, lors d’une ICO). Dans le cadre des ICO et d’autres types d’offres, des préventes sont organisées afin d’attirer les fonds des investisseurs. Le processus de création des jetons est appelé TGE, abréviation de Token Generation Event (événement de génération de jetons). Les projets émettent un certain nombre de jetons ERC 20 et les vendent à tous les participants d’une prévente de bitcoins ou d’ETH.

Il convient de noter que même si les jetons ERC-20 sont des crypto-monnaies à part entière qui peuvent se retrouver sur des bourses de crypto-monnaies populaires, cela ne signifie pas nécessairement qu’ils le feront. Un jeton erc20 peut prendre d’assaut le monde de la cryptographie ou rester à jamais dans l’escarcelle de son créateur.

Utilisations pratiques de l’ERC20

Dans un premier temps, les jetons ont été utilisés lors de la collecte de fonds initiale pour le développement de l’entreprise. Il s’agit d’actifs numériques assortis d’obligations fixes. Les jetons étaient achetés directement auprès des développeurs et ne pouvaient être vendus ou achetés nulle part ailleurs.

L’ICO d’Ethereum a eu lieu en 2014 et a permis de lever plus de 16 millions de dollars. Ethereum a attiré l’attention de représentants de nombreuses industries, car il peut être utilisé pour optimiser et numériser des processus commerciaux inefficaces à l’avenir.

Un jeton ERC-20 peut être considéré comme une crypto-monnaie s’il peut être échangé sur des bourses de crypto-monnaies. Les jetons ERC20 peuvent également évoluer vers des écosystèmes entiers avec leurs propres blockchains. Tron et EOS sont des exemples de jetons ERC20 qui ont créé leur propre blockchain. Tron a créé sa propre blockchain en raison de sa vision : les jeux de blockchain deviennent de plus en plus populaires. EOS est un concurrent d’Ethereum, principalement utilisé pour les échanges décentralisés et les jeux d’argent.

Un jeton Ethereum peut être utilisé comme un actif et une forme d’argent ; il peut également représenter des objets de valeur de toute nature et accorder des adhésions à un programme ou servir de moyen de confirmation de la propriété. Tout actif du monde réel, physique ou autre, peut être transformé en jeton et échangé sur les bourses de cryptomonnaies.

Les points de fidélité Moeda (MDA) sont un jeton ERC 20 qui alimente l'écosystème MOEDA.

Les jetons ERC-20 les plus populaires

La blockchain Ethereum est la maison de facto de la cryptographie, hébergeant la plupart des plus grands altcoins d’aujourd’hui. Les jetons les plus connus sont les jetons ERC20, et la plupart des DApps de l’écosystème cryptographique sont construites sur le réseau Ethereum. Certains stablecoins au standard ERC20 sont connus pour dominer le marché des crypto-monnaies.

USDC

Outre l’USDT de Tether, l’USDC est l’une des plus grandes stablecoins ERC20 du réseau Ethereum.

USDC by Circle est la deuxième stablecoin ERC20 la mieux notée.

Lancé par Coinbase en collaboration avec Circle, USDC est généralement considéré comme une alternative plus fiable à USDT par ceux qui ont une position critique à l’égard de Tether.

La norme BEP20 de Binance est hébergée sur la chaîne intelligente de Binance, qui découle elle-même du réseau Ethereum. Par conséquent, les deux jetons natifs de Binance – BNB et BUSD – peuvent également être techniquement considérés comme des jetons Ethereum.

Une norme unique, la facilité de création et la compatibilité avec les plateformes ont conduit à une large diffusion des jetons ERC20. Vous trouverez ci-dessous quelques exemples de jetons populaires utilisant le protocole ERC20.

USDT Tether

Tether (USDT) est l'une des stablecoins ERC-20 les plus populaires.

Une stablecoin USDT à parité avec le dollar a été émise par Tether Limited en 2015. Basée sur la norme ERC 20, elle est devenue depuis lors la stablecoin de référence pour la plupart des négociants et des échanges de cryptomonnaies dans le monde entier. La valeur de l’USDT Tether est garantie par des dollars américains sur les comptes de la société.

D’autres monnaies fiduciaires ont leurs propres stablecoins. Par exemple, Binance GBP est adossé à la livre sterling et STASIS est adossé à l’euro.

L’ancien système reposait sur le protocole Omni basé sur la blockchain Bitcoin. En raison des frais élevés et du long délai de confirmation, l’entreprise a décidé de migrer vers la blockchain Ethereum.

Bitcoin et Ether enveloppés

Le Wrapped Ether est en fait l'ETH traduit dans l'environnement ERC20.

L’ETH, ou éther, est la monnaie de base de l’Ethereum. WETH est un « ETH enveloppé » ou « Ether dans une coquille ». Elle a été introduite parce que l’ETH est apparu avant l’adoption de la norme ERC20 et n’était donc pas conforme à celle-ci.

Les plateformes décentralisées basées sur Ethereum échangent des jetons entre utilisateurs sur la base de contrats intelligents. Pour qu’un échange ait lieu, les jetons doivent appartenir à la même norme.

Le WETH est utilisé pour échanger des jetons ETH contre le protocole ERC20 correspondant.

De nombreux utilisateurs du réseau, y compris de grandes entreprises disposant de capitaux, sont intéressés par le développement de la monnaie de base.

Parmi eux :

  • le système Wrapped Ether, qui possède plus de 2 millions d’ETH d’une valeur de 380 millions de dollars ;
  • l’une des principales bourses de crypto-monnaies, Binance, 370 millions de dollars ;
  • Bourse Bitfinex, moins de 2 millions d’ETH.
Wrapped Bitcoin (WBTC) est l'équivalent ERC20 de BTC.

Bitcoin a également une version ERC20 enveloppée appelée WBTC. Le BTC original est le jeton natif de la blockchain Bitcoin et n’est pas compatible avec Ethereum. Comme le WETH, le WBTC est censé remédier à cette situation : il est toujours indexé sur le cours du bitcoin et est entièrement compatible avec le réseau Ethereum. Les jetons enveloppés sont le plus souvent utilisés pour transférer des jetons entre différents réseaux qui ne sont pas mutuellement compatibles.

LCS

LocalCoinSwap est une plateforme décentralisée qui offre aux utilisateurs la possibilité d’acheter et de vendre directement des crypto-monnaies en utilisant l’une des méthodes de paiement disponibles.

LocalCoinSwap est également un jeton ERC 20

Le LCS vous permet de trouver un acheteur ou un vendeur de devises et d’effectuer une transaction sans passer par des sites web ou des portefeuilles. La plateforme utilise un système de dépôt traditionnel, qui stocke des fonds en crypto-monnaies qui peuvent être échangés. Lorsque le paiement est confirmé par l’acheteur et le vendeur, le système envoie des pièces à l’acheteur. La plateforme donne le droit de recevoir des dividendes dans un rapport de 1 à 1 à la fin du trimestre.

Etherscan : La maison des jetons ERC 20

Les contrats de jetons ERC20 peuvent être consultés sur Etherscan.io – le tracker natif du réseau Ethereum.

Etherscan.io est le tracker natif du réseau Ethereum.

En plus de leur ticker et d’une brève description, vous pouvez suivre les chiffres de l’offre totale, la capitalisation boursière (sur la chaîne et en circulation), le nombre de détenteurs, ainsi que les prix et les variations de prix.

Tous les tokens ERC20 peuvent être consultés dans le menu Tokens d'Etherscan.

Pour afficher tous les contrats de jetons ERC20 sur le réseau Ethereum, vous devez cliquer sur Tokens en haut à droite, puis sélectionner les jetons ERC20. Tous les nouveaux jetons dont la capitalisation boursière est plus ou moins compétitive sont répertoriés ici.

À l’heure où nous écrivons ces lignes, il y a au moins 625 000 contrats de jetons ERC20 déployés sur le réseau Ethereum. Vous pouvez également consulter d’autres normes relatives aux jetons Ethereum ici – ERC721 pour les jetons non fongibles (NFT) et ERC155 pour les jetons multiples.

L’aspect technique d’un jeton ERC 20

Les jetons ERC-20 sont essentiellement des contrats intelligents sur la blockchain Ethereum. L’ERC-20 est une norme unifiée, qui comprend un ensemble de règles de base à respecter dans le cadre d’un contrat. Cette norme garantit la compatibilité de tous les jetons au sein du réseau.

ERC signifie « Ethereum Request for Comments », et 20 est son numéro d’identification.

L’ERC-20 a été envisagé en 2015 et a été lancé à l’échelle mondiale en 2017. Auparavant, tous les contrats intelligents étaient assez hétérogènes, ce qui entraînait des problèmes de compatibilité entre eux, et les portefeuilles devaient gérer des tas de code pour reconnaître chaque jeton spécifique.

Jetons ERC20 et EVM

L’EVM (Ethereum Virtual Machine) est un environnement informatique virtuel, un ordinateur distribué chargé d’exécuter des algorithmes sur le réseau Ethereum (smart contracts).

L’EVM est considéré comme Turing-complet, ce qui signifie qu’il est théoriquement capable de traiter n’importe quelle tâche de calcul pouvant être effectuée par des ordinateurs (avec des ressources suffisantes).

En guise de paiement pour l’exécution des contrats intelligents, l’EVM utilise du « gaz », mesuré en « gwei », la plus petite fraction possible d’ETH ; le gaz est inclus dans le coût de la transaction. La quantité de gaz que l’utilisateur doit payer dépend de la complexité des calculs effectués et de la charge de travail actuelle de la blockchain Ethereum.

Les contrats intelligents qui suivent une structure de données définie sur l’EVM sont utilisés pour créer des jetons ERC-20. Cette structure de données contrôle la dénomination, la distribution, la quantité fournie et le suivi du jeton.

ERC20 = Code ?

Beaucoup se demandent si l’ERC 20 peut être considéré comme un code. La réponse n’est pas tout à fait exacte : un jeton ERC20 sert plutôt de guide pour définir les règles de base du fonctionnement du réseau Ethereum.

La norme sert un certain nombre d’objectifs, notamment le suivi de toutes les transactions, le solde actuel des jetons d’un utilisateur, le ticker du jeton et les taux d’approvisionnement totaux ; la norme du jeton ERC 20 garantit également la compatibilité des différentes DApps (Apps décentralisées) dans le réseau.

A l’intérieur d’un contrat en tokens ERC 20

La norme ERC20 décrit six fonctions obligatoires et trois fonctions optionnelles qui doivent être respectées pour qu’un contrat intelligent fonctionne correctement.

Chaque jeton doit avoir un nom et un symbole (également appelé « ticker »). Il doit également spécifier ses décimales, c’est-à-dire le nombre de fois qu’il peut être divisé par 10. Vous trouverez ci-dessous un ensemble de fonctions obligatoires, que certains auront peut-être un peu de mal à comprendre au début :

function () public view returns (uint256);
function balanceOf(address tokenOwner) public view returns (uint);
function allowance(address tokenOwner, address spender)
public view returns (uint);
function transfer(address to, uint tokens) public returns (bool);
function approve(address spender, uint tokens)  public returns (bool);
function transferFrom(address from, address to, uint tokens) public returns (bool); 

Voici ce que représentent ces fonctions :

  • TotalSupply : Le nombre total de jetons qui seront émis ;
  • BalanceOf : Le solde du compte du propriétaire d’un jeton ;
  • Transfert : Exécute automatiquement les transferts d’un nombre spécifié de jetons vers une adresse spécifiée pour les transactions utilisant le jeton ;
  • TransferFrom : Exécute automatiquement les transferts d’un nombre spécifié de jetons à partir d’une adresse spécifiée en utilisant le jeton ;
  • Approuver : Permet à un dépensier de retirer un nombre déterminé de jetons d’un compte spécifique, jusqu’à un montant donné ;
  • Allocation : Renvoie un nombre déterminé de jetons d’un dépensier au propriétaire ;
  • Transfert : Un événement déclenché lorsqu’un transfert est réussi (un événement) ;
  • Approbation : Journal d’un événement approuvé (un événement).

Avec une autorisation appropriée, les fonctions de l’ERC20 permettent à une entité externe, par exemple une application de portefeuille cryptographique, de voir son solde et de transférer des jetons entre les utilisateurs.

Le contrat intelligent reconnaît deux types d’événements :

event Approval(address indexed tokenOwner, address indexed spender,
 uint tokens);
event Transfer(address indexed from, address indexed to,
 uint tokens);

Les événements peuvent être :

  • invoqué
  • émis

L’un ou l’autre se produit une fois qu’un compte Ethereum a accordé à quelqu’un le droit de retirer des jetons de ce compte et après que les jetons ont été effectivement transférés. Conformément à la norme, la « fonction de transfert » doit émettre l’événement « Transfer » lorsque le transfert de jetons a réussi.

function allowance(address owner, address spender) external view returns (uint256);2
 

La norme ERC-20 permet à une adresse de donner une allocation à une autre adresse pour qu’elle puisse récupérer des jetons auprès d’elle. Ce getter renvoie le nombre restant de jetons que le dépensier sera autorisé à dépenser pour le compte du propriétaire. Cette fonction est un getter et ne modifie pas l’état du contrat, et doit renvoyer 0 par défaut.

Création d’un jeton ERC 20

Étape 1

  • Choisissez un nom, par exemple Best Coin
  • Choisissez un symbole, faisons-en un BEC
  • Déterminer l’offre totale
  • Décidez si les jetons seront divisibles et, dans l’affirmative, combien de décimales sera le maximum.

Étape 2

Déployer le jeton

Saisissez les données suivantes dans le contrat intelligent disponible sur le lien. Téléchargez les deux fichiers .sol. Accédez à l’éditeur de remix. Téléchargez les deux fichiers.

Les fichiers sont chargés à l’aide du bouton Charger (Ouvrir). Sélectionnez les deux fichiers.

Ouvrez NewToken.sol, mettez les valeurs nécessaires dans à la place des variables :

totalSupply – nombre total de jetons

name – le nom complet du jeton

décimal – le nombre de zacks après la virgule. En effet, dans les contrats, tout n’est stocké qu’en nombres entiers. Par conséquent, vous devez spécifier le nombre de caractères si vous souhaitez pouvoir créditer un nombre non entier de jetons.

  • Symbole – un symbole pour les échanges
  • Acheter des annonces
  • Débrancher

Il devrait en résulter quelque chose comme ceci :

Sauvegardez-le. Il reste à télécharger le contrat sur le réseau. Par exemple, installez-le dans le réseau de test Ropsten. Tout client sera nécessaire pour le déploiement. Utilisons MetaMask – il ne sait pas comment compiler les smart contracts sur Solidity, donc nous allons d’abord les compiler.

Dans la partie droite de l’éditeur de remix, ouvrez l’onglet compile. Par défaut, le contrat est compilé automatiquement. En sélectionnant votre contrat et en cliquant sur Détails, vous pouvez visualiser le bytecode et d’autres informations.

Pour déployer, cliquez sur Exécuter, sélectionnez Injected Web3, et sélectionnez le compte que nous allons déployer (il devrait se charger automatiquement si vous avez installé MetaMask dans le navigateur). Saisissez les informations nécessaires dans les champs (gaz, valeur) et cliquez sur Créer.

MetaMask reprend l’action de la page.

Cliquez sur Soumettre. Votre contrat est scellé. L’envoi est confirmé dans MetaMask par une icône avec un document (elle mène à la page de transaction) et l’inscription « Contrat publié ».

Un contrat intelligent scellé est un jeton.

Étape 3

Opérations sur les jetons

Les transactions de jetons basées sur Ethereum nécessitent deux portefeuilles – celui qui les possède déjà (par défaut, le créateur du contrat, la norme ERC20) et celui qui doit les transférer.

Effectuer des opérations avec notre jeton (le transférer, par exemple). Nous pouvons le faire soit sur la page du contrat intelligent etherscan (lien dans MetaMask), soit sur la page du remix.

En bleu, les opérations de lecture, en rose, les opérations d’écriture.

Pour transférer des jetons ERC-20, entrez l’adresse du destinataire et la quantité. Après cela (et après avoir saisi les données dans la blockchain, bien sûr), vous pouvez vérifier votre solde ou le solde du destinataire des jetons grâce à l’opération balanceOf.

C’est fait !

Les problèmes liés à la norme des jetons ERC 20

Il existe deux niveaux d’émission de jetons ERC 20. Il existe deux niveaux : celui de l’utilisateur et celui du développeur.

Pour les utilisateurs de jetons

Pour les utilisateurs communs, les inconvénients les plus courants sont les suivants :

  • Faible débit – Le réseau Ethereum a été engorgé lorsque les dapps ont connu une forte demande, comme CryptoKitties (qui a depuis migré vers sa propre blockchain Flow). Lorsque cela se produit, le réseau ralentit et les transactions deviennent plus coûteuses.
  • Transactions lentes – Le temps de blocage est d’environ 14 secondes, ce qui signifie que le traitement des transactions peut prendre jusqu’à une minute. Cela peut être suffisant pour certaines utilisations ou trop lent pour d’autres.
  • ETH pour les paiements de gaz – Lorsque des transactions sont effectuées avec des jetons ERC-20, une deuxième crypto-monnaie est nécessaire pour payer les frais de transaction. Cela peut faire perdre du temps et de l’argent, car cela peut entraîner l’accumulation d’un solde « poussiéreux » sur différentes plates-formes.

Pour les développeurs de jetons

Les jetons ERC20 présentent deux problèmes critiques qui sont connus pour causer des pertes monétaires. Il s’agit de

  1. Absence de traitement des transactions.

Il existe deux façons d’effectuer une transaction en jetons ERC20 :

  • fonction de transfert.
  • approuver + mécanisme transferFrom.

Le solde du token n’est qu’une variable à l’intérieur du contrat de token.

La transaction d’un jeton est une modification des variables internes du contrat intelligent (le solde actuel de l’expéditeur sera diminué, et celui du destinataire sera augmenté).

La fonction de transfert n’informe pas le destinataire qu’une transaction a été effectuée. Le destinataire ne peut pas reconnaître la transaction entrante ! Cela peut conduire à des transactions non gérées et à des pertes monétaires.

Par conséquent, si le destinataire est un contrat intelligent, les utilisateurs doivent transférer leurs jetons erc20 à l’aide de l’algorithme approve +transferFrom. Si le destinataire est une adresse de compte détenue en externe, les utilisateurs doivent transférer leurs jetons via la fonction de transfert.

Si un utilisateur se trompe et choisit la mauvaise fonction, le jeton restera bloqué dans le contrat intelligent et la transaction ne sera pas reconnue. Les jetons erc20 bloqués seront donc impossibles à récupérer.

Au moins 400 000 dollars ont été perdus à cause de ce problème.

  1. Le mécanisme approve + transferFrom est potentiellement peu sûr

Le mécanisme d’approbation + transfert de est connu pour permettre une double dépense.

Ceci n’est pas pertinent à moins qu’il y ait une possibilité de créer des échanges de jetons personnalisés comme le changeur de jetons Bancor.

La solution à ce problème est le standard de jeton ERC223.

La norme de jetons ERC #223 a été développée spécifiquement pour résoudre les problèmes de la norme de jetons ERC 20.

Tous les développeurs de jetons devraient y prêter attention. Développer un jeton qui entraînera des pertes monétaires pour vos utilisateurs n’est pas une bonne solution. Soyez responsable des développements que vous réalisez.

Comment cela fonctionne-t-il en pratique ?

Alice possède 10 jetons ERC20. Elle veut envoyer 3 jetons à Bob.

Il peut sembler qu’Alice possède des jetons « sur le solde de son compte » pour les utilisateurs ordinaires, mais le solde du jeton n’est qu’une variable à l’intérieur du contrat de jeton.

Alice initie une transaction. Chaque transaction de jeton est un appel à un contrat de jeton, en fait.

Alice demande au contrat à jetons de réduire son solde de 3 et d’augmenter le solde de Bob de 3 en même temps.

Une fois la transaction minée, les variables internes de ce contrat de jeton ERC 20 seront modifiées. Personne ne dira au destinataire (Bob, dans ce cas) que la transaction a eu lieu.

Cela convient aux comptes détenus par des tiers (c’est-à-dire par des humains). Alice peut dire à Bob qu’elle lui a envoyé des jetons. Bob peut regarder son bilan et se rendre compte que cela s’est réellement passé.

Il s’agit d’un problème critique pour les contrats, qui entraîne la perte de jetons. Les contrats qui ne sont pas conçus pour fonctionner avec des jetons doivent rejeter les transactions de jetons entrantes. Dans le cas contraire, chaque contrat devient un piège à jetons potentiel en raison de l’impossibilité de rejeter les transferts de jetons inappropriés.

En termes techniques, l’ERC est appelé « symbole constant public ». Ethereum Request for Comments est le nom du document décrivant les règles de création de jetons sur la blockchain.

Implications juridiques de l’ERC20

D’un point de vue juridique, la situation des jetons ERC 20 est encore plus floue que celle des crypto-monnaies.

Le statut juridique de l'ERC 20 fait l'objet de nombreux débats.

Dans la plupart des pays du monde, la réglementation en la matière est inexistante ou tend vers une « interdiction ». Cela est dû à un certain nombre de facteurs, notamment :

  • Un grand nombre de fraudes liées aux jetons ERC 20. L’essence du jeton s’est surtout répandue dans le cadre de l’ICO, dont beaucoup étaient des escroqueries pures et simples ou cachées, ce qui a laissé une empreinte négative sur le concept.
  • Les crypto-monnaies sont un domaine relativement jeune. La technologie Blockchain a apporté de sérieuses innovations dans le monde des technologies financières. Il s’agit tout d’abord de la complexité de la régulation de cette sphère en lien avec l’utilisation des technologies de décentralisation et du faux anonymat. Deuxièmement, il s’agit d’un nouveau domaine dans l’économie mondiale.

Token ERC 20 = sécurité ?

  • La reconnaissance des jetons ERC 20 en tant que titres fait l’objet de nombreux débats. Cela concerne en particulier ceux qui cherchent à créer et à distribuer leurs propres jetons dans le cadre d’une ICO, etc. Le fait est que les jetons ERC 20 (« actions qui donneraient des rendements aux propriétaires ») seraient soumis à la législation sur les valeurs mobilières aux États-Unis et dans la plupart des autres pays. Vous n’avez même pas besoin de réussir le test complexe de Howey. Le test de Landreth Timber et d’autres tests similaires font l’affaire – une participation bénéficiaire dans une entreprise sera de toute façon considérée comme une sécurité.
  • Le fait qu’un jeton soit une valeur mobilière ne signifie pas que vous ne pouvez pas le vendre. Les gens achètent et vendent des titres en permanence (pensez aux start-ups de la Silicon Valley). Mais pour ce faire, vous devez vous conformer à l’une des exemptions de placement privé de titres prévues par les lois sur les valeurs mobilières. Cela signifie généralement qu’il n’est pas proposé au grand public, qu’il ne fait pas l’objet d’une publicité, etc. – En d’autres termes, le contraire de ce que font la plupart des ventes de jetons.
  • Vous pouvez également opter pour la formule Reg A+ et offrir le jeton au public, mais dans la limite d’une levée de fonds de 50 millions de dollars, en obtenant d’abord l’approbation de la SEC et en produisant des rapports réguliers (qui ne sont pas aussi importants que les rapports exigés pour une société à part entière assujettie à la loi sur les bourses). Il existe d’autres possibilités de combinaison dans la même zone générale des lois sur les valeurs mobilières.