Визначення
Nonce (Number Used Once) — у контексті Solana це унікальне значення, що зберігається в спеціальному обліковому записі (Nonce Account) і замінює нещодавній хеш блоку (recent blockhash) у транзакції. Завдяки йому підписану транзакцію можна відкласти й виконати пізніше, навіть якщо стан мережі змінився.
У Solana виділяють два підходи: звичайні транзакції використовують recent blockhash, який швидко стає недійсним, а транзакції з durable nonce спираються на стійке значення з окремого облікового запису.
Як працює
- Створюється Nonce Account — спеціалізований обліковий запис, який утримує унікальне значення nonce та стан авторизації.
- Замість свіжого blockhash транзакція посилається на це значення nonce, тому вона не має жорсткого обмеження за часом.
- Після успішного виконання nonce позначається як використаний і не може бути повторно застосований у новій транзакції.
- Nonce Account вимагає мінімального балансу для звільнення від видалення (rent-exempt), як і інші облікові записи в Solana.
- Для роботи з durable nonce існують спеціальні інструкції:
AdvanceNonceAccount,AuthorizeNonceAccount,WithdrawNonceAccount.
Durable nonce особливо корисний для офлайн-підписання, захисту від MEV та сценаріїв, де відправник не може миттєво отримати актуальний blockhash.
Приклад
Ви підписуєте транзакцію на апаратному гаманці без доступу до інтернету. Замість того, щоб запитувати свіжий recent blockhash (який стане недійсним за кілька хвилин), ви використовуєте значення nonce з попередньо створеного Nonce Account. Транзакція підписується офлайн. Коли з'являється зв'язок, ви відправляєте її в мережу — вона виконується успішно, навіть якщо з моменту підписання минули години.
Типова помилка
Вважати, що nonce в Solana працює так само, як в Ethereum, де це послідовний лічильник транзакцій відправника. У Solana nonce — це значення для відкладеного виконання транзакцій, а не лічильник. Спроба застосувати логіку лічильника до Solana призводить до помилкових архітектурних рішень, особливо при побудові гаманців чи сервісів масових виплат.
Пов'язані матеріали
Внутрішні переходи
- Lamport — одиниця обчислення вартості транзакцій та мінімального балансу облікових записів, у тому числі Nonce Account.
- Sysvar — системні змінні Solana, серед яких є
RecentBlockhashes— альтернатива до durable nonce для звичайних транзакцій.
Додаткові ресурси
- Офіційна документація Solana: розділ про durable nonces та Nonce Account.
- Репозиторій Solana Program Library (SPL): реалізація
system-програми з інструкціями для роботи з nonce.