Смарт-контракт с доступом к кошельку: как отозвать approve
Статья: Смарт-контракт с доступом к кошельку: как отозвать approve
Каждый раз, когда вы меняете токены на DEX или вносите активы в стейкинг, вы подписываете транзакцию approve. В ней вы разрешаете смарт-контракту тратить ваши токены — часто без ограничения суммы и срока. Подписали год назад при обмене $200, забыли, а контракт до сих пор может списать с вашего кошелька весь баланс.
Статистика неприглядная: у среднего активного пользователя Ethereum — десятки и сотни активных разрешений, из которых реально нужны два-три. Часть контрактов, которым вы дали доступ, уже взломаны, заброшены или написаны новичками. Эксплойты вроде Ronin ($624 млн) и countless meltdowns на мелких DEX начинались именно с того, что у атакующих был легальный способ списывать чужие токены.
Хорошая новость: разрешения можно найти и отозвать за 15 минут. В этой статье — пошаговая инструкция, пример с расчётом ущерба и правила гигиены approve, которые стоит внедрить уже сегодня.
Что такое approve и почему доступ «бессрочный»
Approve — стандартная функция токенов ERC-20. Вы указываете адрес контракта и сумму, которую он может списать с вашего адреса. Проблема в двух вещах:
- Unlimited approve. Многие DEX по умолчанию просят разрешение на
type(uint256).max— условно бесконечную сумму. Это экономит газ: не нужно подписывать approve перед каждой сделкой. - Разрешение не истекает само. Если вы не отозвали approve, он действует годами — пока контракт существует и вы держите токен.
То есть взлом контракта, которому вы год назад дали unlimited-доступ, означает, что дрейнер заберёт ваши токены без вашего участия и без новой подписи.
Практический пример: сколько стоит забытый approve
Представим: в феврале 2024 года вы обменяли на Uniswap 15 000 USDT на ETH и оставили unlimited approve. Забыли. В кошельке тем временем накопилось 8 000 USDT (по курсу ~92 ₽ — около 736 000 ₽).
В августе 2025 года контракт-роутер, который вы использовали, взломан через уязвимость. Атакующие проверяют старые разрешения и списывают ваши 8 000 USDT одной транзакцией.
Расчёт ущерба:
- Потеря: 8 000 USDT × 92 ₽ = 736 000 ₽
- Стоимость отзыва approve заранее: ~50 000–150 000 gas при 10–20 gwei ≈ 0,0005–0,003 ETH (~150–900 ₽ на момент подписи)
- Соотношение: защита за 0,02–0,13% от суммы под риском
И обратите внимание: приватный ключ вы никому не отдавали, seed-фразу не светили. Потеря произошла «легально» — через разрешение, которое вы сами подписали.
Правило: unlimited approve — это не подпись на одну сделку, а долговая расписка без суммы и срока. Отзывайте её так же привычно, как проверяете подписки после бесплатного пробного периода.
Как найти свои активные разрешения
Самый удобный инструмент — revoke.cash (есть версии для Ethereum, BSC, Polygon, Arbitrum, Base и десятка других сетей). Альтернативы: Etherscan's Token Approval Tool, Hoax (ex-Unrekt), в браузерных кошельках — встроенные разделы разрешений.
Пошагово:
- Откройте revoke.cash и подключите кошелёк (или просто вставьте свой адрес — просмотр работает без подключения).
- Выберите сеть из выпадающего списка.
- Изучите список: для каждого разрешения показаны токен, адрес контракта и сумма (цифры вида 142 857 921 384 — это и есть unlimited).
- Кликните по разрешению — проверьте проект на Etherscan: верифицирован ли код, сколько лет контракту, есть ли флаги.
Проверку по всем сетям делайте раз в квартал — это 10–15 минут.
Как отозвать approve правильно
Кейсы и порядок действий
- Контракт вам больше не нужен (разовая сделка на DEX месяц назад) → отзывайте сразу.
- Контракт используется регулярно (стейкинг, фарминг) → отзовите unlimited и выдайте точное разрешение: ровно сумму, которую вносите, или чуть больше.
- Сеть дешёвая (Polygon, BSC, Base) → можно перебирать всё подряд, отзыв стоит центы.
- Ethereum mainnet при высоком газе → приоритизируйте: сначала токены с крупным балансом, потом разрешения на большие суммы, потом всё остальное.
Технически revoke работает так
Вы вызываете approve того же токена на тот же контракт с суммой 0. Это обычная транзакция: подтвердите в кошельке, дождитесь подтверждения сети. Если revoke.cash не работает с вашим кошельком — те же действия доступны через Etherscan → «Contract» → «Write Contract» → функция approve(адрес, 0).
Чек-лист гигиены разрешений
- [ ] Раз в квартал — аудит approve во всех сетях, где есть активы
- [ ] Все unlimited-разрешения на токены с балансом > $500 — отозваны или сужены
- [ ] Новый кошелёк для долгосрочного хранения — вообще без разрешений («холодный» адрес)
- [ ] Отдельный «горячий» кошелёк с малым балансом для экспериментов с новыми DEX
- [ ] Перед подписью approve читаете сумму и адрес контракта, а не жмёте «Confirm» по привычке
- [ ] После вывода из стейкинга — отзыв разрешения сразу же, пока не забыли
FAQ
Отзыв approve безопасен? Могут ли пропасть мои токены? Нет, токены остаются у вас. Revoke лишь обнуляет право контракта их списывать. На ваши переводы, стейкинг в других протоколах и сам баланс это не влияет.
Нужно ли отзывать approve, если баланс токена на кошельке ноль? Формально не срочно — списывать нечего. Но если вы планируете снова пополнить этот токен, старое разрешение «оживёт». Лучше чистить сразу, пока сети дешёвые.
Что делать, если revoke-транзакция не проходит или контракт «висит» в списке после отзыва? Обновите страницу и проверьте транзакцию в эксплорере — часто это кэш интерфейса. Если транзакция отклоняется по газу, попробуйте поднять gas limit вручную (200 000–300 000) или повторить через Etherscan Write Contract напрямую.
Проверьте разрешения сегодня — особенно если последний раз подписывали что-то на DEX больше полугода назад. Те 15 минут стоят дешевле любого баланса на вашем кошельке.