Duurzame nonces

Samenvatting

Duurzame nonce-transacties vervangen de recente blockhash door een opgeslagen nonce-waarde, waardoor het vervalvenster van 150 slots voor een transactie wordt verwijderd. Dit maakt offline ondertekening en uitgestelde indiening mogelijk.

Duurzame nonces kunnen in een toekomstige release worden afgeschaft. Zie SIMD-discussie voor details.

Duurzame nonces

Een duurzame nonce-transactie vervangt de recente blockhash door een opgeslagen nonce-waarde, waardoor het vervalvenster van 150 slots wordt verwijderd. Dit maakt offline ondertekening en uitgestelde indiening mogelijk.

Hoe nonce-transacties werken

Een nonce-account is een account dat eigendom is van het System Program en een State::Initialized-waarde opslaat met drie velden: een authority pubkey (wie de nonce kan vooruitschuiven), een duurzame nonce-waarde (een hash afgeleid van een recente blockhash), en lamports per handtekening (het tarief toen de nonce voor het laatst werd vooruitgeschoven).

Om een duurzame nonce te gebruiken:

  1. Maak en initialiseer een nonce-account met CreateAccount + InitializeNonceAccount
  2. Bouw de transactie met AdvanceNonceAccount als de eerste instructie en de nonce-waarde als de recent_blockhash
  3. Onderteken de transactie (kan offline worden gedaan, aangezien de nonce niet verloopt)
  4. Dien in wanneer gereed

Nonce-detectie

De runtime detecteert nonce-transacties door te controleren of de eerste instructie (index NONCED_TX_MARKER_IX_INDEX = 0) een aanroep is naar het System Program met de AdvanceNonceAccount-instructie. Het nonce-account moet het eerste account van die instructie zijn en moet schrijfbaar zijn. Zie get_durable_nonce.

Nonce-validatiestroom

Wanneer de recent_blockhash van een transactie niet wordt gevonden in de BlockhashQueue, controleert de validator of het een geldige nonce-transactie is via check_transaction_age:

  1. De opgeslagen durable_nonce van de nonce moet verschillen van de volgende duurzame nonce (afgeleid van de huidige blockhash). Dit zorgt ervoor dat de nonce niet al is gebruikt in dit blok
  2. Het nonce-account moet worden geladen en moet worden geparsed als State::Initialized
  3. De opgeslagen durable_nonce moet overeenkomen met de recent_blockhash van de transactie

De controle van de nonce-authority-ondertekening wordt later uitgevoerd (validate_transaction_nonce).

Als alle controles slagen, wordt de nonce verhoogd naar de volgende duurzame nonce-waarde voordat de uitvoering begint. Bij een mislukte uitvoering worden de verhoogde nonce en de fee-betaler waarvan de fee is afgetrokken toch gecommit (waardoor replay wordt voorkomen terwijl fees worden geïnd).

Gedrag bij nonce-fouten

Als een nonce-transactie de validatie niet doorstaat (nonce al gebruikt, authority niet ondertekend, account niet gevonden), wordt de hele transactie verworpen. Geen fees geïnd, geen statuswijzigingen.

Als een nonce-transactie de validatie doorstaat maar de uitvoering mislukt (een instructie retourneert een fout), wordt de nonce toch verhoogd en worden fees toch geïnd. Dit voorkomt dat de transactie opnieuw wordt afgespeeld en zorgt ervoor dat de validator wel wordt gecompenseerd.

Is this page helpful?

Inhoudsopgave

Pagina Bewerken

Beheerd door

© 2026 Solana Foundation.
Alle rechten voorbehouden.
Blijf Verbonden