LE NEWS SU ETHEREUM IN ITALIA

Menu
Home » Wallet » [Come fare a] Cancellare o sostituire una transazione Ethereum in pending

[Come fare a] Cancellare o sostituire una transazione Ethereum in pending

21 agosto 2018 20:45
Tempo di lettura: 8 min.
21 agosto 2018 20:45
Giuseppe Brogna

Se la rete è intasata, con la tua transazione che è ferma da diverse ore, sei nel posto giusto per conoscere come cancellare o sostituire una transazione Ethereum in pending.

Leggendo questa guida, scoprirai le logiche alla base delle transazioni di Ethereum, perché una transazione può rimanere bloccata, e come procedere a cancellare o sostituire una transazione Ethereum.

Alla fine avrai le indicazioni passo passo per cancellare una transazione attraverso MyEtherWallet.

Perché una transazione può restare in pending per molto tempo?

Devi sapere che una transazione può restare in “pending” anche per molte ore, o addirittura giorni.

Questo inconveniente si verifica nei casi in cui la richiesta di transazioni sulla rete è elevata.

Se a ciò si aggiunge l’utilizzo di una quantità di gas price troppo bassa, in relazione alla media, la transazione non sarà appetibile per i miner.

Questi la lasceranno giacere nella pool delle transazioni, almeno fino a quando non avranno smaltito il carico delle transazioni che offrono loro maggiori fee.

Se per varie ragioni non sei disposto ad attendere il tempo stimato – che, a seconda del traffico sulla rete e del gas price utilizzato, potrebbe essere anche di svariati giorni -, hai bisogno di cancellare o sostituire una transazione Ethereum.

Come prevenire il blocco di una transazione?

Prima di spiegarti come cancellare o sostituire una transazione Ethereum, voglio darti dei suggerimenti su come evitare di trovarti nella spiacevole situazione di dover sbloccare una transazione.

Innanzitutto, dapprima di inviare una qualunque transazione, ti consiglio di visitare sempre il sito ETH Gas Station.

Su questa pagina, in base alle condizioni correnti della rete, ti viene suggerito l’ammontare di gas price da utilizzare.

A seconda che tu desideri un invio tempestivo, di velocità media oppure più lento, ma comunque sicuro, attieniti alle indicazioni di ETH Gas Station.

Se stabilisci il gas price in maniera conforme ai suggerimenti della pagina, non dovrai mai più porti il problema di cancellare o sostituire una transazione Ethereum.

Come puoi notare dall’immagine, al momento della scrittura della guida la rete è libera.

2 Gwei di gas price sono sufficienti per far processare la transazione in pochissimi minuti (Standard si riferisce a una transazione validata in meno di 5 minuti).

Il modello delle transazioni di Ethereum

È necessario, inoltre, sapere che il modello delle transazioni di Ethereum è molto diverso da Bitcoin.

Ethereum si basa su un “modello account”.

Invece di utilizzare gli UTXO (unspent transaction output), l’unicità e l’ordine delle transazioni vengono raggiunti utilizzando il “Nonce” della transazione.

Quest’ultimo viene incrementato per ogni transazione di un account.

Il suo valore è effettivamente il numero di transazioni inviate da un dato indirizzo, e deve essere incluso in ogni transazione.

Tale meccanismo comporta che:

1) le transazioni devono essere processate in ordine (la transazione con un nonce di 1 deve essere processata prima della transazione con un nonce di 2);

2) non sono ammesse sovrapposizioni (la transazione con un nonce di 4 non può essere inclusa in un blocco finché non vengono processate le transazioni con i nonce di 1, 2, 3).

Quando una transazione è in attesa di essere minata, tutte le transazioni successive vengono bloccate.

Non possono essere incluse in un blocco finché non è inclusa quella precedente (come determinata dal valore del precitato nonce).

Hai capito quindi che è inutile generare in progressione transazioni con un gas price molto elevato.

Semplicemente, non possono essere processate. Non si può rompere l’ordine delle transazioni e produrre uno stato diverso dal previsto.

Quando ciò accade, l’account è a tutti gli effetti bloccato.

Quando una transazione può essere cancellata o sostituita?

Onde evitare errori banali, è essenziale sapere che è possibile cancellare o sostituire una transazione Ethereum, soltanto se non è stata ancora minata ed inclusa in un blocco.

In altre termini, anche se la transazione è stata propagata ai nodi, deve giacere nella pool delle transazioni.

Considera che nei momenti di normale funzionamento della rete, una transazione viene inclusa nel primo blocco utile in pochi secondi, rendendo impossibile cancellare o sostituire una transazione Ethereum.

Ethereum genera un blocco ogni 15 secondi circa, il che vuol dire che se la rete funziona normalmente la possibilità di cancellare o sostituire una transazione Ethereum rasenta l’impossibile.

Meglio cancellare o sostituire una transazione?

Cancellare una transazione Ethereum vuol dire generare una nuova transazione del valore di 0 Ether verso il proprio indirizzo.

Sostituire una transazione Ethereum equivale a generare una transazione di n Ether verso l’indirizzo di qualcun’altro.

