In questo articolo vedremo come andare a sbloccare transazioni che risultano in “pending” da molto tempo su rete ethereum o EVM compatibili. In base al sistema delle gas fees di Ethereum, il tempo necessario a completare una transazione dipende non solo dalla sua complessità ma soprattutto dal prezzo del gas che abbiamo inserito.

In caso di rete congestionata, di fees troppo basse o di improvvisi aumenti di prezzo del gas, una transazione può richiedere più tempo del previsto. Mentre l’attesa è in media di qualche minuto, in genere fino a 30 minuti possiamo ancora stare tranquilli. Oltre la mezzora è il caso di verificare cosa è successo.

Il passaggio fondamentale consiste nell’andare a controllare su un blockchain explorer come Etherscan a che punto è la transazione.

Ogni volta che avviamo una transazione su una blockchain viene generata una stringa di identificazione chiamata Transaction Hash o Transaction ID. In molti wallet ed exchange è sufficiente individuare questa voce e cliccarci sopra per aprire automaticamente la pagina che la riguarda. Se così non fosse basta copiare manualmente la Transaction ID, visitare Etherscan e inserirla nel motore di ricerca interno. Apparirà una schermata come quella qui sotto, piena di informazioni interessanti tra le quali figura lo stato della transazione, che può essere ‘Success‘, ‘Failed‘, ‘Dropped‘ (abbandonata) o ‘Pending‘ (in sospeso).

In questo esempio abbiamo inviato 15 BAT (Basic Attention Token) con un gas price molto più basso di quello consigliato all’interno del wallet, apposta per farla bloccare a scopo dimostrativo.

Il portafoglio usato è un Trezor, e nell’applicazione Trezor Suite è prevista la possibilità di modificare i parametri delle gas fees. Al momento il gas price era di circa 80 Gwei e abbiamo inserito 50, livello non raggiunto da mesi.

Si tratta della transazione dell’immagine precedente, che come notiamo riporta un gas price di 50 Gwei. Su Etherscan i tempi di conferma vengono stimati in oltre un’ora ;).

Gas Price:

Tecnicamente non esiste una transazione ‘bloccata’ma decidiamo di considerare così le transazioni in sospeso delle quali non siamo in grado di prevedere l’esito.

Dato che il problema riguarda in sostanza il gas pricela soluzione più semplice consiste nell’alzare questo valore. Un numero sempre crescente di wallet presenta tale funzionalità direttamente all’interno dell’app. E’ sufficiente aprire la finestra della transazione in corso e selezionare la relativa opzione, che varia leggermente tra i vari software: ad esempio in MetaMask è la funzione indicata con ‘Speed Up‘ e in Trezor è la ‘Bump Fee‘.

In realtà una transazione una volta avviata non può essere né velocizzata né cancellatama solo rimpiazzata (ammesso che non sia stata ancora confermata) con una nuova operazione con gas price più alto.

In pratica sovrascriviamo la transazione in sospeso con una gemella, che, se questa volta usiamo un gas price alto a sufficienza, viene rapidamente selezionata dai miners/validators e quindi sostituisce quella vecchia. I portafogli si occupano dei processi necessari dietro le quinte.

In caso di wallet che non offrono opzioni di velocizzazione dobbiamo procedere manualmente. Anche se Trezor Suite ha queste funzionalità integrate nella sua interfaccia, qui non ne faremo uso ma illustreremo una soluzione universale applicabile anche da chi utilizza portafogli che non prevedono tali modifiche.

Nonce:

Entra in gioco un utilissimo parametro tecnico delle transazioni di Ethereum, sul quale possiamo agire per risolvere la situazione. Ogni transazione presenta un valore chiamato ‘nonce’ (che sta per ‘number only used once’, numero usato una sola volta).

Si tratta di una cifra che identifica inequivocabilmente ogni transazione eseguitasecondo una numerazione progressiva per ciascun indirizzo Ethereum. Iniziando da zero con la prima transazione mai fatta da un indirizzo, la seconda operazione avrà nonce 1, la terza 2 e così via.

