Ανθεκτικά nonces

Περίληψη

Οι συναλλαγές με ανθεκτικό nonce αντικαθιστούν το πρόσφατο blockhash με μια αποθηκευμένη τιμή nonce, εξαλείφοντας το παράθυρο λήξης των 150 slots για μια συναλλαγή. Αυτό επιτρέπει την offline υπογραφή και την καθυστερημένη υποβολή.

Τα ανθεκτικά nonces ενδέχεται να καταργηθούν σε μελλοντική έκδοση. Δείτε τη συζήτηση SIMD για λεπτομέρειες.

Ανθεκτικά nonces

Μια συναλλαγή με ανθεκτικό nonce αντικαθιστά το πρόσφατο blockhash με μια αποθηκευμένη τιμή nonce, εξαλείφοντας το παράθυρο λήξης των 150 slots. Αυτό επιτρέπει την offline υπογραφή και την καθυστερημένη υποβολή.

Πώς λειτουργούν οι συναλλαγές nonce

Ένας λογαριασμός nonce είναι ένας λογαριασμός που ανήκει στο System Program και αποθηκεύει μια τιμή State::Initialized που περιέχει τρία πεδία: ένα authority pubkey (ποιος μπορεί να προωθήσει το nonce), μια τιμή durable nonce (ένα hash που προέρχεται από ένα πρόσφατο blockhash) και lamports ανά υπογραφή (το ποσοστό χρέωσης όταν το nonce προωθήθηκε τελευταία φορά).

Για να χρησιμοποιήσετε ένα ανθεκτικό nonce:

  1. Δημιουργήστε και αρχικοποιήστε έναν λογαριασμό nonce χρησιμοποιώντας CreateAccount + InitializeNonceAccount
  2. Δημιουργήστε τη συναλλαγή με AdvanceNonceAccount ως την πρώτη εντολή και την τιμή nonce ως το recent_blockhash
  3. Υπογράψτε τη συναλλαγή (μπορεί να γίνει offline, καθώς το nonce δεν λήγει)
  4. Υποβάλετε όταν είστε έτοιμοι

Ανίχνευση nonce

Το runtime ανιχνεύει τις συναλλαγές nonce ελέγχοντας αν η πρώτη εντολή (index NONCED_TX_MARKER_IX_INDEX = 0) είναι μια κλήση στο System Program με την εντολή AdvanceNonceAccount. Ο λογαριασμός nonce πρέπει να είναι ο πρώτος λογαριασμός αυτής της εντολής και πρέπει να είναι εγγράψιμος. Δείτε get_durable_nonce.

Ροή επικύρωσης nonce

Όταν το recent_blockhash μιας συναλλαγής δεν βρίσκεται στο BlockhashQueue, ο validator ελέγχει αν είναι έγκυρη συναλλαγή nonce μέσω της check_transaction_age:

  1. Το αποθηκευμένο durable_nonce του nonce πρέπει να διαφέρει από το επόμενο durable nonce (που προκύπτει από το τρέχον blockhash). Αυτό διασφαλίζει ότι το nonce δεν έχει ήδη χρησιμοποιηθεί σε αυτό το block
  2. Ο λογαριασμός nonce πρέπει να φορτωθεί και να αναλυθεί ως State::Initialized
  3. Το αποθηκευμένο durable_nonce πρέπει να ταιριάζει με το recent_blockhash της συναλλαγής

Ο έλεγχος υπογραφής της εξουσιοδότησης nonce εκτελείται αργότερα (validate_transaction_nonce).

Εάν όλοι οι έλεγχοι περάσουν επιτυχώς, το nonce προωθείται στην επόμενη τιμή durable nonce πριν αρχίσει η εκτέλεση. Σε περίπτωση αποτυχίας εκτέλεσης, το προωθημένο nonce και ο πληρωτής τελών με αφαιρεμένα τέλη εξακολουθούν να καταχωρούνται (αποτρέποντας την επανάληψη ενώ εισπράττονται τέλη).

Συμπεριφορά αποτυχίας nonce

Εάν μια συναλλαγή nonce αποτύχει στην επικύρωση (το nonce έχει ήδη χρησιμοποιηθεί, η εξουσιοδότηση δεν έχει υπογραφεί, ο λογαριασμός δεν βρέθηκε), ολόκληρη η συναλλαγή απορρίπτεται. Δεν εισπράττονται τέλη, δεν γίνονται αλλαγές κατάστασης.

Εάν μια συναλλαγή nonce περάσει την επικύρωση αλλά αποτύχει η εκτέλεση (μια εντολή επιστρέφει σφάλμα), το nonce εξακολουθεί να προωθείται και τα τέλη εξακολουθούν να εισπράττονται. Αυτό αποτρέπει την επανάληψη της συναλλαγής ενώ διασφαλίζει ότι ο validator αποζημιώνεται.

Is this page helpful?

Πίνακας Περιεχομένων

Επεξεργασία Σελίδας

Διαχειρίζεται από

© 2026 Ίδρυμα Solana.
Με επιφύλαξη παντός δικαιώματος.
Συνδεθείτε