Ethereum: Transazioni che restano in attesa per lungo tempo

Ethereum è un progetto in forte crescita e può capitare che delle transazioni restino in attesa per ore o addirittura giorni a causa dell’elevato traffico sulla blockchain. Analizziamo cause e rimedi

Marco Fucito
4 min readDec 6, 2017

Perchè una transazione può restare in attesa per giorni?

  • Gas Price settato su un valore troppo basso

Come sappiamo le transazioni per essere convalidate ed aggiunte alla blockchain, devono essere minate dai miner che offrono la loro potenza di calcolo ed energia elettrica per far andar a buon fine la nostra transazione.
I miner non fanno beneficenza e in cambio chiedono ethereum, così come quando facciamo un bonifico la banca chiede in cambio circa 1€.
In ethereum c’è però una novità, siamo noi a decidere quanto siamo disposti a pagare i miner per il loro lavoro e lo facciamo settando due valori nella transazione: Gas limit e Gas Price.
Ogni operazione richiede una diversa potenza di calcolo e il consumo del gas è proporzionale dunque alla quantità e complessità di istruzioni che dovono seguire i miner.

I miner sceglieranno di minare sempre le transazioni col Gas Price più elevato.
Dobbiamo quindi impostare il Gas Price in base alla media del Gas Price usato dalle altre transazioni nell'istante in cui effettueremo la nostra.

In momenti in cui vi sono un elevato numero di transazioni complesse da minare, la coda delle transazioni in attesa si allunga e dunque il prezzo del Gas per vedere la nostra transazione eseguita in tempi utili aumenta proporzionalmente.

Se non settiamo correttamente il Gas Price, la nostra transazione potrà restare in attesa per giorni.

Perchè se eseguo una nuova transazione con Gas Price elevato, non va a buon fine?

  • le transazioni vengono sempre eseguire in ordine cronologico

Se eseguiamo più transazioni contemporaneamente dallo stesso wallet, esse vengono inviate tutte ai miner, ma verranno minate una alla volta ed in ordine cronologico.
L’ordine cronologico è dal nounce, un numero progressivo che si incrementa ad ogni transazione.
Ad esempio: La transazione con nounce 5, non verrà mai minata se prima non sarà minata la transazione precedente con nounce pari a 4.
Dunque una transazione con gas price troppo basso, bloccherà tutte le transazioni successive seppur con gas elevato.
Non è necessario che la transazione vada a buon fine, l’importante è che venga minata.

Come mai non etherscan non mostra tutte le transazioni?

“Sorry, We are unable to locate the Transaction Hash”
E’ l’errore che potremo trovarci ad affrontare se

  • il network è particolarmente congestionato
  • abbiamo più transazioni in pending
  • stiamo provando a visualizzare lo stato di una transazione con nounce successivo ad un’altra in cui abbiamo settato un valore di gas price troppo basso che non riesce ad essere minata

E’ stato anche riscontrato che in queste situazioni il valore del timestamp mostrato si resetti diverse volte.

Per risolvere è necessario eliminare la transazione che non riesce ad essere minata per via del gas price troppo basso, oppure aspettare che la transazione fallisca o che il traffico cali con conseguente abbassamento del gas price necessario.

Si può cancellare una transazione in pending?

Si, non è un comportamento ufficialmente previsto, ma è possibile farlo.
L’unico vincolo è che la transazione sia ancora in attesa di essere minata ed aggiunta alla blockchain.

Eliminando la transazione pendente con gas troppo basso, sbloccheremo tutte le transazioni successive effettuate col corretto gas price, e potremo ripetere la transazione eliminata col corretto gas price.

Come fare? Leggi qui l’articolo dedicato: https://medium.com/@marco.fucito/ethereum-come-cancellare-una-transazione-in-attesa-36fb55dd4ebc

Se l’articolo ti è stato utile e ti va, puoi donarmi un caffè al seguente indirizzo ETH:

0x93f7830377f9aaf1e02a46DCEFC2388450E92f23

--

--