In generale, si consiglia di cancellare la transazione Ethereum anziché sostituirla.

Infatti, in caso di sostituzione si corre il rischio che la transazione precedente venga minata per prima, invalidando la seconda transazione che si desiderava inviare.

All’atto pratico

Ora che hai compreso le logiche alla base delle transazioni di Ethereum, ti verrà naturale capire come comportarti se la tua transazione è destinata a restare in pending per lungo tempo.

Innanzitutto, verifica lo stato della transazione.

Vai su Etherscan e inserisci l’hash della transazione nel campo delle ricerche.

Se lo stato della transazione è “success” non puoi fare niente, mentre se è “pending” puoi procedere a cancellare o sostituire una transazione Ethereum.

Per cancellare o sostituire una transazione Ethereum è necessario generarne una nuova che sia più attrattiva per i miner.

Tuttavia, ricollegandoci a quanto ti ho spiegato a riguardo del “modello account” di Ethereum, la soluzione risiede nell’inviare una nuova transazione con lo stesso nonce, ma con gas price più elevato.

Attenzione! È necessario che il nonce sia lo stesso di quello della transazione precedente.

Cancellare e sostituire una transazione Ethereum (esempi)

Ad esempio, ecco come si può sostituire una transazione Ethereum bloccata a causa del basso gas price:

Nota che il gas price è pari a 1 Gwei. L’invio della transazione con un gas price più elevato (qui 10 Gwei) sostituisce la transazione precedente:

Nota che l’indirizzo di invio (“From”) e “Nonce” sono gli stessi in entrambe le transazioni.

Questi due valori identificano la transazione e consentono di sovrascriverla.

Invece, come detto, il gas price è stato aumentato per rendere la transazione più appetibile per i miner.

Se, invece, hai intenzione di cancellare una transazione Ethereum, va premesso che Ethereum non prevede meccanismi per rimuovere una transazione dalla pool delle transazioni.

Ecco allora che ci viene in soccorso un “escamotage” che consente di ottenere un effetto simile.

È possibile sovrascrivere la transazione con informazioni diverse, cioè un trasferimento di valore 0 allo stesso mittente.

Devi sapere che da un punto di vista formale viene comunque eseguita una transazione, che deve pertanto essere minata.

Rifacendoci all’esempio della transazione precedente, bloccata perché inviata con 1 solo Gwei di gas price, deve essere ripropagata in questo modo:

Nota che ora l’indirizzo di destinazione (“To”) è stato modificato, e corrisponde allo stesso indirizzo di invio (“From”).

Inoltre il valore della transazione è 0, e non più 0,005 Ether.

Ogni volta che una transazione viene cancellata o sostituita, il nuovo gas price deve essere superiore di oltre il 10% rispetto a quello precedente.

Non deve comunque essere inferiore a quanto consigliato da ETH Gas Station in quel determinato momento.

Quindi, ad esempio, il tentativo di cambiare il gas price da 20 Gwei a 21 Gwei (inferiore al 10%) non avrà successo. La transazione originale resterà nella pool delle transazioni.

Guida passo passo per cancellare una transazione Ethereum attraverso MyEtherWallet

1) Vai su MyEtherWallet nella sezione “Send Offline”;

2) in “From Address” inserisci il tuo indirizzo e clicca su “Generate Information”;

3) in “To Address” devi inserire il tuo stesso indirizzo, quello con cui hai appena compilato il campo “From Address” (ti ricordo che per cancellare una transazione devi inviarne un’altra al tuo stesso indirizzo);

4) in “Value / Amount to send” inserisci 0;

5) in “Gas Limit” lascia il valore impostato di default;

6) in “Gas Price” inserisci l’ammontare che ETH Gas Station ti suggerisce in base allo stato della rete. È opportuno farti notare che ETH Gas Station indica il valore in Gwei, mentre in questo campo MyEtherWallet lo richiede in Wei (con 9 zeri in più). Se hai paura di sbagliare, utilizza questo tool per la conversione;

7) in “Nonce” devi inserire il nonce della transazione che intendi cancellare. Poiché hai già cliccato su “Generate Information” al punto 1), il campo “Nonce” dovrebbe essere già compilato;

8) il campo “Data” deve essere lasciato vuoto;

9) dopo aver compilato tutti i campi, in fondo alla pagina sblocca e accedi al tuo wallet. Presta sempre molta attenzione a non essere su un sito di phishing;

10) clicca su “Generate Transaction”;

11) infine clicca su “Send Transaction” e conferma.

Hai appena firmato e propagato una transazione che cancellerà la precedente!

Conclusioni

Ti ho spiegato tutto quello che c’è da sapere per cancellare o sostituire una transazione Ethereum in pending.

Spero che questa guida ti sia stata utile per comprendere le logiche alla base delle transazioni di Ethereum, e come comportarti per cancellare o sostituire una transazione Ethereum bloccata.

Se hai dubbi, o suggerimenti su come migliorare la guida, oppure per altre guide, non esitare a scriverci.

