Nonce durevoli

Riepilogo

Le transazioni con nonce durevoli sostituiscono il blockhash recente con un valore nonce memorizzato, eliminando la finestra di scadenza di 150 slot per una transazione. Questo consente la firma offline e l'invio ritardato.

I nonce durevoli potrebbero essere deprecati in una versione futura. Consulta la discussione SIMD per i dettagli.

Nonce durevoli

Una transazione con nonce durevole sostituisce il blockhash recente con un valore nonce memorizzato, eliminando la finestra di scadenza di 150 slot. Questo consente la firma offline e l'invio ritardato.

Come funzionano le transazioni con nonce

Un account nonce è un account di proprietà del System Program che memorizza un valore State::Initialized contenente tre campi: una pubkey authority (chi può avanzare il nonce), un valore durable nonce (un hash derivato da un blockhash recente) e lamports per signature (la tariffa quando il nonce è stato avanzato l'ultima volta).

Per utilizzare un nonce durevole:

  1. Crea e inizializza un account nonce usando CreateAccount + InitializeNonceAccount
  2. Costruisci la transazione con AdvanceNonceAccount come prima istruzione e il valore nonce come recent_blockhash
  3. Firma la transazione (può essere fatto offline, poiché il nonce non scade)
  4. Invia quando sei pronto

Rilevamento del nonce

Il runtime rileva le transazioni con nonce verificando se la prima istruzione (indice NONCED_TX_MARKER_IX_INDEX = 0) è una chiamata al System Program con l'istruzione AdvanceNonceAccount. L'account nonce deve essere il primo account di quell'istruzione e deve essere scrivibile. Vedi get_durable_nonce.

Flusso di validazione del nonce

Quando il recent_blockhash di una transazione non viene trovato nel BlockhashQueue, il validator verifica se si tratta di una transazione nonce valida tramite check_transaction_age:

  1. Il durable_nonce memorizzato del nonce deve differire dal prossimo nonce durevole (derivato dal blockhash corrente). Questo garantisce che il nonce non sia già stato utilizzato in questo blocco
  2. L'account nonce deve essere caricato e deve essere analizzato come State::Initialized
  3. Il durable_nonce memorizzato deve corrispondere al recent_blockhash della transazione

Il controllo della firma dell'autorità del nonce viene eseguito successivamente (validate_transaction_nonce).

Se tutti i controlli hanno esito positivo, il nonce viene avanzato al valore del prossimo nonce durevole prima che inizi l'esecuzione. In caso di fallimento dell'esecuzione, il nonce avanzato e il fee payer con le commissioni detratte vengono comunque committati (prevenendo il replay mentre si raccolgono le commissioni).

Comportamento in caso di fallimento del nonce

Se una transazione nonce fallisce la validazione (nonce già utilizzato, autorità non firmata, account non trovato), l'intera transazione viene scartata. Nessuna commissione raccolta, nessuna modifica di stato.

Se una transazione nonce supera la validazione ma l'esecuzione fallisce (un'istruzione restituisce un errore), il nonce viene comunque avanzato e le commissioni vengono comunque raccolte. Questo impedisce che la transazione venga ripetuta garantendo al contempo che il validator venga compensato.

Is this page helpful?

Indice dei contenuti

Modifica pagina

Gestito da

© 2026 Solana Foundation.
Tutti i diritti riservati.
Resta connesso