Vai al contenuto

Come recuperare un gap di nonce nel wallet

Individua il primo nonce mancante di un account EVM, scegli se sostituirlo o annullarlo ed evita transazioni in coda tra wallet o dispositivi.

Aggiornato

Solo a scopo educativo; non costituisce consulenza né raccomandazione d’investimento. Gli investimenti possono comportare perdite.

Risposta diretta

Su una chain compatibile con EVM, le transazioni di un account di proprietà esterna (EOA) vengono eseguite in ordine di nonce. Se il prossimo nonce eseguibile manca o è bloccato, i nonce superiori possono restare in coda anche con commissioni elevate. Recupera prima il nonce irrisolto più basso: verifica chain e mittente, confronta i dati confermati e pending, quindi sostituisci la transazione voluta oppure falle concorrenza con una cancellazione avente lo stesso nonce.

La cancellazione non è un annullamento a livello di protocollo. Di solito è un trasferimento di 0 ETH dall’account a sé stesso che compete sullo stesso nonce. Vince la prima transazione valida inclusa; una transazione confermata non può essere cancellata così.

La procedura riguarda normali transazioni EVM di EOA. Smart account o operazioni di account abstraction possono usare schemi di nonce definiti dal contratto; le reti UTXO seguono un altro modello.

Perché un gap di nonce blocca la coda

Il nonce di un EOA è un contatore sequenziale. Può essere eseguita una sola transazione per nonce e l’account non può eseguire il nonce 26 prima del nonce 25. I nodi separano quindi le transazioni subito eseguibili dai nonce superiori accodati per il futuro.

La coda non è un unico mempool globale e autorevole. Ogni nodo RPC vede e conserva un sottoinsieme diverso di transazioni pending. Una transazione può comparire nel wallet ma non nell’explorer, o essere visibile da un RPC e assente da un altro. Potrebbe non essere mai stata trasmessa, essere stata rimossa dal pool di un nodo o non essersi propagata al servizio interrogato.

eth_getTransactionCount con latest restituisce il conteggio nello stato dell’ultimo blocco; per un EOA è il nonce successivo alle transazioni confermate. Con pending interroga la vista pending di un solo nodo. Una differenza indica che quel nodo conosce transazioni pending, non che le conoscano tutti i nodi pubblici.

Diagnosi prima della firma

  1. Ferma gli invii dall’indirizzo interessato su ogni dispositivo e applicazione. Registra rete, chain ID, indirizzo mittente, hash, nonce, destinatari, valori, calldata, gas limits e campi delle commissioni.
  2. Verifica che wallet, explorer e RPC si riferiscano alla stessa chain e allo stesso mittente. Un nonce appartiene a un account su una chain, non a un’installazione del wallet.
  3. Interroga eth_getTransactionCount con latest e pending, preferibilmente tramite due provider RPC indipendenti. Le divergenze provano viste diverse del mempool, non incoerenza dello stato on-chain.
  4. Esamina per nonce le transazioni del mittente. Se disponibile, l’API del pool del nodo distingue le voci eseguibili pending dalle future queued. I provider RPC pubblici spesso disabilitano questa API non standard.
  5. Dal valore latest, trova il primo nonce privo di transazione confermata. Stabilisci se una transazione nota sia ancora visibile, rimossa o creata soltanto localmente.

Non agire solo in base allo stato mostrato dal wallet. Sono decisivi nonce confermato, ricevuta e inclusione in un blocco della chain corretta.

Sostituire o cancellare il primo nonce irrisolto

Per mantenere l’azione originale: usa la funzione di accelerazione o ritrasmetti una transazione con gli stessi mittente, nonce, destinatario, valore e calldata, ma commissioni competitive. Controlla ogni campo prima di firmare; cambiare il payload crea un’altra azione.

Per abbandonare l’azione originale: finché non è confermata, invia 0 ETH dall’indirizzo a sé stesso con lo stesso nonce e commissioni competitive. È solo un tentativo di far vincere l’auto-trasferimento. L’originale può ancora confermarsi prima; non considerare riuscita la cancellazione finché la sostitutiva non ha una ricevuta e l’originale resta non confermata.

