Nonce (нонс)
Nonce — счётчик транзакций аккаунта в Ethereum. На цифрах показываю, почему зависшая транзакция блокирует следующие и как её заменить.
Обновлено: 2026-09-17
Nonce — счётчик транзакций аккаунта в Ethereum. На цифрах показываю, почему зависшая транзакция блокирует следующие и как её заменить.
Обновлено: 2026-09-17
Я отправила 200 USDT на биржу, поставив газ 18 gwei — в тот вечер сеть была забита. Перевод ушёл в мемпул и завис. Через двадцать минут я отправила ещё 50 USDT, уже с газом 40 gwei, и вторая транзакция тоже не прошла: она встала в очередь за первой. Причина — nonce. У каждого перевода с одного кошелька есть свой порядковый номер, и перескочить его не получится.
Nonce — порядковый номер транзакции, которую отправляет конкретный адрес. Нумерация начинается с нуля: первый перевод нового кошелька идёт с nonce 0, второй — с 1, дальше по возрастанию. Счётчик живёт не в самой транзакции, а в состоянии аккаунта: кошелёк ставит номер, равный числу уже подтверждённых переводов с этого адреса. Как только транзакция попала в блок, счётчик увеличивается на единицу.
Зачем это придумали — защита от повтора. Один и тот же подписанный перевод нельзя вставить в блок дважды: у второго экземпляра номер уже занят, и сеть отбросит дубль.
Ethereum исполняет транзакции одного адреса строго по порядку. Если nonce 1 висит в мемпуле, то nonce 2 в блок не попадёт — сеть ждёт, пока освободится место в очереди. В MetaMask это выглядит так: одна строка со статусом Pending, за ней ещё несколько. Поднимать газ у второй бесполезно — она никуда не поедет, пока не пройдёт первая.
Отменить подписанную транзакцию нельзя, но её можно заменить другой с тем же nonce. Механика: отправляю перевод самому себе на 0 ETH с тем же номером и газом выше — MetaMask показывает кнопку Speed up или Cancel. Порог замены у большинства узлов — на 10% выше текущего: при 20 gwei это 22 gwei и больше. Замена прошла — очередь сдвинулась, и следующие переводы уходят сами.
Второй путь — сброс аккаунта: Settings → Advanced → Reset Account в MetaMask. Кошелёк заново спрашивает сеть о числе подтверждённых транзакций и обнуляет зависшие. Балансы и приватные ключи при этом не трогаются — сбрасывается только счётчик.
В proof-of-work слово nonce означает не номер, а поле в заголовке блока, которое майнер перебирает: 32 бита, около 4,29 млрд вариантов на один проход. Меняешь nonce — меняется хеш блока, и если он ниже цели сложности, блок считается найденным.
В Биткоине модели аккаунтов нет вообще: монеты хранятся как UTXO, порядкового счётчика транзакций не существует. Поэтому зависший перевод в BTC разгоняют через RBF или CPFP, а не через номер: механика застрявшей транзакции там совсем другая.
Остались вопросы? Спросите ИИ-ассистента — объяснит другими словами.
Спросить