Trwałe nonce’y

Podsumowanie

Transakcje z trwałym nonce’em zastępują ostatni blockhash przechowywaną wartością nonce, eliminując 150-slotowe okno ważności transakcji. Dzięki temu możliwe jest podpisywanie offline i opóźnione przesyłanie.

Trwałe nonce’y mogą zostać wycofane w przyszłych wersjach. Szczegóły w dyskusji SIMD.

Trwałe nonce’y

Transakcja z trwałym nonce’em zastępuje ostatni blockhash przechowywaną wartością nonce, co eliminuje 150-slotowe okno ważności. Umożliwia to podpisywanie offline oraz opóźnione przesyłanie transakcji.

Jak działają transakcje z nonce’em

Konto nonce to konto należące do System Program, które przechowuje State::Initialized z trzema polami: authority pubkey (osoba mogąca przesuwać nonce), trwały nonce (hash pochodzący z ostatniego blockhasha) oraz lamports per signature (stawka opłaty w momencie ostatniego przesunięcia nonce’a).

Aby użyć trwałego nonce’a:

  1. Utwórz i zainicjalizuj konto nonce za pomocą CreateAccount + InitializeNonceAccount
  2. Zbuduj transakcję z AdvanceNonceAccount jako pierwszą instrukcją oraz nonce jako recent_blockhash
  3. Podpisz transakcję (można to zrobić offline, ponieważ nonce nie wygasa)
  4. Prześlij, gdy będziesz gotowy/gotowa

Wykrywanie nonce’a

Środowisko wykonawcze wykrywa transakcje z nonce’em, sprawdzając, czy pierwsza instrukcja (indeks NONCED_TX_MARKER_IX_INDEX = 0) to wywołanie System Program z instrukcją AdvanceNonceAccount. Konto nonce musi być pierwszym kontem tej instrukcji i musi mieć możliwość zapisu. Zobacz get_durable_nonce.

Przebieg walidacji nonce

Gdy recent_blockhash transakcji nie zostaje znaleziony w BlockhashQueue, validator sprawdza, czy jest to poprawna transakcja nonce za pomocą check_transaction_age:

  1. Zapisany durable_nonce nonce musi różnić się od kolejnego trwałego nonce (wyprowadzonego z bieżącego blockhasha). Zapewnia to, że nonce nie został już użyty w tym bloku
  2. Konto nonce musi być załadowane i dać się sparsować jako State::Initialized
  3. Zapisany durable_nonce musi odpowiadać recent_blockhash transakcji

Sprawdzenie podpisu autorytetu nonce odbywa się później (validate_transaction_nonce).

Jeśli wszystkie warunki zostaną spełnione, nonce jest przesuwany do kolejnej trwałej wartości nonce przed rozpoczęciem wykonania. W przypadku niepowodzenia wykonania, zaawansowany nonce oraz opłata pobrana od płatnika są nadal zatwierdzane (zapobiegając powtórzeniu transakcji i pobierając opłaty).

Zachowanie w przypadku błędu nonce

Jeśli transakcja nonce nie przejdzie walidacji (nonce już użyty, brak podpisu autorytetu, nie znaleziono konta), cała transakcja jest odrzucana. Nie są pobierane żadne opłaty, nie następują zmiany stanu.

Jeśli transakcja nonce przejdzie walidację, ale wykonanie się nie powiedzie (instrukcja zwraca błąd), nonce jest mimo to przesuwany, a opłaty są pobierane. Zapobiega to powtórzeniu transakcji i zapewnia wynagrodzenie validatorowi.

Is this page helpful?

Spis treści

Edytuj stronę

Zarządzane przez

© 2026 Solana Foundation.
Wszelkie prawa zastrzeżone.
Bądź na bieżąco