ГЛАВНАЯ / ИНСТРУКЦИИ / DURABLE NONCE В SOLANA: КАК УСТРОЕНЫ NONCE ACCOUNT И ОТЛОЖЕННАЯ ПОДПИСЬ
Durable nonce в Solana: как устроены nonce account и отложенная подпись
Durable nonce заменяет короткоживущий recent blockhash значением из специального аккаунта Solana. Это позволяет подготовить и подписать транзакцию офлайн или отправить её позже, но не превращает подпись в бессрочное разрешение: nonce account должен оставаться в ожидаемом состоянии, а транзакция обязана начинаться с AdvanceNonceAccount.
Аккаунт хранит 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
- актуальность поддержки проверена
Частые вопросы
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 года. Условия бирж, кошельков и блокчейн-сетей могут меняться. Перед операцией сверяйте данные в интерфейсе выбранного сервиса.