Почему токены могут “зависнуть” при отправке — и как работают non-standard контракты
Ты отправил токен, всё прошло — но получатель его не видит. Где он? В никуда? На самом деле — всё на месте, просто смарт-контракт токена работает нестандартно. Это частая проблема в DeFi, особенно с токенами, которые не следуют стандарту ERC-20.
Разбираемся: почему токен может «зависнуть» — и что делать, чтобы не потерять активы.
Что значит “non-standard” токен?
В Ethereum (и EVM-сетях) стандарт токена — это ERC-20. Он задаёт чёткие правила: как работает transfer, balanceOf, decimals, approve и т.п.
Но важно понимать: стандарт ERC-20 — это скорее рекомендация, а не строгое правило. Разработчики могут изменить поведение токена, и тогда transfer() не вызовет revert, decimals может отсутствовать, а сам токен — добавлять комиссии, блокировки или налоги при переводе.
Что происходит при попытке отправить такой токен?
➜ Транзакция может пройти on-chain, но фактически не передать токен или передать меньше
➜ Кошелёк не сможет отобразить баланс корректно
➜ Контракт-получатель (например, DEX) не распознает токен как валидный
➜ В агрегаторе или мосте токен может просто “застрять” в contract-стейте
Почему так происходит?
Разработчики могут намеренно или по ошибке не следовать стандарту ERC-20, добавляя свои условия — whitelist, разблокировку, KYC и прочее. Иногда токен и вовсе фейковый (scam/honeypot), а взаимодействие с ним происходит без проверки возврата значений, что только усиливает риски.
Как не попасть?
✔️ Проверяй токен перед отправкой:
✔️ Адрес контракта
✔️ Наличие кода на Etherscan
✔️ Поддержку интерфейса ERC-20 (totalSupply, decimals, transfer возвращает bool)
✔️ Метки на DeBank, CoinGecko, TokenSniffer
Используй только DEX/бриджи, которые умеют работать с такими токенами (например, PancakeSwap часто добавляет поддержку нестандартных). Для отправки — юзай интерфейсы, которые умеют отлавливать ошибки (safeTransfer, Rabby, Zapper)
❗️В Web3 ты работаешь не с банком — а с кодом. И если токен «не по правилам», последствия могут быть непредсказуемы.
Стандарт — это язык общения между контрактами. Нарушил — никто не поймёт. Даже ты.
#SmartContracts