Comparaison entre ERC20, ERC223 et la nouvelle norme de jeton Ethereum ERC777steemCreated with Sketch.

in #fr6 years ago (edited)

Comparaison entre ERC20, ERC223 et la nouvelle norme de jeton Ethereum ERC777

Article de mars 2018

Vous connaissez tous les jetons ERC20 car vous en possédez probablement. Mais saviez-vous qu'il existe beaucoup plus de normes en plus d'ERC20? Ethereum a une longue histoire de normes développées.

Pour vous donner une meilleure idée de ce que ERC signifie, il signifie "Ethereum Request for Comment". Ceci est une proposition soumise pour discussion et suggestions à la norme actuelle. Le nombre (comme 20) fait référence à un numéro de problème sur la plate-forme de partage de code Github. Jetons d'abord un coup d'œil à la norme ERC20.

Norme ERC20

Quelle est exactement la norme ERC20?

L'avènement des jetons ERC20 a révolutionné le marché de la crypto-monnaie et ouvert la porte à la pléthore de projets de crypto-monnaie d'ICO dont le monde a été témoin en 2017. Introduit en 2015, le code ERC20 présente une liste spécifique de règles qu'un déploiement basé sur Ethereum doit déployer. le processus de programmation des fonctions des jetons sur la blockchain d'Ethereum. Fondamentalement, les jetons ERC20 sont des formes spéciales de contrats intelligents qui utilisent la blockchain d'Ethereum.

Les exemples les plus frappants de jetons ERC20 incluent Bancor, EOS, Tronix, BNB, VeChain et Bankex.

Avant l'innovation de la norme ERC20 pour les jetons Ethereum, les codeurs devaient créer des standards d'implémentation spécifiques pour développer un jeton et le lancer sur le réseau Ethereum. Néanmoins, le code jeton ERC20 a simplifié le processus de création de jetons, grâce à un protocole simplifié et à des normes de contrat intelligentes. Le code ERC20 a allégé la complexité associée à la mise en œuvre des contrats intelligents du jeton, ce qui a considérablement réduit la possibilité de rompre les contrats de jetons.

En avril 2018, il y avait 66 468 contrats de jetons ERC20, grâce à l'uniformité du code jeton fourni par la norme ERC20, ce qui permettait aux échanges de crypto-monnaie de lister les différents jetons sur leurs plateformes de trading. En tant que tel, le standard ERC20 a aidé la communauté crypto à surmonter les problèmes de liquidité qui auraient pu associer un si grand nombre de jetons basés sur Ethereum.

Fonctions du jeton ERC20:

Le code ERC20 décrit six fonctions spécifiques pour les jetons, qui sont :

  1. Obtenir la totalité des jetons via la fonction "totalSupply"

  2. Récupération du solde de jetons d'un autre compte associé à l'adresse "_owner" via la fonction "balanceOf (adress _owner) return constant (balance uint256)".

  3. Envoi d'une quantité spécifique de jetons "_value" à une adresse donnée via la fonction "transfer (address _to, uint256 _value) returns (bool success)".

  4. Envoi d'une quantité spécifique de jetons "_value" d'une adresse jeton (contrat) à une autre adresse jeton (contrat) via la fonction "transferFrom (adress _from, adress_to, uint256 _value) returns (bool success)".

  5. Permettre à un compte spécifique de retirer plusieurs fois des jetons de son compte, tout en prédéfinissant la limite supérieure du nombre de jetons à retirer avec le paramètre "_value". Cela peut être réalisé via le "approve(adress _spender, uint256 _value) return (bool success)". La limite supérieure de retrait, c'est-à-dire le paramètre "_value", peut être écrasée lorsque la fonction est rappelée.

  6. Restitution du montant résiduel des jetons, dans la limite du montant prédéfini défini par la limite supérieure que le "_spendeur" peut utiliser pour se retirer du compte du "_owner". Ceci peut être exécuté via la fonction *"allow (adresse * _owner *, adresse * _spender ) constant returns (uint256 remaining)".

Ces six fonctions définies par le code ERC20 représentent des problèmes de fonctionnalité de base, qui incluent la manière dont ces jetons seront transférés entre différents comptes, et comment les utilisateurs peuvent récupérer les données associées à un jeton ERC20 donné. Ces groupes de fonctions sont prescrits pour garantir que les jetons basés sur Ethereum fonctionneront de manière similaire dans n'importe quelle partie de la plate-forme d'Ethereum. En tant que tel, tous les portefeuilles crypto qui sont compatibles avec la pièce d'éther prendront également en charge les jetons basés sur la norme ERC20.

