A ottobre 2026, la maggior parte degli errori dei wallet rientra in due gruppi. Gli errori generati prima che una transazione venga inclusa in un blocco, come "nonce too low", "replacement transaction underpriced", "insufficient funds for gas * price + value" o "Transaction simulation failed: Blockhash not found" di Solana, significano che non è stato registrato nulla on-chain e non è stata spesa nessuna fee di rete. I fallimenti dopo l'inclusione, come una transazione EVM annullata (reverted) o rimasta senza gas, una transazione Solana inclusa con un errore o un fallimento della fase di compute su TON, consumano comunque la fee per il lavoro svolto. Trova la tua stringa esatta nelle tabelle qui sotto per capirne il significato e la soluzione.
Una transazione fallita ti è costata una fee? La regola da controllare per prima
Una transazione fallita costa una fee di rete solo se è stata inclusa in un blocco prima di fallire.
Una transazione può fallire in due momenti:
- Prima dell'inclusione: la simulazione del wallet, il nodo RPC o la mempool la rifiutano. Non arriva in nessun blocco, quindi non viene spesa nessuna fee di rete.
- Dopo l'inclusione: la transazione entra in un blocco, il suo codice viene eseguito e fallisce. La fee per il lavoro svolto viene spesa. Etherscan dice che il gas viene comunque dedotto sulle transazioni fallite per il calcolo utilizzato, e la documentazione sulle fee di Solana dice che se la transazione fallisce la fee viene comunque addebitata.
Per capire in quale caso ti trovi, cerca l'hash o la firma della transazione su un block explorer. Nessun risultato dopo qualche minuto di solito significa che non è mai stata inclusa e non è costata nulla; lo stato Pending significa che non è ancora stata inclusa. Un record segnato come Failed o Reverted, o con un exit code diverso da zero, significa che è stata inclusa e la fee è stata spesa.
Quali errori EVM indicano "nonce too low", "underpriced" o "out of gas"?
Queste sono le stringhe esatte dal codice sorgente del client go-ethereum, e la maggior parte significa che la transazione è stata rifiutata prima di arrivare in un blocco.
| Errore esatto | Cosa significa | Fee di rete spesa? | Cosa fare |
|---|---|---|---|
| "nonce too low" | Una transazione con questo numero è già stata confermata; lo stato del wallet è obsoleto | No | Risincronizza il wallet e controlla l'explorer; reinvia solo se l'azione che volevi non è già avvenuta |
| "replacement transaction underpriced" | Velocizzazione o annullamento con un aumento di fee troppo piccolo | No | Aumenta di più; Geth per impostazione predefinita richiede il 10% |
| "max fee per gas less than block base fee" | La tua max fee è inferiore all'attuale base fee | No | Alza la max fee |
| "insufficient funds for gas * price + value" | La moneta nativa non copre l'importo più il gas massimo | No | Ricarica la moneta nativa; vedi token ma niente token di gas |
| "already known" | La stessa transazione è già nella mempool | No | Aspetta; è innocuo |
| "out of gas" | L'esecuzione ha superato il limite di gas; modifiche annullate | Sì | Riprova con un limite di gas più alto |
Cosa significa "execution reverted"?
"Execution reverted" significa che uno smart contract ha rifiutato l'azione e ha annullato ogni modifica fatta. Compare in due momenti, e la fee cambia.
Se compare nella stima pre-invio del wallet, non è stato inviato nulla e non è stata spesa nessuna fee. Se la transazione è stata inclusa, Etherscan la mostra come Fail o Reverted e, secondo Alchemy, chi l'ha inviata paga comunque il gas usato. Il testo dopo i due punti è il motivo reale. I più comuni:
- "UniswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT": il prezzo si è mosso oltre il tuo limite di slippage tra la firma e l'inclusione.
- "ERC20: insufficient allowance": l'approvazione del token è inferiore all'importo che si sta spendendo. Il suo gemello, "ERC20: transfer amount exceeds balance", significa che hai meno di quel token rispetto a quanto hai provato a muovere.
Le due stringhe ERC-20 provengono dai contratti OpenZeppelin v4; le versioni più recenti usano custom error con nomi diversi.
Cosa significano i codici AA di ERC-4337 e gli errori EIP-7702?
Gli account basati su smart contract inviano una UserOperation tramite un bundler invece di una transazione normale, e la specifica EIP-4337 dice che i messaggi di errore dell'EntryPoint iniziano con un codice nella forma AA##.
| Codice | Cosa significa | Fee di rete spesa? |
|---|---|---|
| AA21 didn't pay prefund | Nessun paymaster in uso, e il deposito dell'account sull'EntryPoint non copre il gas massimo | No |
| AA23 reverted | Il codice di validazione dell'account ha rifiutato l'operazione | No |
| AA33 reverted | La validazione del paymaster ha rifiutato l'operazione | No |
| AA95 out of gas | Il limite di gas del bundle era troppo basso per l'operazione o per una sotto-chiamata | Normalmente no; handleOps fa revert |
La specifica EIP-4337 dice che un bundler deve scartare un'operazione la cui simulazione fa revert, quindi i fallimenti di validazione (AA2x e AA3x) normalmente non lasciano nulla on-chain. Se un'operazione viene inclusa e la sua chiamata principale fa revert, il gas viene comunque pagato on-chain dall'account o dal paymaster che l'ha sponsorizzata. Alchemy osserva che AA95 di solito significa che i limiti di gas erano impostati troppo bassi; handleOps fa revert, quindi riprova con limiti di gas più alti (un'impostazione del bundler o dell'SDK).
EIP-7702 aggiunge un errore che potresti vedere da un nodo: "in-flight transaction limit reached for delegated accounts" (il pool di Geth accetta una sola transazione eseguibile in sospeso per un account di questo tipo, quindi aspetta che si concluda). Un'autorizzazione con chain ID o nonce sbagliati viene saltata in silenzio, quindi la transazione può riuscire senza che la delega venga applicata. Se non hai delegato il tuo account consapevolmente, controlla e revoca la delega: una delega inattesa è un segnale di drainer.
Cosa significano "Blockhash not found" e "block height exceeded" su Solana?
"Block height exceeded" significa che il blockhash è scaduto, e "Blockhash not found" significa che il nodo non ha riconosciuto il blockhash (di solito scaduto, a volte un nodo in ritardo). In entrambi i casi la transazione normalmente non è stata elaborata. Un blockhash resta valido per circa 151 blocchi, più o meno da 60 a 90 secondi, secondo la guida alla conferma di Solana, e una transazione scaduta non può più essere elaborata.
| Errore esatto | Cosa significa | Fee di rete spesa? | Cosa fare |
|---|---|---|---|
| "Transaction simulation failed: Blockhash not found" | Blockhash troppo vecchio, o il nodo che simulava non lo aveva ancora visto | No | Riprova per ottenere un blockhash nuovo |
| "block height exceeded" (eccezione TransactionExpiredBlockheightExceededError) | Non è stata inclusa prima della scadenza del blockhash | No, a meno che non sia stata inclusa poco prima della scadenza; controlla la firma | Controlla la firma su un explorer, poi riprova |
| "Transaction simulation failed: Error processing Instruction N: custom program error: 0x..." | Il programma ha previsto un fallimento, per esempio per slippage di uno swap | No, se intercettato nella simulazione prima dell'invio; se un wallet o un'app salta la simulazione, la transazione può essere inclusa come Failed e la fee viene spesa | Leggi il motivo; regola slippage o importo |
| "Attempt to debit an account but found no record of a prior credit." | L'account che paga non detiene alcun SOL | No | Ricaricalo con SOL |
| "Transaction results in an account (0) with insufficient funds for rent" | L'invio lascerebbe un account sotto il minimo rent-exempt | No, se intercettato nella simulazione; se la simulazione viene saltata può essere inclusa come Failed e costare la fee | Invia un po' meno; vedi il rent di Solana |
| L'explorer mostra "Failed" | È stata inclusa e il programma ha restituito un errore | Sì | Leggi il log dell'explorer, correggi, reinvia |
Le fee di Solana si pagano sempre in SOL, quindi "Insufficient funds for fee" e "insufficient funds for rent" significano che ti servono SOL. Un semplice "insufficient funds" o "custom program error: 0x1" da un trasferimento di token significa che hai meno di quel token rispetto a quanto hai provato a inviare.
Conviene alzare la priority fee su Solana?
Alza la priority fee solo quando una transazione continua a scadere durante la congestione, non quando compare un errore di simulazione.
Secondo la documentazione sulle fee di solana.com, una fee di Solana è una base fee di 5.000 lamport per firma (50% bruciato, 50% al validator) più una priority fee facoltativa: il prezzo per compute unit (in micro-lamport) moltiplicato per il limite di compute unit, diviso per 1.000.000 e arrotondato per eccesso a lamport interi, tutto destinato al validator. Una priority fee più alta aumenta le probabilità che un leader occupato pianifichi la tua transazione. Non risolve errori di slippage, rent o mancanza di SOL, e viene comunque addebitata se la transazione viene inclusa e fallisce. Se compare un errore di simulazione, correggi invece la causa.
Cosa significano gli exit code di TON e i messaggi bounced?
Una transazione TON si esegue in fasi (storage, credit, compute, action, bounce), e secondo docs.ton.org gli exit code 0 e 1 indicano successo mentre qualsiasi altro indica fallimento. Se il compute fallisce, la fase di action viene saltata e, per un messaggio in ingresso bounceable, viene formato un messaggio di bounce; le fee vengono dedotte fase per fase, quindi quelle precedenti restano spese. Le fee si pagano in GRAM (ex Toncoin; vedi cosa è cambiato con il cambio di nome).
| Segnale | Cosa significa | Fee di rete spesa? | Cosa fare |
|---|---|---|---|
| Exit code 13 o -14 | Gas esaurito nella fase di compute | Sì, per il gas usato | Allega più GRAM |
| Exit code 9 | Cell underflow: il contratto ha provato a leggere più dati di quanti ne contenga una cell, spesso perché il payload non corrisponde a ciò che il contratto si aspetta | Sì | Controlla che il payload o il commento siano adatti a quel contratto |
| Exit code 37 | Fase di action: "Not enough GRAMs" per inviare il messaggio in uscita | Sì | Allega più GRAM |
| Fase di compute saltata | Il messaggio portava una quantità di GRAM troppo bassa per pagare l'esecuzione | Nessun gas; la fase di storage viene comunque eseguita | Invia allegando più GRAM |
| Messaggio bounced | La destinazione ha fallito o non esiste | Sì, fee dedotte | Il valore ritorna al netto delle fee di messaggio e di gas |
Come WATS Wallet si rapporta a questi errori
WATS Wallet, di Alltoscan LLC, è un wallet non-custodial (estensione Chrome e app iOS/Android) per reti EVM, Solana e TON, in cui le chiavi e la seed phrase le detieni tu. I messaggi di questa guida sono errori a livello di rete definiti da quelle chain, non codici specifici di WATS.
Su Solana le fee di rete si pagano in SOL, quindi la riga "insufficient funds" di Solana vale direttamente: tenere un piccolo saldo in SOL la evita. Le righe di TON descrivono errori a livello di protocollo; in WATS Wallet le fee su TON sono pagate in ATS. Sulle reti EVM, WATS Wallet addebita le fee di rete in ATS tramite un paymaster ERC-4337, da un unico saldo ATS su BNB Chain; come funziona la fee ATS è spiegato a parte.
Domande frequenti
Perdo soldi quando una transazione crypto fallisce?
Dipende da quando è fallita. Se è stata rifiutata prima dell'inclusione (errori di simulazione, di nodo o di mempool come "nonce too low", "replacement transaction underpriced" o "Blockhash not found"), non è stato incluso nulla e non è stata spesa nessuna fee di rete. Se è stata inclusa ed è fallita (un revert o un out of gas su EVM, un "Failed" nell'explorer di Solana, un exit code diverso da zero su TON), la fee per il lavoro svolto è stata spesa, ma l'importo che provavi a inviare resta nel tuo account, e i bounce di TON restituiscono il valore al netto delle fee. Controlla l'hash o la firma su un explorer per vedere quale caso si applica.
Perché il mio wallet dice "nonce too low" quando non ho transazioni in sospeso?
Il nonce è il contatore delle transazioni dell'account, e "nonce too low" significa che una transazione con quel numero è già stata confermata. Le cause comuni sono usare lo stesso account da un'altra app wallet o da un altro dispositivo, una transazione "bloccata" che in realtà è stata confermata, oppure uno stato del wallet in cache obsoleto. Controlla su un explorer se il pagamento o l'azione che volevi è già andato a buon fine; se sì, non reinviare; se no, risincronizza il wallet e invia di nuovo. Il tentativo rifiutato non ha speso alcuna fee. Se una transazione è davvero in sospeso, vedi <a href="/blog/speed-up-or-cancel-stuck-transaction">come velocizzare o annullare una transazione in sospeso</a>.
È sicuro riprovare dopo "block height exceeded" o "Blockhash not found" su Solana?
In genere sì. "Block height exceeded" significa che il blockhash è scaduto (circa 151 blocchi, più o meno da 60 a 90 secondi), e "Blockhash not found" significa che il nodo non lo ha riconosciuto, di solito perché scaduto. Una transazione scaduta non può più essere elaborata, quindi non può essere inclusa in seguito e duplicare quella nuova; comunque, cerca prima la firma su un explorer di Solana, poi riprova con un blockhash nuovo. Il tentativo scaduto non ha comportato alcuna fee a meno che non sia stato incluso prima della scadenza, cosa che la ricerca sull'explorer mostra, e una priority fee leggermente più alta può aiutare se continua a scadere durante la congestione.

