Начинающим

Что такое nonce в Ethereum и почему транзакции выполняются по очереди

Nonce задаёт порядок исходящих транзакций Ethereum-адреса. Показываем, как найти разрыв в очереди и безопасно заменить зависшую операцию.

Что такое nonce в Ethereum и почему транзакции выполняются по очереди

Короткий ответ: nonce – это порядковый номер транзакции, которую отправляет обычный аккаунт Ethereum. Для одного адреса номера идут последовательно. Сеть не исполнит транзакцию с более высоким nonce раньше отсутствующей операции с меньшим номером, поэтому одна зависшая отправка способна задержать следующие.

Nonce не является случайным кодом, комиссией или номером блока. Он относится к адресу отправителя и защищает от повторного выполнения одной и той же подписанной транзакции. Обычно кошелёк выбирает его автоматически. Ручное изменение нужно лишь при диагностике зависшей очереди и требует точной проверки.

Как работает очередь транзакций

Представим, что последняя выполненная транзакция адреса имела nonce 12. Следующая должна использовать 13, затем 14 и 15. Пользователь может подписать несколько операций быстро, но валидная последовательность всё равно сохраняется. Если транзакция 13 долго остаётся pending, операции 14 и 15 могут быть видны узлам, но не смогут исполниться раньше неё.

У разных узлов собственные пулы ожидающих транзакций. Поэтому один обозреватель может показывать всю очередь, другой – только часть, а третий временно не находить старый хеш. Истинное завершение подтверждает включение транзакции в канонический блок и квитанция, а не одна надпись в приложении.

Как узнать nonce и найти разрыв

  1. Зафиксируйте адрес отправителя. Nonce получателя не влияет на очередь ваших исходящих операций.
  2. Скопируйте хеш каждой ожидающей транзакции. Если он скрыт, начните с инструкции, как найти TxID и открыть перевод в обозревателе.
  3. Сравните nonce. В подробностях транзакции найдите поле nonce. Самый маленький неподтверждённый номер обычно и блокирует более поздние операции.
  4. Проверьте квитанцию. Наличие блока и успешного статуса означает, что номер уже использован. Отсутствие квитанции означает, что транзакция не подтверждена или конкретный сервис её не видит.
  5. Сверьте данные в другом обозревателе. Это помогает отличить локальный сбой индексатора от реального состояния сети.

Технические инструменты получают число выполненных транзакций адреса из состояния блока, а некоторые узлы умеют отдельно учитывать ожидающие операции. Эти значения могут различаться: счётчик по последнему подтверждённому блоку не обязан включать pending-транзакции.

Почему появляются слишком низкий и слишком высокий nonce

Nonce слишком низкий. Такой номер уже использован подтверждённой транзакцией либо узел принял другую операцию с тем же nonce. Повторная отправка старой подписанной версии не создаст следующий элемент очереди.

Nonce слишком высокий. Перед ним отсутствует хотя бы один номер. Узел может держать операцию в очереди, но исполнение начнётся только после закрытия разрыва. Создание новых транзакций с ещё большими номерами проблему не решает.

Две транзакции имеют одинаковый nonce. Они конкурируют за одно место в последовательности. Если одна из них будет включена в блок, другая уже не сможет быть исполнена как отдельная последующая операция. Именно так работают ускорение и попытка отмены через замену.

Как безопасно ускорить зависшую операцию

Сначала убедитесь, что транзакция действительно не включена в блок. Затем используйте встроенную функцию ускорения кошелька, если она есть. Корректное ускорение создаёт новую версию с тем же nonce и теми же назначением, суммой и данными, но с более привлекательными параметрами комиссии. У новой версии будет другой хеш.

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

Что делать, если следующие транзакции тоже зависли

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

Если кошелёк предлагает сбросить локальную историю, помните: это меняет отображение на устройстве, а не состояние блокчейна. До любой повторной подписи проверьте адрес, nonce и квитанции через независимые источники. Когда транзакция уже подтверждена, новая отправка будет отдельной операцией и может создать второй платёж.

Как понять результат

Pending означает, что операция ещё не получила квитанцию в блоке. Successful указывает на успешное исполнение. Failed или Reverted означает, что транзакция попала в блок, nonce был использован, но запрошенное изменение не завершилось успешно. Подробнее это разобрано в статье о статусах Failed и Reverted.

Если старый хеш помечен как Replaced, найдите новый хеш и сравните адрес отправителя и nonce. Если сервис пишет Dropped, проверьте, не был ли этот номер уже использован подтверждённой заменой. Одна интерфейсная метка не доказывает окончательное удаление операции со всех узлов.

Что передать поддержке

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

Никому не передавайте seed-фразу, приватный ключ, пароль или код 2FA. Эти секреты позволяют распоряжаться кошельком или аккаунтом, но не нужны для чтения публичной очереди. Настоящая поддержка может попросить хеш и адрес, однако не должна просить импортировать ключ на стороннем сайте.

Итог

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