Bug critique:

ERC20 est le premier standard de jeton d'Ethereum. Comme c'est souvent le cas avec le nouveau code, il contient des bugs ou des erreurs logiques. ERC20 suppose deux façons d'effectuer une transaction symbolique. Tout d'abord, la fonction de transfer vous permet d'envoyer des jetons à l'adresse de quelqu'un. Si vous souhaitez déposer des jetons dans un contrat intelligent, vous devez utiliser la combinaison ‘approve + transferFrom’.. Vous devez autoriser ce contrat à retirer vos jetons via la fonction d'approbation. Ensuite, vous devez appeler une fonction d'un contrat qui gérera votre dépôt et retirera vos jetons via la fonction transferFrom.

Que faire si vous déposez des jetons par accident à un contrat avec la fonction de transfer? La transaction réussira, mais cette transaction ne sera pas reconnue par le contrat du destinataire. Par exemple, si vous envoyez des jetons à un contrat d'échange décentralisé, le contrat d'échange recevra vos jetons, mais il ne créditera pas ces jetons à votre solde de jeton d'échange. De plus, si le contrat d'échange décentralisé n'implémente pas une fonction d'extraction de jetons d'urgence, il est impossible de récupérer vos jetons, ce qui entraîne une perte permanente des jetons. En raison de ce bug, l'écosystème Ethereum a déjà perdu des millions de dollars.

Pourquoi utilisons-nous toujours la norme ERC20?

Utilisateur de Reddit / Dexaran, créateur de la norme ERC223, est l'un des premiers développeurs à avoir informé la communauté de ce bug. Nous lui avons demandé pourquoi ERC20 est encore si largement utilisé, même en connaissant ce bug critique. Il a donné les raisons suivantes:

  1. En raison de l'irresponsabilité criminelle des développeurs du jeton.
  2. Parce que la Fondation Ethereum fait toujours la promotion de la norme jeton ERC20 même si elle contient des bugs. La même situation que précédemment avec TheDAO. Ils ont besoin de dire "Arrête ça maintenant" mais ils ne le feront pas.
  3. Parce que la raison principale du développement de jetons est l'accaparement de fonds, plutôt que la création de produits.
  4. Parce que l'utilisation d'une norme différente entraînera des effets de réseau plus élevés. Ce n'est pas ce dont nous avons vraiment besoin étant donné que le réseau Ethereum a déjà des problèmes d'évolutivité.

Norme ERC223

La norme ERC223 a été proposée par u / Dexaran qui a contribué à la création de cet article. ERC223 est un standard de jeton qui permet aux transferts de jetons de se comporter exactement comme des transactions éther. ERC223 utilise la gestion des événements (considère une transaction comme un événement) pour empêcher la perte de jetons dans les transactions non gérées. Cette norme améliorée résout le problème critique ERC20 en faisant en sorte que la fonction de transfert génère une erreur sur les transferts non valides et annule la transaction afin de ne pas perdre de fonds. En résumé, ERC223 met l'accent sur la sécurité.

Ajouts et problèmes

ERC223 ajoute un paramètre de données supplémentaire à la fonction de transfert, pour permettre des opérations plus complexes qu'un simple transfert de jeton.

La principale préoccupation de Dexaran est que trop de gens peuvent perdre leurs jetons en les envoyant à des contrats en utilisant la fonction de transfert, et non les méthodes approuver et transferFrom comme discuté précédemment. Sa solution consiste à modifier la méthode de transfert pour vérifier si l'adresse de réception est un contrat (c'est-à-dire contient des données) ou non. S'il s'agit d'un contrat, il suppose qu'il existe une fonction tokenFallback pour le rappeler. La principale faiblesse est que si tokenFallback n'existe pas, la fonction de repli du contrat de réception sera appelée et les jetons envoyés seront peut-être perdus.

Norme ERC777

ERC777 est une nouvelle norme de jeton fongible qui s'appuie sur ERC820 (registre pseudo-introspection contractuel) et tente de résoudre les problèmes d'ERC20, tels que l'absence de mécanismes de gestion des transactions qui ont entraîné la perte de millions de dollars de l'écosystème Ethereum. En bref, ERC777 se concentre sur l'adoption en offrant un large éventail de mécanismes de gestion des transactions.

Avantages

Le principal avantage de ERC777 est qu'il utilise une nouvelle méthode de reconnaissance de l'interface de contrat. Cette norme suppose qu'il existe un registre central des contrats sur le réseau d'Ethereum (défini dans ERC820). Tout le monde peut invoquer ce registre pour savoir si une certaine adresse (peu importe si cette adresse est un contrat ou non) supporte un certain ensemble de fonctions, c'est-à-dire interface.

