Материал проверен 7 ноября 2026?
БК

ГЛАВНАЯ / ИНСТРУКЦИИ / DURABLE NONCE В SOLANA: КАК УСТРОЕНЫ NONCE ACCOUNT И ОТЛОЖЕННАЯ ПОДПИСЬ

Durable nonce в Solana: как устроены nonce account и отложенная подпись

Durable nonce заменяет короткоживущий recent blockhash значением из специального аккаунта Solana. Это позволяет подготовить и подписать транзакцию офлайн или отправить её позже, но не превращает подпись в бессрочное разрешение: nonce account должен оставаться в ожидаемом состоянии, а транзакция обязана начинаться с AdvanceNonceAccount.

Nonce account

Аккаунт хранит nonce, полномочие и данные о комиссии

Nonce account – аккаунт System Program с инициализированным состоянием. В нём хранятся authority, текущее durable nonce и значение lamports per signature, зафиксированное при последнем продвижении nonce. Это не произвольный адрес и не локальный счётчик кошелька: состояние читается из сети.

Перед подготовкой транзакции проверьте владельца аккаунта, инициализированность, записанное значение и полномочие authority. Отдельно убедитесь, что fee payer и необходимые подписанты присутствуют в сообщении. Не раскрывайте закрытые ключи, используемые для подписи nonce authority или плательщика комиссии.

  • nonce account принадлежит System Program и инициализирован
  • authority и значение nonce считаны из сети
  • fee payer установлен отдельно
Формирование сообщения

AdvanceNonceAccount должна стоять в начале списка инструкций

При сборке durable nonce-транзакции сохранённое значение nonce помещается в поле recent_blockhash. Первой инструкцией должна быть AdvanceNonceAccount для нужного nonce account. Затем добавляются остальные действия. Перестановка инструкции, подмена аккаунта или использование уже изменившегося nonce делает подготовленную транзакцию непригодной.

Полная подпись относится к конкретному сообщению: nonce, fee payer, список инструкций, аккаунты и порядок инструкций должны совпасть у всех подписантов. После любого изменения сообщения подписи нужно сформировать заново. Перед передачей на офлайн-устройство сверяйте понятное представление каждой инструкции, а не только строку nonce.

  • durable nonce установлен в recent_blockhash
  • AdvanceNonceAccount стоит первой
  • подписанное сообщение после этого не менялось
Срок жизни и повтор

Отложенная транзакция остаётся действительной, пока nonce не использован

В отличие от recent blockhash, durable nonce не ограничен обычным окном недавних хешей. Однако authority или другая корректная nonce-транзакция может изменить сохранённое значение до отправки. После обработки AdvanceNonceAccount nonce продвигается, поэтому старая подписанная транзакция с прежним значением больше не должна считаться повторно применимой.

Перед отправкой снова прочитайте nonce account и сравните сохранённое значение с тем, на котором подписывали сообщение. Если оно изменилось, выясните причину и перестройте транзакцию. Не пытайтесь бесконечно ретранслировать старую подпись как будто её срок неограничен при любом состоянии аккаунта.

Ошибки и комиссия

Ошибка исполнения может продвинуть nonce и списать комиссию

Различайте провал валидации nonce и ошибку инструкции после того, как транзакция прошла nonce-проверки. При некорректном, уже использованном nonce или отсутствующей необходимой авторизации транзакция может быть отброшена без изменений состояния и сбора комиссии. Если проверки пройдены, nonce продвигается до исполнения; при последующей ошибке инструкции продвижение и комиссия всё равно фиксируются, чтобы не допустить повторного воспроизведения.

Проверяйте результат по signature, err и состоянию nonce account. Ошибочная инструкция не означает, что durable nonce остался прежним. Учтите и документационную оговорку: Solana указывает, что механизм могут вывести из эксплуатации в будущем. Перед проектированием нового процесса проверьте актуальный статус поддержки и доступность механизма в используемых клиентах.

  • валидация отделена от ошибки исполнения
  • повторная отправка сверена с новым состоянием nonce
  • актуальность поддержки проверена
FAQ

Частые вопросы

Durable nonce делает транзакцию бессрочной?

Он снимает обычную границу срока recent blockhash, но транзакция зависит от состояния nonce account и одноразового использования значения.

Можно поставить advance второй инструкцией?

Нет. AdvanceNonceAccount должна быть первой инструкцией durable nonce-транзакции.

После успешной подписи nonce можно использовать повторно?

Нет. После обработки он продвигается, и старое значение становится непригодным для новой транзакции.

При ошибке инструкции комиссия возвращается?

Нет. Если nonce-валидация пройдена, runtime может зафиксировать продвижение nonce и списание комиссии даже при ошибке исполнения.

Стоит ли строить новый сервис на durable nonce?

Сначала проверьте актуальную документацию: механизм может быть выведен из эксплуатации в будущей версии.

Итоговая проверка

Чек-лист: durable nonce в solana: как устроены nonce account и отложенная подпись

  • nonce account проверен в сети и инициализирован;
  • authority и fee payer разделены и подтверждены;
  • recent_blockhash совпадает с durable nonce аккаунта;
  • AdvanceNonceAccount стоит первой инструкцией;
  • сообщение не менялось после подписания;
  • аккаунт перечитан перед отложенной отправкой;
  • результат и комиссия проверены после исполнения;
  • актуальный статус поддержки механизма проверен.

Материал подготовлен редакцией сайта и проверен 7 ноября 2026 года. Условия бирж, кошельков и блокчейн-сетей могут меняться. Перед операцией сверяйте данные в интерфейсе выбранного сервиса.