Comment contourner l'interface d'échange IDEX et deux centimes sur la méta-transaction

Cet article a été publié pour la première fois sur Wisent Capital.

Après avoir audité le contrat IDEX d’échange d’EDEX Solidity smart, j’en ai appris beaucoup sur son fonctionnement et, à ma grande surprise, cette information est devenue très utile beaucoup plus tôt que je l’imaginais. Comme vous le découvrirez dans cet article, il existe un moyen de retirer l’éther et les jetons ERC20 de l’échange en contournant l’interface utilisateur frontale IDEX. Mais avant d’aborder cette question, commençons par comprendre les raisons pour lesquelles et quand vous en auriez besoin.

Point important, IDEX, dans sa forme actuelle, n’est pas un échange totalement sans confiance. Une fois que vous avez déposé vos fonds cryptographiques et commencé à trader, vous n’interagissez pas directement avec la blockchain Ethereum. La plupart du temps, vous dépendez d'IDEX pour interagir avec le contrat intelligent en votre nom. Ce que vous faites est de signer des messages d'intention (par exemple, des jetons d'échange contre de l'éther, de retirer des fonds) et ces messages sont ensuite placés dans la blockchain ou dans un autre mot relayé par IDEX en votre nom.

Je voudrais attirer votre attention sur deux points essentiels.

Le premier est l’idée de relayer les transactions. C’est précisément pour cette raison que IDEX est devenu moins cher, plus rapide et plus facile à utiliser que l’échange en chaîne complet tel que EtherDelta. Le relais des transactions est un concept très puissant, et passé au niveau supérieur, il devient ce que l'on appelle des transactions sans méta ou sans gaz. Il permet d’envoyer de l’éther ou des jetons ou d’interagir avec des contrats intelligents de toute autre manière à partir de comptes vides, sans avoir à conserver d’éther pour payer les frais de transaction appelés gaz. Cette approche révolutionne la manière dont les utilisateurs s’intègrent à Ethereum et améliore considérablement leur expérience tout en ouvrant de nouvelles portes pour des applications de blockchain innovantes. Tenzorum est l’un des projets phares de cet espace que vous devriez surveiller. Il y a aussi un nouvel échange en ville, similaire à l'architecture IDEX, mais permettant de négocier des options sur des jetons ERC20 appelés DexBrokerage. Si vous souhaitez en savoir plus sur la manière de parier sur le prix futur des jetons, consultez cet article Options d’appel et de vente décentralisés sur Dex Brokerage Explained par Alex George.

Et la deuxième conclusion est que l’échange n’est pas totalement sans confiance. Je ne dis pas que vous ne pouvez pas faire confiance à IDEX, ce que je dis, c'est que si, pour une raison quelconque, un problème technique, leur interface ou leur back-end ne fonctionne plus, vos fonds sont bloqués. En d’autres termes, si vous ne pouvez pas transmettre vos messages par IDEX, vous ne pouvez pas retirer votre précieux crypto de cette façon. Ce qui m'est réellement arrivé et qui est devenu la principale motivation de ce poste, c’est que l’un des jetons que j’avais sur IDEX a été rayé de la liste et que je ne pouvais rien retirer de ce qui était commandé. Et comme il n’y avait plus de transaction, je ne pouvais pas les supprimer du carnet de commandes, ce qui voulait simplement dire que mes jetons étaient bloqués.

Et cela m'amène à comment vous pouvez les récupérer vous-même. Il existe une trappe d’urgence dans le contrat Solidity smart dans la fonction Retrait. Elle peut être appelée directement et réussir dans certaines conditions.

Alors, sans plus tarder, voici comment procéder. Tout d’abord, vérifiez quel est le solde exact d’un jeton donné pour votre compte déposé sur l’échange. Vous pouvez le faire directement sur Etherscan. Dans la fonction appelée jetons, insérez votre adresse de jeton en tant que premier paramètre ou 0x000000000000000000000000000000000000 pour ether. Et votre adresse de portefeuille en tant que deuxième paramètre. Cela devrait ressembler à quelque chose comme sur ma capture d'écran ci-dessous. Assurez-vous d'enregistrer le numéro. Dans mon cas, j'ai vérifié les jetons et mon solde est de 37891 ……

Vérifier le solde du jeton

Deuxièmement, un certain nombre de blocs doivent être passés lorsque vous avez effectué la dernière transaction. C'est ce qu'on appelle inactivityReleasePeriod et c'est comme un temps de recharge qui doit s'écouler avant que vous puissiez retirer quoi que ce soit directement. (et c’est pour vous empêcher de trop gâcher leur relais….). Il a été défini sur un minimum de 100 000 blocs (environ 17,5 jours), comme indiqué ici:

Période de libération d'inactivité par défaut

Dans mon cas, ce nombre est supérieur à celui-ci, mon appel de blockchain doit donc aboutir, sinon l'appel sera définitivement rétabli.

Numéro de bloc de la dernière transaction active

Nous pouvons maintenant passer à la dernière étape et retirer nos fonds. Le moyen le plus simple consiste à utiliser MyEtherWallet ou MyCrypto pour interagir directement avec le contrat intelligent déployé. J’ai utilisé ce dernier, alors dirigons-nous vers MyCrypto. Dans l'onglet Contrats, Interaction, vous devez coller l'adresse du contrat intelligent d'échange IDEX dans la zone Adresse du contrat, qui est 0x2a0c0dbecc7e4d658f48e01e3fa353f44050c208.

Et collez le texte ci-dessous dans la zone Interface ABI / JSON:

[{"Constant": false, "input": [{"name": "jeton", "type": "adresse"},
{"Nom": "montant", "type": "uint256"}], "nom": "retirer", "sorties": [{"nom": "succès", "type": "bool"}] , "Payable": false, "stateMutability": "non payable", "type": "fonction"}]

Maintenant, appuyez sur Access et dans le menu déroulant Lecture / Écriture, vous devriez voir, sélectionner Retirer et insérer 0x000000000000000000000000000000000000 pour ether ou votre adresse de jeton désignée dans l'adresse de jeton. Cela devrait ressembler à la capture d'écran ci-dessous:

Exemple de retrait d'IDEX via un contrat intelligent - partie 1

Ceci fait, vous devez signer la transaction en utilisant votre clé privée que vous avez stockée sur MetaMask / Ledger / Trezor / Portefeuille JSON, etc. Signez et envoyez la transaction comme suit:

Exemple de retrait d'IDEX via un contrat intelligent - partie 2

Une fois minée, cette transaction devrait enfin libérer votre éther ou vos jetons comme visible sur les captures d'écran suivantes:

Retrait d'éther réussiRetrait de jeton réussi

Pour conclure cette aventure de retrait, j'ai réussi à libérer mes jetons, mais cela a aussi gâché les soldes affichés avec IDEX. Comme mes jetons et mon éther avaient déjà été retirés, leurs soldes auraient dû être supprimés (et sur ordres également), mais comme vous pouvez le voir ci-dessous, ils ne l’étaient pas. Par conséquent, je ne recommanderais pas cette méthode de retrait, à moins que vos fonds ne soient vraiment bloqués.

Bilans vue sur IDEX

Avertissement: j’ai contribué au succès des projets Tenzorum et DexBrokerage en dirigeant leurs efforts en matière de blockchain. J’ai également aidé IDEX, via Toptal, à rechercher différentes manières d’améliorer les performances et l’optimisation de leurs gaz de leurs échanges.