Как отменить «застрявшую» транзакцию в Metamask?

Замена застрявшей транзакции в Metamask

Многие пользователи сети Ethereum и других EVM-совместимых сетей сталкивались с тем, что подтверждение транзакции длится долго или во все зависает на неопределенный срок. Такое происходит крайне редко, тем не менее, доставляет неудобства, т.к. дальнейшие транзакции с этого кошелька становятся невозможны и все транзакции выстраиваются в очередь за одной единственной застрявшей транзакцией. Рассмотрим в этой статье, почему это происходит и как можно решить эту проблему, используя Metamask.

Застрявшая транзакция
Оглавление:
- Как рассчитывается стоимость транзакции?
- Почему транзакция не подтверждается?
- Как ускорить транзакцию?
- Как отменить транзакцию путем замены?

Как рассчитывается стоимость транзакции?

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

Газ в сети Ethereum

Есть 3 основных параметра при вычислении стоимости транзакции:

  • Стоимость газа (Gas Cost) — это общая стоимость транзакции с учетом вычислительных мощностей.
  • Цена газа (Gas Price) — цена каждой единицы газа.
  • Лимит газа (Gas Limit) — максимальное количество газа, за который готов заплатить пользователь.

Обычно все эти параметры регулируются автоматически кошельком исходя из загрузки сети и данных, которые передают децентрализованные приложения (dApps) кошельку при взаимодействии. Тем не менее, каждый пользователь может изменить их при совершении транзакции для увеличения скорости транзакции или если скорость не важна, то для уменьшения стоимости транзакции.

Почему транзакция не подтверждается?

Основной причиной не подтверждения транзакции является недостаточное количество газа, указанного в совершаемой транзакции. В подавляющем числе случаев, такие транзакции отвергаются узлами и они завершаются с ошибкой, но бывают случаи, когда узел может поставить транзакцию в список ожидания (Mempool), чтобы вернуться и обработать ее позже, когда нагрузка на сеть будет ниже.

Но если кошелек вычисляет необходимое количество газа автоматически, то почему же транзакции оказываются в «ожидании»? Причин тому может быть множество:

  • Пользователь сам указал слишком низкий лимит газа в попытке значительно снизить стоимость транзакции.
  • В сети произошел резкий скачек нагрузки и она долгое время не снижается до значений, в момент которых было рассчитано количество газа в транзакции.
  • Децентрализованное приложение (dApps) передало не верные данные о необходимом количестве газа для взаимодействия со смарт-контрактом.
  • В конце концов в сети может произойти неожиданный сбой, который приведет к подвисанию транзакции.

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

Есть 2 способа решения данной проблемы: 1. Ускорение транзакции, 2. Замена транзакции.

Как ускорить транзакцию?

Ускорение транзакции работает не всегда, но это первое, что нужно попробовать:

Как ускорить транзакцию в Metamask?

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

Если все-таки это не помогло и транзакция так и продолжает находится «в ожидании», приступайте к способу с «заменой транзакции».

Как отменить транзакцию путем замены?

Суть данного способа заключается в том, чтобы заменить «застрявшую» транзакцию другой, используя одноразовый номер «Nonce» старой транзакции.

1. Откройте настройки Metamask и перейдите в раздел «Дополнительно«, найдите настройку «Настроить одноразовый номер транзакции« и передвиньте ползунок в положение «ВКЛ«.

2. Откройте транзакцию, которую необходимо заменить и скопируйте «одноразовый номер«.

3. Инициируйте новую транзакцию с нулевой суммой, указав в качестве получателя адрес своего кошелька. В поле «Пользовательский одноразовый номер« вставьте номер старой транзакции. Затем перейдите к настройке газа, нажав «Рынок >«.

4. Увеличьте количество газа для транзакции. Можно выбрать режим «Агрессивный«, но лучше перейти в «Дополнительно« и указать еще большее количество газа вручную.

5. Подтвердите транзакцию.

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