Ethereum

Как заменить или отменить ожидающую транзакцию в Ethereum и EVM-сетях

Ожидающую EVM-транзакцию можно вытеснить операцией с тем же nonce и более высокой комиссией. Объясняем ускорение, отмену и риск гонки.

Как заменить или отменить ожидающую транзакцию в Ethereum и EVM-сетях

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

Сначала убедитесь, что транзакция действительно ожидает

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

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

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

Как работает замена с тем же nonce

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

Для ускорения используйте встроенную функцию Speed Up или Replace, если она есть. Кошелёк сформирует тот же платёж с прежним nonce и обновлёнными параметрами комиссии. До подписи ещё раз сравните получателя, сумму, сеть и данные контракта. Разобраться в ценовых ограничениях помогает руководство про base fee, priority fee и max fee.

После отправки сохраните оба TxID. Разные узлы некоторое время могут показывать разных кандидатов. Подтверждён будет только один вариант с этим nonce, но окончательный результат проверяют по блоку, а не по отметке «ускорено» в кошельке.

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

Как устроена условная отмена

Встроенная функция Cancel обычно создаёт простую транзакцию на собственный адрес с нулевой суммой и тем же nonce. Если она попадёт в блок первой, исходный перевод или вызов контракта уже не сможет исполниться с этим номером. Заплатить комиссию за отменяющую операцию всё равно придётся.

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

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

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

Что делать при очереди из нескольких операций

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

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

Когда повторная отправка создаёт второй платёж

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

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

Какие данные можно передать поддержке

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

Итог

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