DISCLAIMER: Questa guida è a solo scopo informativo. Non ci assumiamo responsabilità in caso di utilizzo improprio e per conseguenze non prevedibili o non previste al momento della sua scrittura. Se non sei esperto, non compiere operazioni delicate senza l’ausilio di un utente avanzato.

***

Non perderti i nostri aggiornamenti e approfondimenti su Ethereum e il mondo criptovalute. Compila il form qui sotto! Riceverai i video sulla compravendita e messa in sicurezza degli Ether, e tutte le nostre nuove guide e ricerche sul tema blockchain. È gratis!

ACCEDI ORA AI VIDEO GRATUITI














SPUNTA il checkbox qui a lato PER OTTENERE la GUIDA GRATUITA.
In più, ti invieremo successivamente delle email contenenti il frutto delle nostre ricerche più avanzate su ethereum e criptovalute e dettagli sui nostri servizi legati alle criptovalute. Tratteremo i tuoi dati personali con la massima cura e in conformità della normativa privacy GDPR UE2016/679. Se lo vorrai potrai disiscriverti in qualsiasi momento e con un semplice click. La tua preparazione sugli investimenti in ether e criptovalute sta per prendere il volo.

Condividi
  • 13
    Shares

Articoli che potrebbero interessarti

27 agosto 2018

[Cosa è?] Hash (TxID) di una transazione Ethereum

Hash di una transazione Ethereum ("transaction ID" o "TxID"): cosa è,...

Leggi tutto

CATEGORIE:

Wallet


Giuseppe Brogna

Giuseppe è laureato in giurisprudenza, da sempre appassionato di tecnologia e studioso di tematiche economiche. Stimolato dal potenziale impatto economico e sociale, si approccia al mondo delle DLT; matura particolari interessi nella nuova finanza hitech legata alle tecnologie del ledger distribuito.


  1. ha commentato:

    Complimenti Giuseppe, guida ESTREMAMENTE interessante.

    Attualmente mi trovo in una condizione un po’ diversa e vorrei chiedere a te un suggerimento/aiuto: dopo aver fatto un deposito dal mio wallet su un exchange, sembra che una transazione sia andata in errore per GAS insufficiente mentre i miei ETH venivano spostati da un indirizzo all’altro tramite uno smart contract, col risultato che sono rimasti “incastrati” all’interno dell’exchange.
    Dopo ripetuti solleciti all’exchange, il loro supporto continua a dire che la responsabilità è dei gestori del wallet (Eidoo) che non hanno garantito gas sufficiente, mentre Eidoo attribuisce la colpa all’exchange.
    Il risultato è che al momento i miei eth sono “bloccati” e non so come recuperarli.
    Siccome questa cosa sta andando avanti da mesi, io sono disperato e cerco qualcuno che possa aiutarmi!

    • ha commentato

      Ciao Sergio, mi dispiace per quello che ti è accaduto.
      Tuttavia mi sfugge qualcosa. Dici che la transazione non recava gas a sufficienza. In caso di “out of gas” gli ether resterebbero sul tuo wallet, però tu dici che c’è stato comunque un trasferimento.

      • ha commentato:

        Esatto.
        Io ho trasferito gli eth sull’indirizzo fornitomi dall’exchange.
        Il trasferimento risulta Failed su etherscan ma gli eth NON sono tornati indietro.

        Questo perchè (da quel che ho capito) il gas è stato sufficiente per depositare gli eth sull’indirizzo a cui li ho mandati, ma NON è stato sufficiente per il trasferimento di questi ultimi verso un altro indirizzo interno tramite uno smart contract dell’exchange.

        Se potessi contattarmi privatamente potrei mandarti il codice della transazione, così capiresti meglio.

        • ha commentato

          ok attendo di controllare la transazione.

          • ha commentato

            Lo stato della tua transazione è:

            “TxReceipt Status: Fail”

            Vuol dire che l’intera transazione non è andata a buon fine, e gli Ether che hai tentato di inviare sono stati restituiti al tuo account, al netto ovviamente delle fee che hai dovuto pagare ai miners per il gas comunque consumato.

            Con riguardo al contratto verso cui hai tentato di inviare i fondi, risulta:

            “Although one or more errors occured [Out of gas] contract execution completed.”

            Dovrebbe significare che alcune operazioni intermedie (chiamate “internal transactions”) sono state compiute. Ma siccome la transazione complessiva è “reversed”, la stessa sorte tocca a queste ultime, come se non fossero mai esistite.

            Ciò dovrebbe riguardare il trasferimento di cui parlavi, cioè quello interno da un indirizzo a un altro dell’exchange tramite lo smart contract.

            Dopo un confronto con gli altri ragazzi del team, riteniamo che il problema potrebbe risiedere nel wallet che non gestisce un revert quando la transazione proviene da un contratto.

            È un problema che è stato spesso riscontrato in passato in alcuni wallet.

            Oltre a darti una possibile chiave di lettura, noi non possiamo fare altro.

            Non ti resta che controllare col supporto del tuo wallet.

  2. ha commentato:

    Grazie Giuseppe, sto scrivendo al support.

    Se vorrai, ti terrò aggiornato sull’esito.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Condividi questo articolo

Invia questo articolo ad un amico