Guides

Ошибка transfer amount exceeds balance при отправке токена

28 октября 2026 г.
4 мин чтения

Перевод ERC-20 или USDT падает с ошибкой transfer amount exceeds balance. Причины: decimals, не та сеть, другой контракт токена или блокировка баланса.

Кошелёк показывает, что у вас есть токены, но при отправке появляется ошибка execution reverted: ERC20: transfer amount exceeds balance или похожая. Если транзакцию всё же отправить, она завершится со статусом Fail, а газ спишется. Разберёмся, почему контракт «не видит» баланс, который видите вы.

Симптом: контракт отказывается переводить

  • Кошелёк предупреждает, что транзакция, скорее всего, не пройдёт.
  • В обозревателе у транзакции статус Fail с текстом про balance.
  • Обычно ошибка возникает на сумме «всё до копейки», с токенами из аирдропа или после переключения сети.

Почему так: баланс считает контракт, а не кошелёк

Токен ERC-20 — это смарт-контракт, который хранит таблицу «адрес → баланс». Функция transfer проверяет, что у отправителя хватает средств, и отменяет выполнение, если сумма больше записанного баланса. Так работает стандартная реализация, описанная в документации OpenZeppelin, на которой построено большинство токенов. Кошелёк же показывает то, что получил от узла и своего списка токенов, — и иногда это не то, что вы пытаетесь отправить.

Частые причины ошибки
ПричинаКак проявляетсяКак проверить
Неверные decimalsСумма в базовых единицах больше реальнойСравнить decimals контракта с введённой суммой
Не та сетьБаланс есть в одной сети, отправка в другойСверить сеть в кошельке и обозревателе
Другой контрактТокен с тем же тикером, но иным адресомСверить адрес контракта с официальным
Комиссия за перевод у токенаОтправка «всего» не проходитПопробовать сумму чуть меньше
Блокировка эмитентом или вестингБаланс виден, но не переводитсяПроверить функции контракта в обозревателе

Что делать по шагам

  1. Проверьте сеть. USDT в Ethereum, BNB Smart Chain и Arbitrum — разные контракты в разных сетях. Если в кошельке выбрана одна сеть, а токены лежат в другой, отправка будет вызывать контракт, где у вас ноль.
  2. Сверьте адрес контракта. Откройте токен в обозревателе и сравните адрес контракта с официальным адресом эмитента. Токены-двойники с тем же названием — частый спам; об этом подробно в статье о поддельном USDT.
  3. Проверьте decimals. У USDT в Ethereum 6 знаков после запятой, у многих токенов — 18. Если вы отправляете через dApp или скрипт и вводите сумму в базовых единицах, легко ошибиться на порядки. Пересчитать поможет конвертер decimals, а про округление в кошельках — материал о маленьких балансах и decimals.
  4. Отправьте сумму чуть меньше всего баланса. Если у токена есть комиссия за перевод или кошелёк округлил отображение, «всё» может оказаться больше реального остатка.
  5. Проверьте, не заблокированы ли токены. Некоторые контракты позволяют эмитенту заморозить адрес, а токены из вестинга или стейкинга видны, но недоступны для перевода.

Чем эта ошибка отличается от нехватки газа

Ошибка transfer amount exceeds balance относится к самому токену. Если же не хватает ETH на комиссию, кошелёк пишет другое — «insufficient funds for gas». Эти случаи легко спутать, потому что оба мешают отправить USDT. Проверьте оба баланса: токена и нативной монеты сети. Если транзакция с ошибкой баланса уже попала в блок, газ за неё не возвращается: сеть выполнила работу, просто результатом стал откат.

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

Если токены нужно обменять

Перед обменом убедитесь, что у вас именно тот токен, который принимает сервис. На KOT.CASH при создании заказа, например на странице USDT → ETH, вы выбираете сеть USDT, и адрес депозита выдаётся под официальный контракт этой сети. Токен с другим контрактом заказ не распознает, даже если он называется USDT. Отправляйте сумму, указанную в заказе, одной транзакцией. Обмен идёт без регистрации, комиссия сервиса — 1% на плавающем курсе или 1,5% на фиксированном.

Как не повторить

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

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

Списывается ли газ, если перевод упал с exceeds balance?

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

В кошельке есть USDT, а контракт пишет, что баланса нет. Почему?

Чаще всего выбрана не та сеть или кошелёк показывает токен с другим контрактом. Сверьте сеть и адрес контракта в обозревателе.

Можно ли отправить весь баланс токена до последней единицы?

Обычно да, но у токенов с комиссией за перевод или при округлении в интерфейсе это не срабатывает. Отправьте чуть меньше всей суммы.

Обменять USDT на ETHОшибка insufficient funds for gasТокены с комиссией за переводКонвертер decimals токенов

Источники

Готовы обменять крипту?

Быстрые, прозрачные свопы — регистрация не нужна.

Начать обмен
Ошибка transfer amount exceeds balance при отправке токена | KOT.CASH