
Если вы вставили в поле получателя адрес контракта токена и нажали «Отправить», токены теперь лежат на балансе этого контракта. Вернутся ли они, зависит от одного: есть ли в контракте функция, позволяющая вывести токены с его собственного баланса. Для крупных стейблкоинов честный ответ обычно «нет» — USDT и USDC, отправленные на адреса их же контрактов, почти никогда не возвращают. У небольших токенов и у контрактов проектов с функцией спасения возврат иногда возможен, но сделать его может только владелец контракта.
Как возникает эта ошибка
Обозреватели блоков и сайты-агрегаторы показывают адрес контракта рядом с названием токена, с кнопкой копирования. Его копируют, пока ищут нужную сеть, а потом вставляют в кошелёк вместо адреса получателя. Кошелёк принимает его, потому что адрес контракта выглядит так же, как личный: 0x и 40 шестнадцатеричных символов в Ethereum и BNB Smart Chain, адрес T… в TRON. По самому адресу не видно, что за ним код, а не человек.
Известные адреса контрактов стоит узнавать с первого взгляда. USDT в Ethereum — 0xdAC17F958D2ee523a2206206994597C13D831ec7, USDT в TRON — TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t. Если адрес получателя совпадает с контрактом токена, который вы отправляете, остановитесь.
Проверьте, что произошло, в обозревателе
- Откройте транзакцию по хешу в обозревателе сети (Etherscan, BscScan, Tronscan). Если не уверены, какой нужен, определитель хеша транзакции подскажет.
- Посмотрите статус. Success значит, что перевод прошёл и токенов в кошельке больше нет.
- Найдите строку перевода токена: с вашего адреса на адрес с названием токена или с пометкой контракта. На Etherscan у контракта значок документа и вкладка Contract.
- Откройте адрес получателя. Если это сам токен (в заголовке Token Tracker или тот же тикер), токены застряли в контракте токена. Если это другой контракт — роутер, мост, хранилище проекта, — запомните его название: от этого зависит, кто может помочь.
- Если страница непонятна, вставьте сырые входные данные в декодер input data: вызов
transfer(to, amount), гдеtoравен контракту токена, подтверждает случай.
Когда токены могут вернуться
| Получатель | Кто управляет балансом | Шанс вернуть |
|---|---|---|
| Контракт USDT / USDC | Никто, так устроен контракт | Очень низкий |
| Мелкий токен с функцией rescue/withdraw | Владелец контракта (команда) | Возможен, по их решению |
| Депозитный контракт биржи или смарт-кошелёк | Биржа или провайдер кошелька | Часто, через поддержку, иногда платно |
| Роутер DEX или агрегатора | Обычно никто, у некоторых есть sweep | Низкий, зависит от кода |
| Адрес сжигания (0x000…dEaD) | Никто | Нет |
В некоторых контрактах токенов есть функция — часто recoverERC20, rescueTokens или withdrawToken, — которая позволяет владельцу вывести чужие токены с баланса контракта. Если исходный код верифицирован, это видно во вкладках Read/Write в обозревателе. Если функция есть, владелец может вернуть токены, но не обязан. Tether и Circle публично говорили, что возврат токенов, отправленных на их контракты, не является штатной услугой.
Куда писать и что отправить
- Команде проекта, стоящего за контрактом, — через официальный сайт или GitHub, указанные на странице токена в обозревателе, но никогда не тому, кто написал вам первым.
- Бирже, если токены по ошибке ушли на её депозитный контракт. Укажите хеш, сумму, время и ID аккаунта.
- Обменному сервису, если адрес был взят со страницы заказа. В KOT.CASH напишите в поддержку со ссылкой на заказ и хешем; если депозит ушёл не на адрес заказа, поддержка скажет, что видно с её стороны, но отменить перевод на чужой контракт не может.
Как больше не отправлять на контракт
- Копируйте адрес получателя только у получателя: на странице заказа, на экране депозита биржи, на экране «Получить» своего кошелька.
- Перед отправкой откройте адрес в обозревателе. У контракта есть вкладка Contract и код, у обычного кошелька нет.
- Сверяйте первые шесть и последние шесть символов с источником, а не только края; проверка адреса проверит формат и контрольную сумму.
- Если адрес новый, сначала отправьте небольшую тестовую сумму: в TRON и BSC это стоит центы.
В KOT.CASH для каждого заказа на странице показывается новый адрес депозита, созданный под этот заказ, и это никогда не контракт токена. Если вы переводите USDT между сетями, статья о переводе USDT между TRC20, ERC20 и BEP20 объясняет, какой адрес куда относится, а отправка не в ту сеть разбирает соседнюю ошибку — выбор не той цепочки.
Частые вопросы
Я отправил USDT на адрес контракта USDT. Tether вернёт?
На практике почти никогда. В контракте USDT нет штатной функции для вывода токенов, застрявших на его балансе, и Tether не оказывает такую услугу.
Почему кошелёк разрешил отправку на контракт?
Адреса контрактов и личные адреса имеют одинаковый формат. Кошелёк не видит по адресу, что получатель — код, а перевод ERC-20 на контракт проходит, если токен его не блокирует.
Как понять, что адрес — контракт?
Откройте его в обозревателе. Etherscan, BscScan и похожие показывают вкладку Contract с байткодом или исходником; в Tronscan страница адреса помечена как контракт.
Есть программа, которая вытащит токены из контракта?
Нет. Баланс контракта может переместить только функция самого контракта, вызванная тем, кому контракт это разрешает.
Я отправил на заказ обмена, а обозреватель показывает контракт. Это проблема?
Некоторые сервисы используют депозитные адреса-контракты. Напишите в сервис с хешем: если адрес взят со страницы заказа, его отследят.