Nekr Profile picture
Lead Blockchain - Lead Developer - J'explique les concepts Blockchain & Web3 avec des mots simples.

Aug 2, 2022, 24 tweets

[#THREAD] Peut-on faire confiance à Etherscan ?

C'est l'OUTIL par excellence pour s'informer sur ce qu'il se passe sur la blockchain...

Mais peut-on le faire mentir ? 🧵

C'est ce que nous allons voir !

#Web3 #Solidity #NFT #Crypto #ETH #Ethereum #Etherscan #Snowtrace

⬇️

Comme d'habitude, vous pouvez suivre ce thread avec le code sous les yeux (ou même l'appliquer en même temps).

Tout est disponible sur mon #GitHub :

github.com/0xNekr/Ethersc…

N'hesitez pas à me suivre là-bas si vous voulez voir en avance le code que je poste !

Lorsqu'un token est mis en place sur une blockchain comme Ethereum, nous pouvons consulter de nombreuses informations depuis les explorateurs de block comme etherscan.io.

Prenons l'exemple de $LINK, on peut voir que sa supply est de :

Mais peut-on faire confiance à etherscan pour nous donner cette information cruciale au niveau de la tokenomics d'un projet ? De même pour les holders ?

Et bien non... et on va voir à quel point il est simple de duper notre explorateur de block préféré.

⬇️

Pour commencer, voici comment créer un token #ERC20 tout à fait classique.

Bien sûr il est basique au possible, on va juste créer un token "NEKR-C" et en mint 10 pour le propriétaire du contrat.

Jusque là tout va bien ! (oui c'est aussi simple, il suffit d'importer ERC20 d'OZ)

Une fois le contrat déployé (sur rinkeby), tout est visible sur Etherscan (ici rinkeby.etherscan.io).

rinkeby.etherscan.io/token/0x6C02be…

Et on peut voir que la total supply de mon token $NEKR-C est bien de 10.

Tout est parfait ! L'explorateur ne nous cache rien.

Maintenant on regarde du côté de M*tamask pour être sûr que je possède bien mes 10 tokens en important le jeton...Et tout semble parfait.

Résumons ⬇️

Etherscan : 10 NEKR-C
M*tamask : 10 NEKR-C

Le compte est bon !

Passons du côté des vilains.

Je décide de créer un projet et j'ai envie de mentir un peu sur ma tokenomic sans me faire repérer.

Voici comment je vais développer mon $NEKR-H, un fork de $NEKR-C en plus trompeur...

Décryptons ensemble notre contrat !

Dans les imports, je vais importer ERC20 d'OpenZeppelin en local sur mon environnement de dev.

Pourquoi ? Pour modifier un petit paramètre dans le contrat d'origine.

La manip est simple, dans ERC20.sol je change la propriété de "_balances" de "private" à "internal".

Pourquoi?

Si vous avez suivi mes précédents threads vous comprenez pourquoi, sinon, petit rappel :

• private : seul le contrat ERC20.sol peut avoir accès à cette variable.
• internal : je vais pouvoir modifier cette variable via mon contrat.

Et c'est tout pour ERC20.sol !

Retournons sur le contrat du NEKR-H.

Regardons le constructeur, globalement c'est le même que sur mon contrat legit.

Sauf qu'en plus de mint 10 NEKR-H pour le propriétaire nous allons modifier sa balance sans passer par le mint... C'est là que la magie opère...

Déployons !

Rendez vous sur Etherscan :

rinkeby.etherscan.io/token/0x14936D…

Vous pouvez aller regarder par vous même, la supply est de 10 NEKR-H...

Nous avons bien une transaction de mint avec une quantité de 10 tokens !

Maintenant ajoutons le token à M*tamask !

Et là, c'est le drame...

20 NEKR-H alors qu'Etherscan nous indique 10 NEKR-H de Supply...

Mais comment est-ce possible ?

Pour comprendre il faut aller décortiquer la fonction de mint d'ERC20

⬇️

Voici ce que fait la fonction de mint d'ERC20 :

Elle augmente la variable "_totalSupply" et ensuite elle met à jour la variable "_balances" d'un utilisateur.

Ensuite elle émet un évenement pour dire qu'un transfert a eu lieu.

Et comment fonctionne Etherscan ?

Il se sert de la variable "_totalSupply" afin d'afficher notre supply max.

Et il se sert des évenements pour modifier la balance des propriétaires...

Vous l'aurez compris, nous avons dupé l'explorateur.

Enfin pas totalement,

Nous avons bien bypass l'augmentation de "_totalSupply" mais l'événement s'est déclenché quand même grâce au "_mint" que nous avons fait avant.

Ce qui fait que si nous regardons les "holders" du token sur Etherscan nous observons ceci :

J'ai 20 NEKR-H!

Sauvé !

Il suffit de bien analyser la section "holders" d'un token pour être sûr que tout est en règle !

Et bien non désolé...

Voici ma nouvelle fonction, elle, elle ne déclenchera aucun événement, elle vient simplement augmenter la balance de qui je veux !

Utilisons la !

La transaction :

rinkeby.etherscan.io/tx/0x086b766c0…

Elle a bien eu lieu, regardons sur Etherscan le résultat :

rinkeby.etherscan.io/token/0x14936D…

Il semblerait que rien n’ait bougé de ce côté là ! Pour le moment tout est (presque) normal.

Et pourtant sur mon portefeuille...

Et oui, j'ai bien 10 NEKR-H de plus !

J'ai créé un token qui est invisible sur l'explorateur de block alors qu'il est bien présent sur la blockchain !

Transparence ? Pas vraiment sur ce coup !

Et je vous rassure, la blockchain et M*tamask ne verrons aucun soucis à ce que je transfère ces tokens !

Comme le transfert déclenche des événements, ceci chamboulera un peu tout, mais rien ne m'empêche d'écraser ces fonctions de transfert pour modifier le code !

La solution ?

Et bien la solution est simple, apprenez à minima à lire un contrat pour déceler ce genre d'anomalies.

Ne prenez pas pour acquis ce que vous dit Etherscan.

Verifiez bien que le contrat avec lequel vous voulez interargir est vérifié et lisible !

DYOR !

Si vous ne savez pas lire un contrat, vous pouvez vous abonner à mon compte.

J'essaie de vous transmettre les bases au travers des différents threads que je propose.

Même si vous n'êtes pas développeur vous pouvez et devez comprendre comment fonctionne notre écosystème !

J'espère vous avoir appris quelque chose aujourd'hui.

N'oubliez pas que la plupart des tokens sont quand même legit, et que la communauté sait déceler ce genre de problème.

Mais il est important de savoir que c'est possible et comment c'est possible !

Merci de m'avoir lu.

Si ça vous a plu, le meilleur moyen de me soutenir c’est

- aimer
- retweet

Juste ici ⬇️

Share this Scrolly Tale with your friends.

A Scrolly Tale is a new way to read Twitter threads with a more visually immersive experience.
Discover more beautiful Scrolly Tales like this.

Keep scrolling