L'un des principaux problèmes d'Ethereum est l'incapacité de savoir quelles fonctions le contrat met en œuvre. ERC820 est destiné à résoudre ce problème. ERC777 profite de cette approche, ce qui est certainement une bonne idée.

D'un autre côté, vous pouvez créer un jeton qui implémentera les fonctions par défaut d'ERC20 avec les nouvelles fonctions ERC777 sans les remplacer (et héritera éventuellement du bug critique d'ERC20). Cela peut garantir un bon effet réseau pour cette nouvelle norme de jeton et une adoption plus rapide. Comme le montre la pratique, l'objectif principal des développeurs de jetons est de collecter de l'argent, ce qui suppose qu'ils doivent pousser leurs jetons vers des échanges. Il est plus facile pour les échanges de prendre en charge un jeton qui implémente des fonctions ERC20 héritées (peu importe si ces fonctions contiennent ou non des bogues) sans aucune recherche sur les nouvelles fonctionnalités des nouvelles normes de jetons. Plus il est facile pour les échanges de supporter les jetons sur une nouvelle norme, plus les développeurs l'utiliseront. Cela stimule l'adoption de ERC777, tandis que ERC223 n'a pas cette propriété.

Qu'est ce qui est different?

Ce standard de jeton définit un nouvel ensemble de fonctions, à savoir les fonctions "send" au lieu des fonctions"transfer". "authoriseOperator" au lieu de"approve". Fonction de gestionnaire "tokensReceived" à la place de la fonction de gestionnaire"tokenFallback".

Une telle approche peut garantir que les fonctions de cette norme ne chevaucheront et ne remplaceront pas les fonctions de tout autre standard de jeton, il est donc possible de créer un jeton qui sera compatible avec les normes ERC777 et ERC820 simultanément.

Enfin, ERC777 standardise les fonctionnalités Mint et Burn des jetons.

Points de défaillance et problèmes de sécurité

ERC777 implémente la fonction "authoriseOperator" qui permet à quelqu'un de gérer des jetons en votre nom. Dexaran nous a expliqué qu'il pense que cette méthode est obsolète et ne devrait pas être utilisée. En outre, autoriser quelqu'un à gérer des jetons en votre nom nuit à la bande passante du réseau et nécessite plus de gaz. "authoriseOperator" représente déjà une transaction, et une autre transaction est nécessaire pour effectuer le "retrait autorisé". Ainsi, deux transactions sont nécessaires pour effectuer un transfert qui peut être effectué avec une seule transaction.

Ensuite, la norme ERC777 contient un indicateur facultatif pour empêcher les jetons bloqués en vérifiant l'interface ITokenRecipient et en vérifiant si l'adresse est en liste blanche. Comme cette norme est axée sur la sécurité d'un réseau qui traite des jetons valant des millions de dollars, ce n'est pas une bonne chose de rendre ces vérifications facultatives.

D'autres normes

Il existe de nombreuses autres normes comme ERC827 qui combine certains avantages de l'ERC223 avec les fonctions ERC20 héritées. La norme ERC664 met l'accent sur la modularité de la norme de jeton. Cette norme permet aux contrats de jetons d'être évolutifs, mais elle a hérité du bug critique ERC20. D'autres normes incluent ERC721, ERC677 et ERC820, mais elles sont moins connues.

Compatibilité entre les normes

Nous avons demandé à Dexaran quelles normes sont rétrocompatibles. Il nous a dit que nous devions d'abord comprendre ce que signifie la «rétrocompatibilité»: «La rétrocompatibilité est la propriété d'un système, d'un produit ou d'une technologie permettant l'interopérabilité avec un ancien système ou une entrée conçue pour un tel système."

ERC20 et ERC223: les jetons ERC223 sont compatibles avec ERC20. Tout ce qui est conçu pour fonctionner correctement avec ERC20 (comme les portefeuilles) peut également fonctionner avec ERC223. La seule exception ici sont les contrats qui s'appuient sur des modèles de dépôt d'approbation + transferFrom. Cependant, il est possible d'implémenter des fonctions approval + transferFrom avec des jetons ERC223, même si elles ne sont pas incluses dans la norme pour le moment. En ce qui concerne les portefeuilles et les services tiers qui ne sont pas des contrats intelligents, ils prennent automatiquement en charge ERC223 car les données d'appel d'entrée du jeton ERC20 sont valides pour ERC223.

ERC20 et ERC777: Vous trouverez la déclaration suivante dans la section «Compatibilité descendante» de la proposition ERC777: "Ce protocole EIP n'introduit pas d'incompatibilité arrière et est compatible avec l'ancien standard de jeton ERC-20."

Cependant, Dexaran nous a dit exactement le contraire et nous a donné cet exemple: "Ces portefeuilles et services tels que MetaMask, Mist et MyEtherWallet fonctionnent avec des jetons ERC20. L'entrée qui est conçue pour le jeton ERC20 est un appel de contrat qui contient des paramètres codés et une signature de fonction. Les appels de fonction dans la machine virtuelle Ethereum sont spécifiés par les quatre premiers octets de données envoyés avec une transaction. Ces signatures de 4 octets sont définies comme les quatre premiers octets du hachage de la représentation canonique de la signature de la fonction. Cela signifie que les fonctions "transfer (address, uint256)" et "send (address, uint256)" auront des signatures différentes. Par conséquent, l'entrée conçue pour le jeton ERC20 ne sera pas valide pour le jeton ERC777. "Comme nous utilisons notre définition de rétrocompatibilité, ERC777 n'est pas compatible avec la norme de jeton ERC20."

Quand utiliser quelle norme

ERC20: Reddit utilisateur / Dexaran nous a donné ce conseil sarcastique, "Quand vous voulez que vos investisseurs perdent de l'argent à cause de bugs."

ERC223: Cette norme de jeton est également utilisable avec ERC777. ERC777 a quelques caractéristiques élégantes qui manquent à ERC223, mais la logique de ERC223 est simple comparée à ERC777 qui peut garantir qu'elle contienne beaucoup moins de code sujet aux erreurs. De plus, ERC223 ne s'appuie sur aucun service central, ce qui signifie que votre jeton ERC223 ne dépendra que de votre propre implémentation. Comme nous l'avons mentionné précédemment, ERC223 vise à améliorer la sécurité, mais cela a rendu les jetons ERC223 non conformes aux normes ERC20.

ERC777: Ce standard de jeton est déjà utilisable. D'un autre côté, ERC777 a quelques problèmes de sécurité comme mentionné ci-dessus. Ils s'appuient également sur le registre central des contrats, qui constitue également un problème de sécurité. Un registre central peut faciliter la vie du développeur, mais il agit également comme un point de défaillance central exactement comme avec Parity Multisig. Tous les multisigs de parité s'appuyaient sur une bibliothèque de code centrale. Il est arrivé qu'il y avait un bug dans la bibliothèque et il a été exploité. En conséquence, tous les Multisigs de parité se sont écrasés. En outre, ERC777 définit un nouvel ensemble de fonctions. Ceci est une tentative pour permettre aux développeurs de jetons de rendre leurs jetons compatibles avec les standards ERC20 et ERC777 simultanément pour des raisons d'adoption. Cela signifie qu'un développeur peut hériter d'un bogue de ERC20 dans ERC777, mais cela permet à un développeur d'utiliser davantage d'événements de gestion de transaction.

En général: Tous les jetons ont un cas d'utilisation similaire - ICO. Je dirais que ERC223 et ERC777 essayent de résoudre un problème d'ERC20 de différentes manières. ERC223 prend déjà sa place dans Ethereum Classic au lieu de l'ERC20.



Viens faire un tour sur notre communauté Telegram!
Tu y retrouveras tout ce dont tu as besoin pour la crypto : des reviews d'ICO, notre spreadsheet, des articles de tout niveau, du trading et les dernières informations!

🙏 |Si tu aimes cet article, n'hésite pas à upvoter / commenter / resteemer

🙌 | Si tu aimes notre travail et que tu veux nous soutenir en nous faisant un don en ETH, c'est par ici : 0x27D31fa37FA5dC2B19134302517e27342b649F2a

Sort:  

Congratulations @azorgroup! You have completed some achievement on Steemit and have been rewarded with new badge(s) :

Award for the number of posts published
Award for the number of upvotes received

Click on the badge to view your Board of Honor.
If you no longer want to receive notifications, reply to this comment with the word STOP

Do not miss the last post from @steemitboard!


Participate in the SteemitBoard World Cup Contest!
Collect World Cup badges and win free SBD
Support the Gold Sponsors of the contest: @good-karma and @lukestokes


Do you like SteemitBoard's project? Then Vote for its witness and get one more award!

Coin Marketplace

STEEM 0.24
TRX 0.21
JST 0.036
BTC 97936.99
ETH 3366.06
USDT 1.00
SBD 3.35