Author

Topic: Annuler une transaction sur un token Ethereum... (Read 147 times)

sr. member
Activity: 810
Merit: 444
Petit mémo pour les débutants tout de même au sujet des transactions de token sur la blockchain Ethereum.

Le système de fees est vraiment pervers sur Ethereum et je comprends maintenant pourquoi je vois si souvent des transactions avec des fees si élevées, bien plus que ce que l'état de la mempool demande : les gens ont trop souvent des problèmes avec ces transactions et veulent "assurer le coup", quitte à payer 10 fois ce qui serait nécessaire en fees de transactions.
La perversion avec les smarts contracts sur lesquels sont adossés les tokens Ethereum réside que dans les fees, vous devez payer à la fois les fees pour la blockchain Ethereum et ceux pour l'exécution du smart contract : le problème, c'est que vous ne pouvez pas régler les fees pour chacune de ces tâches indépendamment, donc la blockchain Ethereum se sert en premier (la transaction est effectuée sur la blockchain Ethereum) en prenant tous les fees qu'elle souhaite et il n'en reste au final pas suffisament pour l'éxécution du smart contract, donc au final vos tokens ne sont pas transférés et vous perdez vos fees car vous devez recommencer...

Pourriture d'Ethereum !!!
sr. member
Activity: 810
Merit: 444
Je continue et ce sera la conclusion de mon feuilleton, en espérant que cela puisse être utile à d'autres dans le futur.

La procédure d'annulation d'une transaction fonctionne donc parfaitement et c'est bien une annulation (car même nonce), par un rajout de fees : il faudra donc refaire la transaction d'origine si elle est toujours d'actualité (en augmentant les fees si c'était cela la cause de son blocage dans la mempool.

Oui, les frais sont exactement ce que j'avais déduis dans mon post précédent : 0,000861 ETH (il y a d'ailleurs un ultime message de confirmation dans MEW où ils sont marqués en clair, mais je ne m'étais pas risqué jusque là).

Merci à ceux qui auront contribués à ce topic.
sr. member
Activity: 810
Merit: 444
Ce qu'il faudrait savoir maintenant c'est comment modifier ce nonce.
Ou en tous cas attribuer le nonce d'une transaction precedente à une nouvelle...
Dans MEW, les champs sont pré-remplis.
Par contre, il y a un soucis avec les unités :
La gaz limite est fixée à 21000 et le prix du gaz est fixé à 41000000000 gwei...
Je pense qu'il y a un facteur 1000 sur la gaz limite, mais même en comptant 21 au lieu de 21000, cela fait 861 ETH.
En appliquant le même facteur correctif sur le prix du gaz en comptant 41000000 au lieu de 41000000000, cela fait tout de même 0,861 ETH, ce qui enlève tout l'intérêt de l'annulation de la transaction dans la majorité des cas.

Je trouve que le système Ethereum est vraiment peu soucieux de ses utilisateurs en jouant ainsi avec des facteurs 1000 un peu partout : il est clair que cela ne peux que aboutir à de nombreuses erreurs.

Au final, je n'ai aucune certitude quand au montant des frais pour cette transaction.
Bon, je corrige, selon mes dernières déductions :

En fait, il ne s'agirait pas de 41000000000 gwei, mais de 41000000000 wei, soit 41 gwei (giga wei, soit 10^9).
Donc la transaction coûterai au final 0.00086 ETH, soit 0,83 €.
Pas simple de s'y retrouver quand on fait 1 transaction occasionnellement : je plains madame Michu.
sr. member
Activity: 810
Merit: 444
Ce qu'il faudrait savoir maintenant c'est comment modifier ce nonce.
Ou en tous cas attribuer le nonce d'une transaction precedente à une nouvelle...
Dans MEW, les champs sont pré-remplis.
Par contre, il y a un soucis avec les unités :
La gaz limite est fixée à 21000 et le prix du gaz est fixé à 41000000000 gwei...
Je pense qu'il y a un facteur 1000 sur la gaz limite, mais même en comptant 21 au lieu de 21000, cela fait 861 ETH.
En appliquant le même facteur correctif sur le prix du gaz en comptant 41000000 au lieu de 41000000000, cela fait tout de même 0,861 ETH, ce qui enlève tout l'intérêt de l'annulation de la transaction dans la majorité des cas.

Je trouve que le système Ethereum est vraiment peu soucieux de ses utilisateurs en jouant ainsi avec des facteurs 1000 un peu partout : il est clair que cela ne peux que aboutir à de nombreuses erreurs.