Quando inviamo più transazioni da uno stesso indirizzo, queste vengono processate in ordine in base al nonce, e non è possibile passare alla transazione successiva finché quella precedente non viene confermata. Anche per questa ragione una transazione bloccata va sistemataperché in caso contrario il nostro indirizzo è di fatto inutilizzabile.

Possiamo sovrascrivere una transazione in sospeso mandandone una nuova con stesso nonce e gas price più alto.

Passaggi:

Per ‘velocizzare’ manualmente una transazione bloccata, e di fatto rimpiazzarla con una nuova, procediamo così:

  • Individuiamo il numero di nonce, o all’interno del wallet (tra i dati della transazione), o su Etherscan (viene mostrato in basso, dopo gas price e gas limit). Come notiamo nelle immagini precedenti, per la transazione del nostro esempio questo valore è 6.
  • Stabiliamo un gas price alto a sufficienza da garantirci di trarci velocemente di impaccio, altrimenti potremmo finire con due transazioni bloccate. Su EthGasStation leggiamo il costo di una transazione veloce e usiamo quello, anche se spendiamo un po’ di più. In ogni caso non avviamo una nuova transazione con un gas price che non sia almeno del 10% superiore a quello precedente o rischiamo di essere ignorati dai miners/validators.
  • Avviamo una transazione identica a quella che era rimasta bloccata, con stesso numero di nonce, ma inserendo il nuovo gas price.

Questo processo sostituirà la transazione bloccata e le monete appariranno a destinazione nell’arco di qualche minuto.

Metamask:

La domanda a questo punto è: come si fa a inserire il numero di nonce? Non tutti i portafogli hanno questa funzionalità e danno accesso a operazioni di questo tipo.

La maggior parte dei wallet, anche per semplificare le interfacce utilizzate dagli utenti, permettono di impostare solo token e indirizzi di destinazione. A volte i valori delle gas fees. Ma non c’è traccia del nonce.

E’ qui che la conoscenza di strumenti come MetaMask diventa fondamentale. MetaMask è uno dei migliori wallet per usare Ethereum e accedere alle DApp del Web 3.0. E tra le altre cose permette di definire manualmente il nonce.

Per procedere è necessario importare il nostro portafoglio, con tutti i relativi indirizzi, chiavi e transazioni, al suo interno. Dando per scontato che abbiamo già scaricato e attivato l’estensione browser di MetaMask, questo può essere fatto in quattro modi:

  • Se usiamo hardware wallet Ledger o Trezor, essendo questi supportati da MetaMask, è sufficiente un semplice abbinamento, che è molto meno invasivo di una vera e propria importazione (in quanto le chiavi private non vengono esposte) e ci mette in condizione di visualizzare e gestire i contenuti dei nostri wallet usando MetaMask unicamente come interfaccia. Basta selezionare ‘Connetti Portafoglio Hardware’ nel menu principale. La procedura richiede pochi minuti e troviamo istruzioni su come fare in questa guida.
  • Se usiamo un wallet che consente di esportare la chiave privata del nostro account, MetaMask è in grado di importarla e ricrearlo al suo interno. Dal punto di vista pratico si tratta di un’operazione tecnicamente semplicissima. Nel nostro wallet selezioniamo l’account Ethereum e facciamoci mostrare la chiave privata. Una volta copiata, in MetaMask clicchiamo nel menu principale su ‘Importa Account’ e incolliamola lì. Vedremo comparire il nostro saldo Ethereum e i nostri token.
  • Nel caso di wallet che non hanno l’opzione per esportare la chiave privata l’ultima possibilità che rimane è quella di usare la seed phrase. In MetaMask viene chiamata ‘Secret Recovery Phrase’, ed è composta da 12 parole. Se anche la nostra seed è di 12 parole, possiamo importarla facilmente, selezionando ‘Import Secret Recovery Phrase’ anziché ‘Create a Wallet’ alla sua prima apertura.
  • *Per chi già usa MetaMask: se importiamo una nuova seed nell’istallazione corrente perderemo la possibilità di accedere ai relativi fondi. In questi casi si raccomanda di installare una nuova copia dell’estensione in un altro browser (o un altro pc), e procedere lì con l’importazione.

