# ERC20

Le token standard de l'Ethereum (ERC20) (pour « Ethereum Request for Comment ») est utilisé pour les contrats intelligents sur le réseau Ethereum. Développé en 2015, ERC20 définit une liste commune des règles que le jeton de l'Ethereum doit mettre en œuvre. Il offre aux développeurs la possibilité de programmer la circulation de nouveaux jetons dans l'écosystème Ethereum. Ce jeton est devenu populaire avec le financement participatif des entreprises via les ICO.
Les tokens ERC20 utilisent du « gas » pour les frais d'opérations. Ils peuvent être achetés en Ethereum. Les transactions avec le plus de gas seront traitées plus rapidement par la Blockchain.

## Bases
### Tokens Ethereum

Ethereum fonctionne sur la Blockchain, grâce à une machine virtuelle Ethereum. Les tokens ERC20 existent sur la blockchain Ethereum.
Elles bénéficient de tous les avantages de cette technologie, mais subissent les inconvénients. Par exemple :
* les échanges de tokens sont soumis aux mêmes frais de prix du Gas lié à la Blockchain Ethereum
* quand il y a saturation du réseau, les transferts de token se font plus lentement, comme pour l'Ethereum.
Un token ERC20 peut être une monnaie, des actions d'une entreprise, des points de loyautés, etc.

### Création des tokens (non ERC20)

Tous les tokens (ERC20 ou non) sont créés par un Smart Contract. Ces Smart Contract sont alors chargés de :
* la définition d'un nombre total du nouveau token ;
* la gestion des transactions liées à ce token ;
* la gestion des balances d'une adresse.
Pour obtenir des tokens, il faut payer en Ethereum. Par exemple, pour 2 Ethereum, je peux obtenir 15 tokens proposé par le SmartContract.

### Risques

L'un des risques majeurs des Smart Contract (non ERC20) est qu'il ne peut plus être modifié une fois qu'il est déployé.
Cela peut être catastrophique si le Smart Contract est mal développé. S'il possède des bugs critiques, c'est trop tard. Entre 2015 et 2016, il y a eu plusieurs exemples :
* Les tokens ne partent pas toujours, voire jamais, au bon destinataire (c'est le Smart Contract qui gère les transactions des tokens)
* Les tokens peuvent être perdus
* les développements de bases liés à la sécurité n'ont pas été intégrés, et des pirates peuvent alors voler ces tokens
De plus, l'un des gros inconvénients : si l'on veut que le token soit disponible et/ou échangeable dans un site d'Exchange, comme Binance, celui-ci doit développer un morceau de code spécifique, juste pour pouvoir communiquer avec le Smart Contract.

## Histoire
### Smart Contract ERC20

Avant la création d'ERC20, chaque entreprise qui développait un Smart Contract devait ré-inventer la roue en redéveloppant plusieurs méthodes, chacun à sa manière.
Cela impliquait que pour chaque Smart Contract distinct, les sites d'Exchanges étaient obligés eux-aussi, de développer un morceau de code pour s'adapter au token en question.
L'ERC20 a alors répondu à une demande majeure, un premier pas vers une uniformisation des tokens de blockchain.

### Règles

Les lignes directrices ERC20 exigent que le Smart Contract développe six fonctions obligatoires et 3 optionnelles.
Les 3 fonctions optionnelles :
* Pour donner un nom : WikiToken
* Pour donner un Symbol : WKT
* Pour définir le nombre de décimales : 8
Les 6 fonctions obligatoires :
* Fonction totalSupply : La gestion du nombre maximal de token. Le Smart Contract doit pouvoir dire stop à la création de token dès que la limite a été atteinte.
* Fonction balanceOf : La gestion des balances. Le Smart Contract doit pouvoir dire combien une adresse possède de Token
* Fonction transfer : Le Smart Contract utilise cette méthode pour envoyer des tokens provenant du fournisseur, à un utilisateur.
* Fonction transferFrom : Le Smart Contract gère le transfert de tokens entre utilisateur
* Fonction approve : Le Smart Contract détermine s'il peut donner des tokens à un utilisateur, en vérifiant que le nombre de tokens en circulation n'a pas atteint sa limite.
* Fonction allowance : Le Smart Contract vérifie que l'utilisateur qui veut envoyer des tokens ait un montant minimum pour effectuer son transfert.
En matière de programmation, le développeur qui doit créer le Smart Contract, doit simplement implémenter l'Interface ERC20.

### Déploiement et succès

Dès son implémentation fin 2016, il y a eu un engouement majeur pour la blockchain Ethereum, grâce à la simplification de l'utilisation des tokens.
L'ERC20 est adopté par tous les sites d'Exchange du monde, comme Binance ou HitBTC, par sa facilité. Il leur suffit simplement de développer les interactions des 9 fonctions ERC20, et le catalogue de tokens proposé par ces sites explose. Dès qu'une personne lambda crée un token ERC20, il est directement proposable sur ces sites.
Mi-2017, au bout de 6 mois d'existence, il était si facile de créer des tokens, que tout le monde pouvait créer un Smart Contract en moins de 2 minutes sur des sites spécialisés, comme Token Factory, en spécifiant juste le nom et le nombre de tokens maximum.
Fin 2017, un an après l'adoption d'ERC20, Etherscan recensait plus de 40000 tokens différents. De plus, ces différents projets ont levé plus de 4 milliards de dollars grâce à ERC20.

### Découverte d'un bug sur ERC20

La Fonction transfer d'ERC20 possède un bug qui a fait perdre au moins 4 millions de dollars en décembre 2017.
Dans le cas d'un usage normal, pour acheter des tokens, il faut payer des ethers, puis le Smart Contract renvoie les tokens sur l'adresse de l'acheteur.
Le bug se trouve dans le cas où une personne envoie des tokens ERC20 au lieu d'envoyer des ethers au Smart Contract. Ceux-ci étant des éléments de la blockchain Ethereum, les Smart Contract ERC20 acceptent les tokens en entrée, mais les détruisent, parce que non reconnus. Ces tokens sont brûlés à jamais, plusieurs centaines d'utilisateurs ont définitivement perdu de l'argent.
Depuis 2018, plusieurs nouveaux RFC sont proposés pour corriger ce bug:
* ERC-223
* ERC-777