Au final, je n'ai aucune certitude quand au montant des frais pour cette transaction.
member
Activity: 109
Merit: 11
Ce qu'il faudrait savoir maintenant c'est comment modifier ce nonce.
Ou en tous cas attribuer le nonce d'une transaction precedente à une nouvelle...

Tu dois pouvoir le faire sur MeW. Avant d'envoyer une transaction, MeW t'affiche en général le json qui va être envoyé, en regardant dans les champs du json je suis presque persuadé qu'on y trouvera le fameux nonce.
legendary
Activity: 2604
Merit: 2353
Ce qu'il faudrait savoir maintenant c'est comment modifier ce nonce.
Ou en tous cas attribuer le nonce d'une transaction precedente à une nouvelle...
sr. member
Activity: 810
Merit: 444
Effectivement, sur cette source https://myetherwallet.github.io/knowledge-base/transactions/check-status-of-ethereum-transaction.html, je lis, au sujet de l'annulation d'une transaction :
Quote
The easiest way to do this is by sending a 0 ETH transaction to your own address with the same nonce and higher gas price. This will "cancel" your first transaction.

Pour ce qui est nonce, en voici la définition :
Quote
In Ethereum, every transaction has a nonce. The nonce is the number of transactions sent from a given address.

Each time you send a transaction, the nonce increases by 1. There are rules about what transactions are valid transactions and the nonce is used to enforce some of these rules. Specifically:

    Transactions must be in Order: You cannot have a transaction with a nonce of 1 mined before one with a nonce of 0.

    No Skipping! You cannot have a transaction with a nonce of 2 mined if you have not already sent transactions with a nonce of 1 and 0.

J'avais vu cette histoire de nonce, mais à force de voire des hash de transaction, je pensais que ce nombre entier ne pouvais pas identifier ma transaction : en fait, c'est simplement le compteur de transactions sur mon adresse.

Merci donc Asone pour ta réponse qui m'a permis de ne pas m"arrêter à ce nombre entier.
member
Activity: 109
Merit: 11
Soit une transaction 1 sur la blockchain Ethereum, concernant un token Ethereum plus exactement, bloquée dans la mempool pour insuffisance de fees j'imagine (transaction 1).
J'ai lu que pour annuler cette transaction bloquée dans la mempool Ethereum, il fallait créer une nouvelle transaction vers l'adresse Ethereum de départ (la sienne donc), d'un montant de 0 ETH et chargée en GAS à un bon prix (GWEI) : c'est la transaction 2.
J'imagine que cela ne fait que annuler la transaction 1 et que, ensuite, il faut refaire la transaction d'origine avec plus de GAS et GWEI : c'est la transaction 3.

Je comprends bien que la transaction d'annulation (transaction 2) sera minée avant la transaction 1 car son montant de fees ne la bloquera pas dans la mempool. Mais je ne comprends pas pourquoi cette transaction 2 annulerai la transaction 1... Pourquoi se virer à soi-même 0 ETH devrait annuler la transaction d'origine ?

Si une bonne âme veux bien m'expliquer...  

Il me semble que pour ça il faut que tu donnes le même nonce que la transaction précédente.

Ce qu'il va se passer en faisant cela c'est que les noeuds lorsqu'ils vont enregistrer la transaction 2 en premier, enregistreront normalement le nonce de la transaction. Lorsque la transaction 1 sera traitée à son tour, le nonce ayant déjà utilisée, la transaction 1 sera rejetée automatiquement.

Que quelqu'un me corrige si j'ai tort, mais il me semble que c'est la logique qui est derrière cela.
sr. member
Activity: 810
Merit: 444
Soit une transaction 1 sur la blockchain Ethereum, concernant un token Ethereum plus exactement, bloquée dans la mempool pour insuffisance de fees j'imagine (transaction 1).
J'ai lu que pour annuler cette transaction bloquée dans la mempool Ethereum, il fallait créer une nouvelle transaction vers l'adresse Ethereum de départ (la sienne donc), d'un montant de 0 ETH et chargée en GAS à un bon prix (GWEI) : c'est la transaction 2.
J'imagine que cela ne fait que annuler la transaction 1 et que, ensuite, il faut refaire la transaction d'origine avec plus de GAS et GWEI : c'est la transaction 3.

Je comprends bien que la transaction d'annulation (transaction 2) sera minée avant la transaction 1 car son montant de fees ne la bloquera pas dans la mempool. Mais je ne comprends pas pourquoi cette transaction 2 annulerai la transaction 1... Pourquoi se virer à soi-même 0 ETH devrait annuler la transaction d'origine ?

Si une bonne âme veux bien m'expliquer...  
Jump to: