Yhteenveto
Kestävän noncen transaktiot korvaavat viimeaikaisen lohkohashin tallennetulla nonce-arvolla, poistaen 150 slotin vanhenemisikkunan transaktiolta. Tämä mahdollistaa offline-allekirjoituksen ja viivästetyn lähetyksen.
Kestävät noncet saatetaan poistaa käytöstä tulevassa versiossa. Katso SIMD-keskustelu lisätietoja varten.
Kestävät noncet
Kestävän noncen transaktio korvaa viimeaikaisen lohkohashin tallennetulla nonce-arvolla, poistaen 150 slotin vanhenemisikkunan. Tämä mahdollistaa offline-allekirjoituksen ja viivästetyn lähetyksen.
Miten nonce-transaktiot toimivat
Nonce-tili on System Program -omistama tili, joka tallentaa
State::Initialized-arvon, joka sisältää kolme kenttää:
authority-pubkeyn (kuka voi edistää noncea), kestävän nonce -arvon
(viimeaikaisesta lohkohashista johdettu hash) ja lamportit per allekirjoitus
(maksutaso, kun nonce viimeksi edistettiin).
Kestävän noncen käyttäminen:
- Luo ja alusta nonce-tili käyttäen
CreateAccount+InitializeNonceAccount - Rakenna transaktio
AdvanceNonceAccount:n kanssa ensimmäisenä instruktiona ja nonce-arvorecent_blockhash:na - Allekirjoita transaktio (voidaan tehdä offline-tilassa, koska nonce ei vanhene)
- Lähetä kun valmis
Noncen tunnistus
Runtime tunnistaa nonce-transaktiot tarkistamalla, onko ensimmäinen instruktio
(indeksi
NONCED_TX_MARKER_IX_INDEX
= 0) kutsu System Programiin AdvanceNonceAccount-instruktiolla.
Nonce-tilin on oltava kyseisen instruktion ensimmäinen tili ja sen on oltava
kirjoitettavissa. Katso
get_durable_nonce.
Nonce-vahvistuksen kulku
Kun transaktion recent_blockhash ei löydy BlockhashQueue-tililtä,
validaattori tarkistaa, onko kyseessä kelvollinen nonce-transaktio
check_transaction_age-funktion
avulla:
- Noncen tallennetun
durable_nonce-arvon on poikettava seuraavasta kestävästä noncesta (johdettu nykyisestä lohkohajautusarvosta). Tämä varmistaa, ettei noncea ole jo käytetty tässä lohkossa - Nonce-tili on ladattava ja sen on jäsennyttävä muotoon
State::Initialized - Tallennetun
durable_nonce-arvon on vastattava transaktionrecent_blockhash-arvoa
Nonce-valtuutuksen allekirjoituksen tarkistus suoritetaan myöhemmin
(validate_transaction_nonce).
Jos kaikki tarkistukset läpäistään, nonce siirretään seuraavaan kestävään nonce-arvoon ennen suorituksen alkamista. Suorituksen epäonnistuessa siirretty nonce ja maksun vähentänyt maksaja tallennetaan silti (estäen uudelleentoiston ja keräten maksut).
Nonce-virheen käyttäytyminen
Jos nonce-transaktio epäonnistuu vahvistuksessa (nonce jo käytetty, valtuutusta ei allekirjoitettu, tiliä ei löydy), koko transaktio hylätään. Maksuja ei kerätä, tilamuutoksia ei tehdä.
Jos nonce-transaktio läpäisee vahvistuksen, mutta suoritus epäonnistuu (käsky palauttaa virheen), nonce silti siirretään ja maksut kerätään. Tämä estää transaktion uudelleentoiston ja varmistaa, että validaattori saa korvauksen.
Is this page helpful?