Ethereum

Почему кошелёк не может оценить gas и что проверить перед отправкой

Ошибка оценки gas часто означает, что вызов контракта завершится откатом. Проверяем сеть, баланс, allowance, параметры и состояние протокола.

Почему кошелёк не может оценить gas и что проверить перед отправкой

Короткий ответ: перед отправкой кошелёк просит узел приблизительно выполнить вызов и оценить расход gas. Если симуляция завершается ошибкой, надёжного числа нет. Причиной может быть неверная сеть, недостаток баланса или allowance, изменившееся состояние контракта, неправильные параметры либо сбой RPC. Простое увеличение gas limit помогает не всегда.

Что именно оценивает кошелёк

Узел моделирует транзакцию на основании текущего состояния блокчейна: балансов, кода контракта, хранилища и параметров вызова. Результат показывает примерное количество gas, нужное при этих условиях. Это не обещание, потому что до включения в блок состояние способно измениться.

Оценка расхода отличается от выбора цены. Gas limit ограничивает объём вычислений, а base fee и надбавка задают стоимость единицы. Если интерфейс пишет «cannot estimate gas», проблема обычно возникла ещё до расчёта итоговой платы. Подробнее цена единицы разобрана в статье о base fee, priority fee и max fee.

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

Сообщение кошелька бывает упрощённым. За ним может скрываться revert reason контракта, ошибка RPC или отказ симуляции без расшифровки. Если интерфейс позволяет безопасно скопировать технические детали, сохраните их до перезагрузки страницы. По одной фразе «gas estimation failed» нельзя выбирать исправление.

Проверка сети, адреса и нативного баланса

Сначала сопоставьте выбранную сеть с адресом контракта. Один и тот же формат 0x используется во многих EVM-сетях, однако состояния и контракты в них разные. Адрес знакомого токена в Ethereum не доказывает существование того же актива в другой сети.

Затем проверьте нативную монету. Для передачи ERC-20 нужен не только токен, но и ETH либо другая монета конкретной сети для комиссии. Даже полный токен-баланс не заменяет gas, если приложение не использует отдельный механизм спонсирования.

Убедитесь, что контракт и метод действительно предназначены для выбранного действия. Поддельный интерфейс может подставить другой адрес. Перед подписью полезно повторить проверку по инструкции, как проверить адрес смарт-контракта токена.

Allowance, баланс и параметры операции

Обмен, депозит в протокол или добавление ликвидности часто требуют разрешения контракту списать токен. Если allowance отсутствует, относится к другому spender или меньше суммы, основной вызов может отклониться. Проверьте, завершилась ли транзакция approve и не изменился ли адрес маршрутизатора.

Недостаточный токен-баланс тоже бывает неочевиден. Часть суммы могла быть заблокирована, потрачена другой транзакцией или отображаться с неверным decimals. Токены с комиссией за перевод способны доставить контракту меньше, чем ожидает его логика.

Для обмена проверьте минимально допустимый результат и срок действия заявки. Цена пула могла измениться, а старая котировка – истечь. Не увеличивайте проскальзывание без понимания: это меняет допустимую цену, но не исправляет неверный адрес, отсутствие allowance или паузу контракта.

Когда виновато состояние протокола

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

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

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

Практический алгоритм

  1. Отмените окно подписи и запишите точный текст ошибки.
  2. Проверьте сеть, адрес контракта и публичный адрес своего аккаунта.
  3. Сверьте нативный баланс для комиссии и баланс нужного токена.
  4. Проверьте подтверждение approve, сумму allowance и spender.
  5. Обновите котировку, сумму, срок и другие параметры операции.
  6. Повторите чтение через другой доверенный RPC, если есть признаки сбоя.
  7. Отправляйте вручную только после того, как понятна причина ошибки.

Если транзакция всё же была отправлена и получила статус Failed, смотрите receipt и причину отката. Плата в таком случае объясняется выполненной вычислительной работой, как в материале о том, почему комиссия списывается за неудачную транзакцию.

Что безопасно сообщить поддержке

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

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

Итог

Ошибка оценки gas – сигнал о неуспешной симуляции, а не рекомендация назначить произвольно высокий лимит. Проверяйте сеть, нативный баланс, контракт, allowance и актуальность параметров. Ручная отправка оправдана только тогда, когда причина понятна и вы можете объяснить, почему состояние в блоке позволит вызову пройти.