Nonce: perché le transazioni Ethereum fanno la fila

·4 min di lettura·Di SSP Editorial Team
Copertina SSP Academy: i nonce di Ethereum spiegati

Nonce: perché le transazioni Ethereum fanno la fila

Su Bitcoin, due pagamenti non collegati inviati dallo stesso wallet possono essere confermati in qualsiasi ordine. Su Ethereum no: ogni transazione di un indirizzo ha un numero, e la rete le elabora rigorosamente in sequenza. Quel numero è il nonce, e spiega alcuni dei momenti più confusi in un wallet Ethereum: una transazione che non si conferma, seguita da tutte quelle successive bloccate dietro di lei.

Che cos'è il nonce

Per un normale account Ethereum, il nonce è un contatore: il numero di transazioni inviate da quell'indirizzo. La prima transazione usa il nonce 0, la successiva l'1 e così via. Ogni transazione che firmi include il suo nonce, e la rete accetta il nonce n solo dopo che il nonce n − 1 è stato incluso.

Svolge due compiti:

  • Protezione dal replay. Una transazione firmata non può essere inviata due volte, perché una volta usato il nonce 5, qualsiasi altra transazione con nonce 5 da quell'indirizzo non è valida.
  • Ordinamento. Le transazioni di un account vengono eseguite esattamente nell'ordine che intendevi, il che conta quando una dipende dall'altra: prima l'approvazione, poi lo swap.

Perché una transazione bloccata blocca tutte le altre

La regola dell'ordinamento ha un effetto collaterale. Se il nonce 5 resta nella mempool con una commissione troppo bassa per essere preso in carico, nemmeno i nonce 6, 7 e 8 possono essere inclusi, a prescindere da quanto paghino. Aspettano in fila dietro di lui.

Ecco perché una sola transazione sottopagata può far sembrare un wallet congelato. Non si perde nulla; la coda è semplicemente bloccata in una posizione.

Sbloccare la coda

Poiché ogni nonce può essere usato una sola volta, una transazione bloccata si risolve sostituendola:

  • Accelerarla: firma una nuova transazione con lo stesso nonce e una commissione più alta. I nodi sostituiscono la versione vecchia, e vince quella che viene inclusa per prima.
  • Annullarla: firma una transazione con lo stesso nonce che non invia nulla a te stesso, con una commissione più alta. Quando viene confermata, l'originale non potrà mai più essere confermata.

In genere le sostituzioni richiedono una commissione sensibilmente più alta dell'originale per essere accettate. Transazioni bloccate e replace-by-fee illustra gli strumenti equivalenti su Bitcoin.

Problemi comuni con il nonce

  • "Nonce too low" (nonce troppo basso). Una transazione con quel nonce è già stata usata, spesso perché un altro wallet o un altro dispositivo ha inviato dallo stesso indirizzo.
  • Buchi. Una transazione con nonce 9 quando l'account è fermo a 7 aspetterà finché non esistono la 7 e la 8. Di solito è segno che qualcosa è stato scartato o firmato altrove.
  • Due dispositivi, un account. Se due app inviano contemporaneamente dallo stesso indirizzo, possono scegliere entrambe lo stesso nonce; una delle transazioni fallirà.

Come lo gestiscono le altre blockchain

  • Bitcoin e le altre blockchain UTXO non hanno nonce di account. Ogni transazione spende monete specifiche, e una moneta può essere spesa una sola volta: è questo che impedisce i replay e la doppia spesa.
  • Solana usa invece un blockhash recente: una transazione è valida solo per una breve finestra di tempo. Per le firme che richiedono più tempo, come raccogliere approvazioni su due dispositivi, offre i nonce durevoli, memorizzati in un account speciale.

Anche gli smart account hanno i nonce

Gli account smart contract basati su ERC-4337 non inviano transazioni ordinarie. Firmano operazioni utente, che un bundler invia tramite un contratto EntryPoint condiviso. Ogni account ha comunque un nonce, gestito dall'EntryPoint, con la stessa protezione dal replay. Lo standard consente anche più sequenze di nonce indipendenti per account, così le operazioni non collegate non devono aspettarsi a vicenda. L'account abstraction dai principi di base spiega il quadro generale.

I nonce in SSP

Su Ethereum e sulle altre chain EVM supportate da SSP, il tuo account SSP è uno smart account ERC-4337 controllato dal tuo multisig 2 di 2. Ogni operazione include il suo nonce, e sia SSP Wallet sia SSP Key lo firmano: un'operazione approvata quindi non può essere ripetuta, né riutilizzata in un'altra posizione della tua cronologia.

Una conseguenza pratica: il contratto del tuo account viene distribuito dalla prima operazione che invii da esso. Quel primo invio include il deployment, quindi consuma sensibilmente più gas degli invii successivi. È previsto, e succede una sola volta per account e per chain.

Il riepilogo onesto

Il nonce è un contatore che fa sì che ogni account Ethereum elabori le proprie transazioni una sola volta e in ordine. Questo ti protegge dai replay e mantiene in sequenza le transazioni dipendenti, al prezzo che una sola transazione sottopagata può bloccare tutto ciò che viene dopo.

Quando succede, non inviare altre transazioni in coda. Sostituisci quella bloccata con lo stesso nonce e una commissione più alta, oppure annullala, e la coda si libera.

Condividi questo articolo

Articoli correlati