Owlio
RU
← Блог
ИнструкцияДля новичка

Неудачная транзакция Ethereum: почему списали газ

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

Неудачная транзакция Ethereum всё равно может стоить ETH: вычисления при исполнении платные, даже если предполагаемое действие откатывается. Если транзакция включена в блок и её общий статус - Failed, перевод или изменения контрактов из этой транзакции не вступают в силу. Комиссия за исполнение всё равно списывается.

Это руководство относится к обычным транзакциям Ethereum Mainnet со счёта, который сам оплачивает газ. У смарт-аккаунтов, спонсируемых транзакций, выводов с биржи и переводов через несколько сетей могут быть дополнительные шаги или комиссии. Ошибка отдельного шага в приложении ещё не доказывает сбой всей транзакции в блокчейне.

Сначала установите, что именно не удалось

Откройте транзакцию в истории кошелька и проверьте её в обозревателе Ethereum Mainnet. Запишите полный хеш, отправителя, номер блока и общий статус. Эти публичные сведения можно проверить без каких-либо подписей.

Это различие важно: квитанция Ethereum фиксирует общий результат исполнения: статус 0 означает ошибку, 1 - успех. Неудачный внутренний вызов в трассировке не обязательно означает сбой всей транзакции. Если общий статус - Success, изучите фактический результат действия, а не считайте, что всё откатилось.

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

Отделите комиссию от суммы перевода

На странице неудачной транзакции найдите Transaction Fee, Gas Used и фактическую Gas Price, если обозреватель их показывает. Рассматривайте сумму предполагаемого перевода отдельно. Поле Value может показывать отправленное на исполнение значение, не доказывая, что получатель его получил.

У обычной транзакции Mainnet комиссия за исполнение равна использованному газу, умноженному на фактическую цену единицы газа. Максимальная комиссия и лимит газа задают границы: произведение этих двух пределов не показывает, сколько вы действительно заплатили. Документация Ethereum о газе объясняет эти различия.

Это условный расчёт, а не реальная транзакция и не оценка текущей комиссии:

Показатель Пример
Предполагаемый перевод токенов 100 токенов
Общий статус квитанции Failed
Использованный газ 60,000 единиц
Фактическая цена газа 5 gwei за единицу
Комиссия за исполнение 300,000 gwei, или 0.0003 ETH

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

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

Отличайте нехватку газа от отката контракта

Руководство Etherscan по ошибкам различает исполнение, при котором закончился газ, и откат контракта. Оба случая могут дать неудачную транзакцию, но требуют разного разбора.

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

Исполнение отменено контрактом: контракт остановил исполнение и откатил свои изменения. Он может вернуть ошибку с описанием невыполненного условия. Спецификация REVERT допускает сохранение неиспользованного газа, поэтому квитанция с ошибкой не обязательно показывает расход 100% лимита.

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

Цена и лимит газа - разные настройки. Более высокая оплата за единицу не заставит контракт принять отвергаемое действие. Не ослабляйте защиту транзакции и не увеличивайте лимиты только ради исчезновения непонятного предупреждения.

Проверьте предыдущие успешные шаги до повтора

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

Перед разрешением новой попытки сделайте короткую запись:

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

Если последний пункт заполнить не получается, повтор оставляет причину невыясненной и может стоить ещё одной комиссии, если новую транзакцию включат в блок. Используйте официальный канал поддержки протокола и публичные данные транзакции; сид-фразу и приватные ключи держите в секрете.

Ошибка действия не создаёт возвратный баланс газа

MetaMask объясняет, что не получает сетевую комиссию за газ и не может её вернуть. Неиспользованный запас газа отличается от комиссии, уже потраченной на исполнение. Чтобы получить этот неиспользованный запас, не нужно подключаться к сайту возврата.

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

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

Теряются ли токены, которые я пытался отправить, если транзакция Ethereum не удалась?

У обычной транзакции Ethereum Mainnet, в квитанции которой общий статус означает ошибку, предполагаемый перевод и изменения состояния контрактов откатываются. Отправитель всё равно платит за исполнение. Если балансы не соответствуют этому результату, проверьте отдельные транзакции и точный контракт токена.

Всегда ли неудачная транзакция расходует весь лимит газа?

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

Исправит ли повышение цены газа транзакцию с откатом?

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