L’accettazione della sostituzione dipende dalla policy del nodo, non da una percentuale universale. Per una transazione EIP-1559 potrebbe essere necessario aumentare maxPriorityFeePerGas e maxFeePerGas, e maxFeePerGas deve restare utilizzabile con il base fee corrente. Stime dei wallet e regole dei client variano; replacement transaction underpriced significa che il nodo ricevente ha rifiutato la sostituzione secondo la sua policy attuale.

Dopo la conferma del nonce più basso, ricontrolla ricevuta, latest, saldi e ogni nonce superiore. Le transazioni in coda possono diventare subito eseguibili; quelle rimosse da tutti i nodi rilevanti potrebbero richiedere una ritrasmissione consapevole. Non reinviarle alla cieca: verifica prima che una copia precedente non sia stata inclusa.

Esempio

Un indirizzo ha transazioni confermate fino al nonce 24, quindi latest è 25. Un RPC indica pending pari a 25, mentre il wallet mostra il nonce 26 e il nonce 27 in coda. Nessun provider trova una transazione trasmessa al nonce 25.

Il proprietario verifica chain, mittente e payloads registrati. Se al nonce 25 c’era un’azione voluta, la ricostruisce e trasmette con nonce 25 e commissioni correnti. Altrimenti può inviare un auto-trasferimento di 0 ETH al nonce 25. Aumentare soltanto la commissione del nonce 27 non chiude il gap.

Incluso il nonce 25, controlla la ricevuta prima di toccare il nonce 26 o il nonce 27. Entrambi vanno esaminati singolarmente: potrebbero essere stati rimossi o eseguirsi rapidamente dopo la chiusura del gap.

Rischi e condizioni di arresto

  • La sostitutiva può competere con l’originale. Fino a prova on-chain, presumi che destinatario, valore e chiamata originali possano ancora essere eseguiti.
  • Verifica indirizzo completo del mittente, chain ID, nonce e calldata su un display affidabile. Malware o siti di “recupero” inaffidabili possono sostituire un trasferimento o un’approvazione.
  • Conserva valuta nativa sufficiente per la commissione sostitutiva. La transazione inclusa paga gas anche se una chiamata al contratto in seguito fa revert.
  • Non rivelare seed phrase o chiave privata per un gap di nonce. Nessun RPC, explorer o supporto legittimo ne ha bisogno.
  • Se l’indirizzo è compromesso, sostituzioni pubbliche ripetute possono diventare una gara di commissioni con l’attaccante. Smetti di usare il dispositivo compromesso e segui un piano di risposta agli incidenti.
  • Se gli RPC discordano, il destinatario originale è ignoto, il payload non è ricostruibile o è in gioco una grande interazione contrattuale, fermati e chiedi assistenza esperta prima di firmare.

Per l’uso ripetuto tra dispositivi o firmatari automatici, previeni recidive con un solo allocatore di nonce per account e chain, firma serializzata, registri durevoli di nonce e hash riservati e riconciliazione con stato confermato e pool pending del broadcaster. Azzerare la cronologia locale del wallet non cambia lo stato on-chain né i mempool degli altri nodi.

Errori comuni

  • “Una commissione maggiore sul nonce 27 permette di saltare il nonce 25.” Può migliorare la priorità solo quando i nonce precedenti sono eseguibili; non ripara il gap.
  • “Non trovata significa cancellata.” Un nodo può averla rimossa mentre un altro nodo, builder o controparte la conserva. Una transazione firmata può essere ritrasmessa.
  • “Un auto-trasferimento di 0 ETH annulla l’originale.” Compete soltanto sullo stesso nonce e non ha effetto dopo la conferma dell’originale.
  • pending è la risposta finale della rete.” È la vista pending del nodo interrogato e può variare tra provider.

Argomenti correlati

Fonti

Navigazione

Cerca nella wiki...