Два режима lifetime
Поле сообщенияRecent blockhashDurable nonce
Источник значенияgetLatestBlockhashТекущий state выбранного Nonce Account
Граница пригодностиlastValidBlockHeightПока nonce on-chain не заменён
Первая instructionЛюбая допустимаяAdvanceNonceAccount для этого account
После исполненияBlockhash стареет независимоNonce заменяется и старый payload нельзя replay
Два режима lifetime
Поле сообщения
Источник значения
Recent blockhash
getLatestBlockhash
Durable nonce
Текущий state выбранного Nonce Account
Поле сообщения
Граница пригодности
Recent blockhash
lastValidBlockHeight
Durable nonce
Пока nonce on-chain не заменён
Поле сообщения
Первая instruction
Recent blockhash
Любая допустимая
Durable nonce
AdvanceNonceAccount для этого account
Поле сообщения
После исполнения
Recent blockhash
Blockhash стареет независимо
Durable nonce
Nonce заменяется и старый payload нельзя replay

Nonce Account — это on-chain state, а не случайное число

Nonce Account — системный account, принадлежащий System Program. В initialized state он хранит authority pubkey, durable nonce и lamports per signature. Authority вправе advance nonce, изменить authority или вывести средства по правилам System Program; поэтому этот ключ отделяют от fee payer и от ключей перевода, когда операционная модель это позволяет.

Обычная транзакция Solana использует recent blockhash и lastValidBlockHeight. Durable-вариант записывает текущий nonce в поле recent_blockhash и ставит AdvanceNonceAccount первой instruction. Другой порядок не превращается в durable transaction. RPC-узел нужен для block-pinned чтения account до сборки и ещё раз перед broadcast, но ответ одного провайдера полезно сверять независимо.

Подпись фиксирует весь message, включая nonce

Офлайн-устройство подписывает не намерение «отправить позже», а точные bytes compiled message: сеть, fee payer, nonce value, nonce account, authority, порядок accounts и все instructions. Любая правка recipient, amount, program, compute budget или nonce требует новой подписи. Перед переносом покажите человеку декодированное содержание и отдельно объясните, что именно вы подписываете.

Сначала определите состояние, затем отправляйте

Decision tool перед broadcast
ПроверкаЕсли даЕсли нет
Account принадлежит System Program и initializedПродолжить проверку полейНе отправлять; адрес или state неверен
Stored nonce равен recent_blockhash payloadPayload ещё кандидат на исполнениеСтарая подпись уже непригодна
Первая instruction — AdvanceNonceAccount этого accountПроверить authority signerПересобрать и подписать заново
Authority подписал exact messageПроверить fee payer и program callsВалидация nonce не пройдёт
Signature уже найдена on-chainРазбирать один найденный результатМожно broadcast после финальной human review
Decision tool перед broadcast
Проверка
Account принадлежит System Program и initialized
Если да
Продолжить проверку полей
Если нет
Не отправлять; адрес или state неверен
Проверка
Stored nonce равен recent_blockhash payload
Если да
Payload ещё кандидат на исполнение
Если нет
Старая подпись уже непригодна
Проверка
Первая instruction — AdvanceNonceAccount этого account
Если да
Проверить authority signer
Если нет
Пересобрать и подписать заново
Проверка
Authority подписал exact message
Если да
Проверить fee payer и program calls
Если нет
Валидация nonce не пройдёт
Проверка
Signature уже найдена on-chain
Если да
Разбирать один найденный результат
Если нет
Можно broadcast после финальной human review

Контролируемая офлайн-сессия

  1. 1
    Закрепите cluster

    Запишите genesis hash или допустимый cluster, RPC endpoint, nonce account и наблюдаемый slot.

  2. 2
    Считайте account

    Сохраните owner, initialized state, authority, durable nonce, balance и fee-rate field.

  3. 3
    Соберите один message

    Поставьте advance первым, затем целевые instructions; зафиксируйте fee payer и полный список accounts.

  4. 4
    Декодируйте офлайн

    Сверьте recipient, суммы, program IDs, writable/signers и hash/bytes сообщения на каждом устройстве.

  5. 5
    Соберите подписи

    Передавайте неизменяемый payload; не смешивайте подписи от двух версий сообщения.

  6. 6
    Перечитайте nonce и отправьте один раз

    Непосредственно перед broadcast подтвердите совпадение on-chain nonce и отсутствие уже найденной signature.

Ошибка до и после nonce-валидации имеет разный итог

Если account отсутствует, nonce не совпал или authority не подписал, nonce-валидация не проходит: транзакцию отбрасывают без fee и state changes. Если валидация прошла, но более поздняя instruction вернула ошибку, Solana всё равно сохраняет новый nonce и списанную fee; остальные изменения failed execution откатываются. Поэтому повтор тех же bytes не является recovery — нужен свежий nonce, исправленный message и новые подписи.

Stop-сигналы

  • посредник не показывает nonce account, authority или первую instruction;
  • в payload одновременно менялись fields после первой подписи;
  • stored nonce уже отличается, но предлагают повторить старые serialized bytes;
  • один nonce используют для нескольких конкурирующих платежей и обещают, что исполнятся все;
  • получатель, сумма или program ID не проходят процедуру безопасного перевода криптовалюты;
  • план полагается на будущую поддержку durable nonces без monitoring официального deprecation warning.

Результат считается закрытым только после поиска exact signature и чтения transaction meta: status, fee, logs и ожидаемые account deltas. При неизвестном результате не advance nonce вручную до проверки нескольких RPC и истории. Если подписи нет, но nonce уже новый, старый payload восстановить нельзя; сохраните evidence, заново выполните безопасный перевод криптовалюты с текущим state и не просите подписантов подписывать непрочитанные bytes.

Источники

Мы используем прямые ссылки и фиксируем дату проверки. Полный текст чужих материалов не перепечатывается.

  1. Solana Docs — Durable Nonces Solana Foundation · Проверено 22 августа 2026 г. в 10:35 GMT+5
  2. Solana Cookbook — Transaction Confirmation & Expiration Solana Foundation · Проверено 22 августа 2026 г. в 10:35 GMT+5
  3. Anza Kit — Transaction Messages Anza · Проверено 22 августа 2026 г. в 10:35 GMT+5
  4. Agave — nonce transaction runtime implementation Anza · Проверено 22 августа 2026 г. в 10:35 GMT+5
Материал носит информационный характер и не является индивидуальной рекомендацией. Криптоактивы связаны с риском волатильности, технических сбоев, хищения и полной потери средств.