Appena completata l’importazione rimane un ultimo passo: siccome la possibilità di inserire il nonce è una funzione avanzata, di base non visibile in MetaMask, dobbiamo attivarla nelle impostazioni selezionando ‘Personalizza il Numero della Transazione’.

Siamo pronti per procedere con la creazione di una nuova transazione da dentro MetaMask. Controlliamo di essere nell’account giusto (cioè che l’indirizzo da cui inviamo sia effettivamente quello che abbiamo importato), inseriamo l’indirizzo di ricezione e i token, e regoliamo le gas fees e il nonce:

  • Per il gas limit copiamo il valore suggeritoci dal wallet usato in precedenza (in questo caso 51828).
  • Per quanto riguarda il gas price usiamo un valore che ci garantisca di risolvere agilmente la questione. In questo caso, visto che il minimo raccomandato da EthGasStation è 77 Gwei (priority fee 2 Gwei e base fee 80 Gwei nel nuovo sistema di calcolo EIP-1559), inserendo 80 Gwei siamo ragionevolmente sicuri che in meno di 30 minuti la transazione andrà a buon fine.
  • Infine inseriamo il numero di nonce della transazione bloccataQuesto è l’elemento fondamentale che ci garantisce di sovrascrivere la transazione precedente.

Se ora apriamo la transazione in Etherscan notiamo che è stata processata. Problema risolto in 30 secondi: in questo caso quindi potevamo stare anche un po’ più bassi, ma non è una regola. Semplicemente in quel momento il gas price è casualmente calato di un poco.

Se invece fosse aumentato l’attesa sarebbe stata superiore, ma, considerata la valutazione fatta sul prezzo del gas, la transazione sarebbe comunque andata a buon fine. In ogni caso, nella sfortunata circostanza di un ulteriore blocco, la soluzione, ora che sappiamo come procedere, è semplice: nuova transazione con stesso nonce e gas price ancora più alto.

Avviamo la transazione e in pochi minuti avremo risolto il problema.

Cancellare:

Nel caso in cui invece di riconfermare la transazione abbiamo cambiato idea e vogliamo cancellarla, è possibile farlo seguendo la stessa identica procedura ma inviando a noi stessi (ovvero all’indirizzo dell’account della transazione bloccata) una transazione di zero ETH con quel numero di nonce.

Una volta che ci è chiaro il meccanismo, soluzioni come questa permettono di ottenere il risultato desiderato anche se la cancellazione non è prevista a livello di protocollo. Ovviamente, anche se inviamo zero Ether, dovremo comunque pagare le gas fees necessarie a completare la transazione.

Sostituire:

Anche per sostituire una transazione i passaggi sono identici. Cambia solo la natura della nuova transazione: anziché essere identica ma con un gas price superiore, questa riguarderà anche token, quantità e contratti diversi.

Se avviamo una transazione con un contenuto completamente nuovoma con stesso numero di nonce di quella ancora in sospeso, sarà quella con gas price superiore a venir processata.

Così facendo saremo in grado di sostituire/annullare la vecchia transazione.

Ricordiamo che tutte queste possibilità sono praticabili solo finché la transazione in sospeso non è stata processata. Una volta che una transazione è confermata non c’è modo di fare nessuna delle operazioni descritte.

Come notiamo c’è tantissimo da sapere e ci vuole poco a commettere qualche imprecisione. Per fortuna però le possibilità di rimediare sono molte e in questo articolo abbiamo scoperto i passaggi essenziali di un percorso che permette di risolvere agilmente qualsiasi circostanza analoga.

Ti è piaciuto questo articolo?

Condividilo e lascia il tuo commento.

What's your reaction?
Happy0
Lol1
Wow0
Wtf0
Sad0
Angry0
Rip0
Leave a Comment