Guides

Ошибка nonce too low в Ethereum: почему и как исправить

28 октября 2026 г.
4 мин чтения

Кошелёк пишет nonce too low при отправке ETH или токенов. Почему номер уже занят, как проверить nonce в обозревателе и безопасно синхронизировать кошелёк.

Вы подписываете перевод ETH или токена, и кошелёк или dApp возвращает ошибку nonce too low. Иногда текст другой: «nonce has already been used», «known transaction» или «already known». Транзакция не уходит, баланс не меняется. Хорошая новость: эта ошибка почти никогда не означает потерю средств — она означает, что кошелёк перепутал порядковый номер.

Симптом: перевод отклоняется сразу

В отличие от зависшей транзакции, которая висит в pending, здесь узел отказывается принять транзакцию в момент отправки. Типичные обстоятельства:

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

Почему так: номер уже потрачен

У каждого аккаунта Ethereum есть счётчик nonce — число транзакций, которые с него уже были включены в блоки. Как сказано в описании аккаунтов на ethereum.org, каждая новая транзакция должна использовать следующий номер. Если кошелёк подставил номер, который сеть уже видела в подтверждённой транзакции, узел отвечает nonce too low: повторно использовать номер нельзя, это защищает от повторного исполнения одной и той же подписи.

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

Ошибки, связанные с nonce
СообщениеЧто произошлоЧто делать
nonce too lowНомер уже использован подтверждённой транзакциейОбновить состояние кошелька, отправить заново
already knownТакая же транзакция уже в мемпулеПодождать или ускорить исходную
Транзакция висит без ошибкиПеред ней пропущен номерЗаполнить пропуск
replacement transaction underpricedЗамена с тем же номером слишком дешёваяПоднять комиссию

Что делать по шагам

  1. Проверьте, не ушёл ли перевод. Откройте адрес в обозревателе сети, где вы работаете, и посмотрите последние исходящие транзакции. Если нужный платёж уже подтверждён — повторять не нужно. Если сомневаетесь, к какой сети относится хеш, поможет определитель хеша транзакции.
  2. Узнайте текущий nonce. В обозревателе у последней исходящей транзакции указан её nonce; следующая должна иметь номер на единицу больше.
  3. Обновите состояние кошелька. В MetaMask для этого есть функция очистки истории активности (Clear activity tab data) в расширенных настройках: она не трогает ключи и балансы, а только сбрасывает локальный кэш транзакций, после чего кошелёк заново берёт nonce из сети. В других кошельках помогает перезапуск, смена RPC или повторное подключение аккаунта.
  4. Закройте второй экземпляр кошелька. Пока вы не закончили, отправляйте только с одного устройства.
  5. Подпишите транзакцию заново и убедитесь, что nonce совпадает с ожидаемым. Если кошелёк позволяет задавать nonce вручную, укажите правильный номер.

Когда это не ошибка кошелька

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

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

Аппаратные кошельки тоже могут столкнуться с этой ошибкой: устройство подписывает транзакцию с номером, который ему передало приложение, а приложение взяло его из устаревшего кэша. Решение то же — обновить данные в приложении и подписать заново.

Если вы платили за обмен

Перед повторной оплатой заказа обязательно проверьте, не прошёл ли первый перевод. Если он есть в обозревателе, заказ его увидит после подтверждений, и вторая оплата окажется лишней. Для заказа на KOT.CASH, например на странице обмена ETH на BTC, достаточно одной транзакции на точную сумму. Если перевод подтвердился после того, как заказ истёк (неоплаченный заказ ждёт час), напишите в поддержку с номером заказа и хешем — повторно на старый адрес ничего не отправляйте.

Как не повторить

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

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

Означает ли nonce too low, что деньги пропали?

Нет. Узел просто отказался принять транзакцию с уже использованным номером. Баланс не меняется, перевод можно подписать заново с правильным nonce.

Очистка истории в MetaMask удалит мои средства?

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

Почему nonce сбился после восстановления кошелька?

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

Обменять ETH на BTCКак ускорить или отменить транзакцию EthereumКак читать транзакцию на EtherscanОпределитель хеша транзакции

Источники

Готовы обменять крипту?

Быстрые, прозрачные свопы — регистрация не нужна.

Начать обмен
Ошибка nonce too low в Ethereum: почему и как исправить | KOT.CASH