Разрешения токенов: как отозвать и не потерять кошелёк
Approve в DeFi: чем опасно бессрочное разрешение, как проверить его список и отозвать лишнее за пару минут дешевле доллара.
Approve в DeFi: чем опасно бессрочное разрешение, как проверить его список и отозвать лишнее за пару минут дешевле доллара.
Приятель разменял 200 USDT на свежий мемкоин на новом DEX, через неделю про проект забыл. Через полгода с кошелька ушли не только эти токены, но и лежавшие рядом 4000 USDT и эфир. Никто не взламывал пароль и не крал seed-фразу — контракт проекта просто воспользовался правом, которое само же и получило. Перед первым обменом кошелёк предложил approve, приятель нажал «подтвердить», и контракт получил доступ к его монетам бессрочно. На этом разрешении теряют деньги чаще, чем на скам-раздачах, потому что оно тихое: ничего не списывается сразу, просто открывается дверь. Разберём, как посмотреть, что ты уже наразрешал, и как закрыть лишнее за пару минут.
Начинать надо не с покупок и не с отзыва, а с ревизии: выясни, сколько контрактов вообще имеют доступ к твоим токенам. Самый быстрый способ — сайт revoke.cash. Он поддерживает Ethereum, BNB Chain, Polygon, Arbitrum, Base, Optimism и ещё десяток сетей: подключаешь кошелёк, выбираешь сеть и видишь список — какой контракт, к какому токену, на какую сумму разрешение. Второй вариант — встроенные инструменты обозревателей: у Etherscan есть Token Approval Checker, у BscScan и Polygonscan то же самое. Для Ethereum и BNB их хватает, для остальных сетей revoke.cash удобнее.
Кошелёк сам такой список обычно не показывает. MetaMask подсказывает про подписи только в момент действия, поэтому задним числом смотреть разрешения приходится через отдельный сервис. Возьми за правило: раз в месяц открыл revoke.cash, глянул список, лишнее убрал. Это занимает 5 минут.
Смарт-контракт не может просто взять и списать твои монеты с кошелька — по умолчанию он видит только свой токен и ничего не может с чужим USDT. Поэтому перед обменом кошелёк просит разрешение (approve): ты разрешаешь контракту распоряжаться конкретным токеном в конкретном количестве. Это не перевод — в этот момент баланс не меняется. Меняется только право.
Есть два вида разрешения. Точное — «можно списать ровно 200 USDT». И безлимитное (unlimited allowance) — «можно списать сколько угодно и когда угодно», технически это число 2 в 256-й степени. Биржи и DEX по умолчанию ставят именно безлимит: тогда при следующем обмене approve не понадобится, и ты экономишь на газе. Удобно — но именно бессрочное разрешение и становится ключом от кошелька, если контракт окажется дырявым или скамным.
Отзывай только то, чему больше не доверяешь: старые изношенные протоколы, незнакомые DEX, любые контракты из раздач и «клеймов», которые ты уже забрал. Рабочим площадкам, которыми пользуешься каждый день, разрешение можно оставить — но лучше с лимитом, а не с безлимитом.
Отзыв — это обычная транзакция в блокчейне, газ около 46 000 единиц. Цифры по сетям при средней загрузке:
| Сеть | Газ | Примерная цена |
|---|---|---|
| Ethereum | ~46 000 | 1,5–4 $ |
| BNB Chain | ~46 000 | 0,03–0,1 $ |
| Polygon | ~46 000 | меньше 0,01 $ |
| Arbitrum | ~46 000 | 0,05–0,2 $ |
Посчитаем на Ethereum: 46 000 газа при 20 gwei и цене эфира 3000 $ — это 0,00092 ETH, около 2,7 $. Если под рукой кошелёк с 5000 $ в токенах, отзыв обходится в 0,05% от суммы под риском. Дождись ночи или выходного, когда сеть разгружена и газ падает в 3–5 раз — отзыв тех же разрешений будет стоить меньше доллара.
Все кошельки позволяют вручную вписать сумму разрешения. Когда сайт показывает approve на неограниченное число, открой настройки токена и поставь ровно ту сумму, что меняешь, плюс запас 1–2%. Да, при следующей сделке approve придётся повторить и доплатить газ — зато контракт в любой момент видит только эти 200 USDT, а не весь твой баланс. Для крупных сумм это единственный разумный вариант: экономия на газе в 3 $ не стоит риска потерять 5000 $.
Главный канал кражи — сайты, которые просят approve под видом бесплатной раздачи, «проверки кошелька» или «клейма награды». Ты подписываешь разрешение на токен, который у тебя реально лежит, и через час контракт его вытягивает. Второй сценарий — взлом нормального протокола: сам код был чистый, но злоумышленники вывели ключи и дёрнули все накопленные разрешения разом. Жертв тут не спасает даже хорошая репутация площадки. Поэтому приватный ключ и seed-фраза — не единственное, что нужно беречь: список выданных разрешений это тоже твои деньги.