В этой статье разберём отозвать разрешения rabby — ключевые аспекты и практические рекомендации. Когда я первый раз подключил свой Ledger к Uniswap через Rabby, протокол запросил approve на неограниченное количество USDC. Unlimited approval — стандартная практика в DeFi, экономит gas на повторных транзакциях. Но если смарт-контракт скомпрометируют (а такое случалось даже с Curve Finance в 2023), хакер сможет вывести все токены, на которые ты дал разрешение.
Поэтому я каждые 2 недели делаю ревизию approvals — отзываю устаревшие разрешения и ограничиваю суммы для активных протоколов. В этой статье покажу, как организовать эту систему в Rabby Wallet, какие approvals отзывать в первую очередь и как автоматизировать процесс через batch revoke.
Что такое token approvals и зачем их отзывать
Token approval — это разрешение, которое ты даёшь смарт-контракту на списание токенов с твоего адреса. Когда меняешь ETH на USDC через Uniswap, ты сначала делаешь approve, разрешая роутеру Uniswap забрать твой ETH, а затем swap — обмен.
Проблема неограниченных разрешений
Большинство DeFi-протоколов по умолчанию запрашивают type(uint256).max — математически максимальное значение, примерно 115 квинтиллионов токенов. Это удобно: ты делаешь approve один раз, потом можешь свапать сколько угодно без дополнительных транзакций.
Риски такого подхода:
- Уязвимость в контракте. В июле 2023 хакер через баг в Curve Finance вывел $73M, используя старые approvals пользователей
- Фишинговые dApps. Подключаешься к поддельному сайту "UniSwap" (с лишней буквой), даёшь approve — злоумышленник сразу выводит все токены
- Компрометация приватного ключа разработчиков. Если у команды протокола украдут ключи от upgradeable контракта, они смогут модифицировать логику и вывести средства всех, кто давал approvals
В моей практике я видел случай, когда человек дал unlimited approve на 50 ETH для малоизвестной DEX на Arbitrum. Через месяц контракт обновили (это был upgradeable proxy), добавили backdoor и вывели все средства пользователей, у которых были активные approvals.
Когда approvals безопасны
Не все разрешения нужно отзывать немедленно. Если ты активно пользуешься протоколом, держать approve удобно:
- Проверенные протоколы с immutable контрактами: Uniswap V2/V3, SushiSwap, AAVE V3 (core contracts), Curve StableSwap
- Ограниченные суммы: даёшь approve ровно на ту сумму, которую планируешь обменять
- Регулярное использование: если свапаешь через 1inch каждую неделю, можно оставить approve на месяц и затем отозвать
Я использую правило: если не трогал протокол больше 30 дней — revoke автоматом. Для этого веду табличку в Obsidian с датами последних транзакций по каждому смарт-контракту.
Почему Rabby лучше Etherscan для revoke
Etherscan предлагает встроенный Token Approvals Checker (вкладка "More" → "Token Approvals"), но у него три недостатка:
- Одна сеть за раз — чтобы проверить approvals на Ethereum, Arbitrum и Optimism, нужно переключаться между explorer'ами
- Нет batch revoke — каждую транзакцию подписываешь отдельно, платишь gas за каждый revoke
- Неудобная фильтрация — нельзя отсортировать по сумме одобренных токенов или дате
Rabby решает все эти проблемы:
- Показывает approvals по всем EVM-сетям одновременно (Ethereum, Polygon, Arbitrum, Optimism, Base, Scroll, zkSync Era и ещё 30+ чейнов)
- Batch revoke — отзываешь 5-10 разрешений одной транзакцией, экономишь до 60% gas
- Сортировка по дате, сумме, контракту — видишь самые опасные approvals первыми
Сравнительная таблица:
| Функция | Etherscan | Rabby Wallet | Revoke.cash |
|---|---|---|---|
| Multi-chain просмотр | ❌ | ✅ | ✅ |
| Batch revoke | ❌ | ✅ | ❌ |
| Сортировка по сумме | ❌ | ✅ | ✅ |
| Поиск по адресу контракта | ✅ | ✅ | ✅ |
| Работа с hardware wallets | ✅ | ✅ (Ledger, Trezor, Keystone) | ✅ |
| Отображение риска протокола | ❌ | ⚠️ (частично) | ✅ |
Я использую связку: Rabby для массовых revoke раз в месяц, Revoke.cash для разовых проверок перед взаимодействием с новым протоколом.
Как открыть список approvals в Rabby
Rabby Wallet — это форк MetaMask с улучшенным UX для multi-chain операций и встроенными инструментами безопасности. Работает как браузерное расширение (Chrome, Brave, Edge) и поддерживает все типы кошельков: seed phrase, hardware wallets, watch-only адреса.
Установка и подключение кошелька
Если ещё не установил Rabby:
- Открой rabby.io и скачай расширение для браузера
- Импортируй кошелёк через seed phrase или подключи hardware wallet (Ledger/Trezor)
- В настройках (Settings → Preferences) включи "Show test networks" если работаешь с тестнетами
Для hardware wallets процесс выглядит так:
📢 Больше практических разборов — в канале «Сергей Зиненко | DeFi-Гедонист». Подписывайтесь, чтобы не пропустить.
- Подключи Ledger к компьютеру, разблокируй и открой Ethereum app
- В Rabby: кликни на иконку кошелька → Add Address → Hardware Wallet → Ledger
- Выбери адрес из derivation path (обычно первый в списке)
После подключения увидишь главный экран с балансом токенов и NFT. Теперь открываем approvals.
Шаги для доступа к Approvals
Шаг 1: Кликни на иконку кошелька в правом верхнем углу Rabby (круглый аватар с твоим ENS именем или сокращённым адресом)
Шаг 2: В открывшемся меню найди иконку "Approvals" в левом нижнем углу — выглядит как галочка в щите. Кликни на неё.
Шаг 3: Rabby начнёт сканировать все EVM-сети, на которых у тебя есть активные approvals. Процесс занимает 5-15 секунд в зависимости от количества сетей и истории транзакций.
После загрузки увидишь список всех token approvals, выданных с этого адреса. По умолчанию они отсортированы по дате — самые свежие сверху.
Интерфейс раздела Approvals
Rabby показывает approvals в двух режимах:
By Contract (по контрактам) — группировка по адресу смарт-контракта:
0x68b3...f89c (Uniswap V3 Router)
├─ USDC: Unlimited (approved 2 days ago)
├─ WETH: 5.2 ETH (approved 1 week ago)
└─ DAI: Unlimited (approved 3 months ago)
By Assets (по активам) — группировка по токенам:
USDC (Ethereum)
├─ Uniswap V3: Unlimited
├─ 1inch Router: 10,000 USDC
└─ SushiSwap: Unlimited
Переключаешься между режимами вкладками в верхней части экрана. Я предпочитаю "By Assets" — сразу вижу, какие токены в зоне риска.
Каждая строка содержит:
- Токен (название + иконка)
- Approved Amount (сумма разрешения: конкретное число или "Unlimited")
- Spender (адрес контракта или название протокола, если Rabby его распознал)
- Last Activity (сколько времени назад давал approve)
- Кнопка Revoke
Фильтрация и сортировка approvals
Перед массовым revoke нужно определить приоритеты. Rabby даёт три инструмента фильтрации.
Фильтр по блокчейну
Кликни на выпадающий список "All Chains" в верхней части экрана. Увидишь чекбоксы для всех EVM-сетей:
- Ethereum Mainnet
- Polygon
- Arbitrum One
- Optimism
- Base
- Scroll
- zkSync Era
- Avalanche C-Chain
- BNB Smart Chain
- и ещё 25+ сетей
Выбери нужные сети — список approvals мгновенно обновится. Это удобно, когда хочешь почистить конкретную сеть. Например, я обычно начинаю с Ethereum Mainnet (там самые дорогие gas fees, approvals представляют наибольший риск) и Base (там раньше встречал много scam-протоколов).
Поиск по адресу контракта
Если узнал о проблеме с конкретным протоколом (например, в Telegram-канале Rekt написали про эксплойт), скопируй адрес смарт-контракта и вставь в строку поиска вверху экрана.
Пример: в августе 2024 был компрометирован контракт DeFi-протокола на Scroll 0x742d...89af. Я вставил адрес в поиск Rabby, нашёл approve на 1,500 USDC и сразу отозвал — за 20 минут до того, как хакер начал массовый дрейн средств.
Сортировка по сумме одобрения
Кликни на заголовок столбца "Approved Amount" — список отсортируется от наибольшей суммы к наименьшей. Это критически важная функция: ты сразу видишь, какие approvals несут максимальный риск.
Когда я делал первую ревизию approvals в своём основном кошельке, обнаружил:
- Approve на 20 миллиардов USDC для древнего роутера SushiSwap (контракт 2020 года, давно заменённый новой версией)
- Unlimited approve на ETH для неизвестного мне контракта на Polygon
- Разрешение на весь баланс DAI для протокола, который закрылся год назад
Все три я отозвал в первую очередь. Правило: любой approve на сумму больше $10,000 требует немедленной проверки.
Как отозвать одно разрешение
Начнём с простого кейса — revoke одного approval вручную. Это полезно, когда нашёл подозрительный контракт или просто хочешь ограничить риски для конкретного токена.
Пошаговая инструкция single revoke
Шаг 1: В списке approvals найди строку с разрешением, которое хочешь отозвать. Допустим, это LP-токен USDC-ETH от Uniswap V2 на сети Scroll с unlimited approval.
Шаг 2: Кликни "Revoke" справа от этой строки. Rabby откроет окно подтверждения транзакции.
Шаг 3: Проверь детали:
- Network: Scroll (должна совпадать с сетью, где находится контракт)
- Gas fee: обычно $0.10–0.50 на L2 (Arbitrum, Optimism, Base), $2–5 на Ethereum Mainnet
- Token: LP USDC-ETH (подтверди, что отзываешь правильный токен)
- Spender: адрес контракта Uniswap V2 Router
Шаг 4: Кликни "Sign" или "Confirm" (если используешь hardware wallet, подтверди транзакцию на устройстве — на Ledger нажми обе кнопки одновременно).
Шаг 5: Дождись подтверждения в блокчейне. На L2 это занимает 2-5 секунд, на Ethereum Mainnet — 15-60 секунд в зависимости от загрузки сети.
После успешного revoke Rabby покажет:
- Hash транзакции (можно скопировать и посмотреть в explorer'е)
- Стоимость в USD (например, "$0.23")
- Статус "Revoked"
Нужно ли обновлять страницу
Важный нюанс: после single revoke отозванное разрешение не исчезает из списка автоматически. Мне пришлось методом проб и ошибок понять это — я отозвал 3 approvals подряд, список не обновился, подумал что транзакции не прошли, и чуть не сделал повторные revoke (потратил бы gas впустую).
Чтобы увидеть обновлённый список:
Вариант 1: Нажми F5 (перезагрузи вкладку с Rabby). После перезагрузки кошелёк заново загрузит approvals, и отозванные разрешения исчезнут.
Вариант 2: Закрой окно Approvals (кликни за его пределами) и открой снова через иконку в левом нижнем углу.
Вариант 3: Переключись на другую сеть в фильтре, затем вернись обратно — это тоже триггерит перезагрузку.
Это единственный минус Rabby в плане UX — автоматическое обновление списка отсутствует. Но учитывая, что альтернативы (Etherscan, MetaMask Portfolio) вообще не имеют удобного интерфейса для approvals, это терпимо.
Batch Revoke: как отозвать несколько разрешений одной транзакцией
Если накопилось 10-20 устаревших approvals, отзывать каждый по отдельности дорого и долго. Batch revoke позволяет объединить несколько операций revoke в одну транзакцию — экономия gas достигает 40-60%.
Выбор approvals для batch revoke
Шаг 1: Отметь чекбоксами разрешения, которые хочешь отозвать. Чекбоксы появляются слева от каждой строки при наведении курсора.
Пример из моей практики — чистка approvals на Base:
- Unlimited USDC для контрактаSwast (протокол, которым не пользовался 4 месяца)
- Unlimited CBBTC для контракта 1inch Router (планировал один своп, забыл отозвать)
- LP-токен UniV2 для биржи Aerodrome (closed позицию месяц назад)
Шаг 2: После выбора нескольких approvals внизу экрана появится кнопка "Revoke (5)" — цифра показывает количество выбранных разрешений.
Важно: выбирай approvals только из одной сети. Если отметишь разрешения на Ethereum и Arbitrum одновременно, Rabby выдаст ошибку — batch revoke работает только в пределах одного блокчейна.
Два режима batch revoke
Кликни "Revoke (5)". Rabby предложит два варианта:
1. Send transactions one by one (отправить транзакции по очереди)
- Rabby создаст 5 отдельных транзакций revoke
- Ты подписываешь их последовательно — кликаешь "Sign", ждёшь подтверждения, кликаешь "Sign" для следующей
- Каждая транзакция идёт отдельно в блокчейн
- Gas: платишь полную стоимость за каждый revoke
- Время: ~30-60 секунд на все 5 транзакций
- Когда использовать: никогда, это устаревший метод из старых версий Rabby
2. Batch Revoke (одна транзакция на все)
- Rabby упаковывает все 5 операций revoke в один multicall
- Ты подписываешь одну транзакцию
- Все approvals отзываются атомарно (либо все успешно, либо все откатываются)
- Gas: экономия 40-60% по сравнению с one-by-one
- Время: 5-15 секунд (одно подтверждение в блокчейне)
- Когда использовать: всегда, если доступен
Я всегда выбираю Batch Revoke. Единственное исключение — если отзываю approvals на Ethereum Mainnet в момент высокого gas (150+ gwei), тогда проверяю стоимость batch транзакции: иногда выгоднее подождать ночи/выходных и сделать по отдельности при gas 20-30 gwei.
Подтверждение batch транзакции
После выбора "Batch Revoke":
Шаг 1: Rabby покажет окно с деталями мультиколла:
Batch Revoke (5 approvals)
Network: Base
Estimated Gas: $0.47
Tokens to revoke:
- USDC (Unlimited) → Swast
- CBBTC (Unlimited) → 1inch Router
- UniV2 LP (Unlimited) → Aerodrome
...
Шаг 2: Кликни "Sign". Если используешь Ledger:
- На экране устройства появится "Review transaction"
- Прокрути правой кнопкой до "Approve"
- Нажми обе кнопки одновременно для подтверждения
Шаг 3: Rabby отобразит прогресс: "Revoking 1/5... 2/5... 3/5..." — это UI-индикация, на самом деле транзакция одна, просто Rabby показывает, какие approvals в ней обрабатываются.
Шаг 4: После подтверждения увидишь успешный статус для каждого revoke с хэшем общей транзакции.
Важное преимущество batch revoke: отозванные approvals сразу исчезают из списка, обновлять вкладку не нужно. Это работает только для batch режима — single revoke требует перезагрузки.
🎓 Научиться зарабатывать в DeFi — курс «DeFi-Гедонист» с практикой и поддержкой. Подробности в канале «Сергей Зиненко | DeFi-Гедонист».
Какие approvals отзывать в первую очередь
Не все approvals одинаково опасны. Вот моя система приоритетов, которую я отработал на 50+ кошельках клиентов.
Unlimited approvals на большие суммы
Первая категория — разрешения на неограниченное количество ценных токенов. Сортирую список по сумме (кликаю на "Approved Amount"), смотрю на строки с меткой "Unlimited".
Критерии для немедленного revoke:
Токены с балансом > $5,000:
- Любой stablecoin (USDC, USDT, DAI)
- Основные активы (ETH/WETH, BTC/WBTC)
- Governance токены крупных протоколов (UNI, AAVE, CRV)
Пример из реальной практики: у клиента был unlimited approve на 250 ETH (~$400,000 на момент проверки) для контракта Paraswap Augustus на Ethereum. Контракт легитимный, но в 2023 была уязвимость в одной из версий роутера. Мы отозвали approve и сделали новый с ограничением в 10 ETH — клиент всё равно не обменивает больше за раз.
LP-токены:
- Особенно опасны, потому что представляют сразу два актива
- Unlimited approve на LP USDC-ETH = доступ к обоим токенам в пуле
- Всегда отзываю для протоколов, которыми не пользуюсь активно
Exotic токены с высокой волатильностью:
- Если держишь memecoin, который вырос на 1000%, не оставляй unlimited approve
- Пример: в феврале 2024 токен BONK на Solana вырос с $0.00001 до $0.00008, у держателей с approvals на "unlimited" появился риск на порядок больше
Протоколы, которыми не пользуешься 30+ дней
Второй приоритет — заброшенные approvals. Если не трогал протокол больше месяца, approve больше не нужен — отзывай.
Как я это делаю:
- Сортирую approvals по дате (по умолчанию в Rabby)
- Прокручиваю вниз до отметки "1 month ago"
- Отмечаю всё, что старше 30 дней
- Batch revoke
Исключения (approvals, которые не отзываю даже через 3 месяца):
- AAVE: если держу позицию в lending (даже без активных действий, approve нужен для withdraw)
- Curve: если есть locked CRV в vote-escrowed контракте
- Uniswap V3: если есть активная LP-позиция (approve нужен для collect fees и remove liquidity)
- GMX: если есть открытые perpetual позиции
Для таких случаев веду отдельную заметку в Obsidian:
# Active DeFi Positions
## AAVE (Arbitrum)
- Supplied: 5,000 USDC
- Approve: 0x7d2...f4c (AAVE Pool)
- Keep until: withdraw position
## Curve (Ethereum)
- Locked: 1,200 CRV until 2025-08-15
- Approve: 0x5f3...a2d (Vote Escrow)
- Keep until: unlock
Неизвестные или подозрительные контракты
Третий приоритет — approvals для контрактов, которые Rabby не распознал (вместо названия протокола показывает сокращённый адрес 0x742d...89af).
Как проверить безопасность такого контракта:
Шаг 1: Скопируй адрес контракта из Rabby
Шаг 2: Открой explorer сети (Etherscan, Arbiscan, Basescan и т.д.)
Шаг 3: Вставь адрес в поиск, проверь:
- Contract verified? — если код не верифицирован, это красный флаг
- Creation date — контракты старше 2 лет обычно безопаснее (прошли проверку временем)
- Transaction count — если меньше 100 транзакций, протокол либо новый, либо мёртвый
- Similar contracts — explorer иногда показывает похожие адреса, можешь найти основной контракт протокола
Шаг 4: Если контракт:
- Создан в последние 7 дней
- Не верифицирован
- Имеет меньше 50 транзакций
- → Revoke немедленно, скорее всего scam
Пример: в ноябре 2024 на Base появились десятки фейковых клонов Aerodrome Finance. Контракты копировали UI оригинального сайта, но адреса были другие. Пользователи, которые давали approvals этим контрактам, теряли все токены в течение часов.
Upgradeable контракты
Четвёртый приоритет — апгрейдимые смарт-контракты. Это proxy контракты, логика которых может меняться через админский ключ.
Как определить upgradeable контракт в explorer:
- Открой контракт в Etherscan
- Вкладка "Contract"
- Если видишь "Read as Proxy" или "Write as Proxy" — контракт upgradeable
- Проверь раздел "Proxy Implementation" — там адрес текущей логики
Риски:
- Если админский ключ скомпрометирован, хакер может заменить логику контракта на вредоносную
- Даже честная команда может случайно внести баг при апгрейде
Какие upgradeable контракты я не трогаю:
- AAVE V3 (multi-sig управление с time-lock 48 часов)
- Compound V3 (управляется через governance, требует голосование)
- GMX V2 (2/3 multi-sig + 24h time-lock)
Какие отзываю:
- Малоизвестные протоколы с TVL < $10M
- Контракты с single-owner управлением (проверяю в разделе "Read Contract" → owner())
- Любые upgradeable контракты на свежих L2 (меньше 6 месяцев с запуска сети)
Автоматизация процесса revoke
Делать ревизию approvals вручную раз в месяц скучно. Я автоматизировал процесс через связку Rabby + Obsidian + Python скрипт.
📢 Больше практических разборов — в канале «Сергей Зиненко | DeFi-Гедонист». Подписывайтесь, чтобы не пропустить.
Мой рабочий процесс
Каждые 2 недели (автоматически):
- Python скрипт опрашивает API Rabby для моих адресов
- Формирует список approvals старше 30 дней
- Отправляет уведомление в Telegram бот
Раз в месяц (вручную):
- Открываю Rabby, захожу в Approvals
- По списку из Telegram делаю batch revoke для каждой сети
- Обновляю таблицу в Obsidian с датой последней чистки
Пример Obsidian заметки:
# Approvals Maintenance
Last cleanup: 2026-02-10
## Next cleanup: 2026-03-10
## Whitelist (never revoke)
- AAVE Pool (all chains)
- Uniswap V3 Router (if active LP)
- Curve Gauge (if staked)
## Auto-revoke after 30 days
- All DEX routers (1inch, Paraswap, etc)
- Yield aggregators (Yearn, Beefy)
- NFT marketplaces
Настройка Python скрипта для мониторинга
Если хочешь создать похожую автоматизацию:
Требования:
- Python 3.10+
- Библиотеки:
web3,requests,python-telegram-bot
Логика:
import requests
from datetime import datetime, timedelta
RABBY_API = "https://api.rabby.io/v1"
ADDRESSES = ["0x742d...89af", "0x5f3b...a2d1"] # твои кошельки
def get_old_approvals(address, days=30):
# Получаем список approvals через Rabby API
response = requests.get(f"{RABBY_API}/approvals/{address}")
approvals = response.json()
cutoff_date = datetime.now() - timedelta(days=days)
old_approvals = []
for approval in approvals:
if datetime.fromtimestamp(approval['timestamp']) < cutoff_date:
old_approvals.append({
'token': approval['token_symbol'],
'spender': approval['spender_name'],
'amount': approval['amount'],
'chain': approval['chain']
})
return old_approvals
# Запускать через cron каждые 2 недели
for address in ADDRESSES:
old = get_old_approvals(address, days=30)
if len(old) > 5:
# Отправка в Telegram
send_telegram_alert(f"Found {len(old)} old approvals for {address}")
Этот скрипт я запускаю через GitHub Actions каждые 2 недели — получаю уведомление в Telegram, открываю Rabby и делаю batch revoke за 2 минуты.
Альтернатива: Revoke.cash alerts
Если не хочешь писать код, используй сервис Revoke.cash:
- Подключи кошелёк на сайте
- Включи email alerts в настройках
- Выбери частоту уведомлений (еженедельно/ежемесячно)
Revoke.cash пришлёт письмо со списком approvals старше указанного срока. Минусы:
- Нет batch revoke (придётся переходить в Rabby или отзывать через их UI по одному)
- Email можно пропустить (я предпочитаю Telegram)
Гигиена безопасности: как избежать ненужных approvals
Лучше предотвратить проблему, чем решать её. Вот правила, которые я соблюдаю при взаимодействии с DeFi.
Ограничивай суммы approvals
Никогда не давай unlimited approve, если можешь указать точную сумму. Современные кошельки (Rabby, Rainbow, Frame) позволяют редактировать сумму перед подтверждением транзакции.
Как это сделать в Rabby:
- Протокол запрашивает approve (например, Uniswap просит разрешение на 100 USDC)
- Rabby показывает окно "Token Approval"
- Кликни на сумму — появится поле ввода
- Введи нужное количество (например, 105 USDC с запасом 5%)
- Подтверди
При следующем свопе через Uniswap придётся сделать новый approve, но это всего +$0.20 к стоимости транзакции на L2. Зато если контракт скомпрометируют, хакер сможет вывести максимум 105 USDC, а не весь баланс.
Мой личный лимит для approvals:
- Stablecoins: не больше $10,000 даже для проверенных протоколов
- ETH/WBTC: не больше 5 единиц
- Altcoins: сумма, эквивалентная $5,000 по текущему курсу
Используй отдельные кошельки для экспериментов
Основное правило кибербезопасности в крипте: не держи все яйца в одной корзине.
Моя структура кошельков:
Холодный кошелёк (Ledger) — 90% капитала:
- Используется только для проверенных протоколов (AAVE, Uniswap, Curve)
- Approvals только с ограниченными суммами
- Ревизия approvals каждые 2 недели
Горячий кошелёк (MetaMask seed phrase) — 9% капитала:
- Для регулярных операций: свопы, yield farming, NFT
- Approvals на средние суммы ($500-2000)
- Ревизия approvals каждую неделю
Экспериментальный кошелёк (отдельный seed phrase) — 1% капитала:
- Для новых протоколов, тестнетов, airdrop фарминга
- Не боюсь давать unlimited approvals, потому что там максимум $500
- Если контракт скамит — потеря некритична
Такая структура спасла меня в 2023, когда я тестировал новый DEX на zkSync Era. Дал unlimited approve с экспериментального кошелька, через неделю протокол оказался скамом. Потерял $300 — неприятно, но не катастрофично. Если бы использовал основной кошелёк, риск был бы в 100 раз выше.
Проверяй контракты перед approve
Перед тем как дать разрешение, трачу 2 минуты на базовую проверку:
Шаг 1: Адрес контракта совпадает с официальным?
- Открываю документацию протокола (docs.uniswap.org, docs.aave.com)
- Копирую адрес контракта из раздела "Deployed Contracts"
- Сравниваю с адресом в окне approve Rabby
- Даже одна неправильная буква = фишинг
Шаг 2: Контракт аудирован?
- Ищу раздел "Security Audits" на сайте протокола
- Открываю отчёты от известных фирм (Trail of Bits, OpenZeppelin, Certik)
- Если аудитов нет или они от no-name компаний — риск выше
Шаг 3: Какой TVL у протокола?
- Открываю DeFiLlama
- Ищу протокол, смотрю Total Value Locked
- Если TVL < $10M или протокол не найден — красный флаг
Пример: в январе 2025 появился протокол "Velodrome V3" на Base с TVL $2M. Реальный Velodrome имеет TVL $200M. Это был клон, который через 3 дня выполнил rug pull и вывел все средства пользователей. Проверка TVL заняла бы 30 секунд и спасла бы $5M пользовательских денег.
Частые ошибки при revoke и как их избежать
За 3 года работы с Rabby я собрал коллекцию типичных ошибок. Вот топ-5.
Ошибка #1: Отзыв approve для активной LP-позиции
Симптом: Отозвал approve для Uniswap V3, теперь не могу забрать ликвидность из пула.
Причина: LP-токены (ERC-721 для Uniswap V3) требуют approve для операций remove liquidity и collect fees. Если отозвать разрешение, контракт роутера не сможет забрать твою позицию обратно.
Как избежать:
- Перед revoke проверь, есть ли активные позиции в протоколе
- Для Uniswap V3: открой app.uniswap.org → Pools, посмотри на свои позиции
- Если есть активные — сначала выведи ликвидность, затем revoke
Решение (если уже отозвал):
- Заново дай approve (это займёт одну транзакцию)
- Выведи ликвидность
- Снова revoke approve
Ошибка #2: Batch revoke для разных сетей
Симптом: Выбрал 10 approvals (5 на Ethereum, 5 на Arbitrum), нажал Batch Revoke — получил ошибку "Cannot batch across chains".
Причина: Batch revoke работает только в пределах одного блокчейна. Нельзя объединить транзакции на Ethereum и Arbitrum в один multicall.
Как избежать:
- Используй фильтр "Select Chain" перед выбором approvals
- Выбирай только одну сеть за раз
- Делай batch revoke отдельно для каждого чейна
Ошибка #3: Недостаточно gas для batch транзакции
Симптом: Отметил 15 approvals на Ethereum Mainnet, нажал Batch Revoke — транзакция провалилась с ошибкой "Out of gas".
Причина: Batch revoke упаковывает все операции в один multicall. Если отзываешь слишком много approvals одновременно, gas limit может превысить блок лимит (30M gas на Ethereum).
Как избежать:
- На Ethereum Mainnet делай batch максимум по 10 approvals за раз
- На L2 (Arbitrum, Optimism, Base) можно до 20-30
- Следи за estimated gas fee — если больше $10 на Ethereum, лучше разбить на 2 batch
Решение:
- Раздели approvals на группы по 5-10 штук
- Сделай несколько batch revoke подряд
Ошибка #4: Revoke approve для vesting контракта
Симптом: Отозвал approve для токена, который участвует в vesting (постепенная разблокировка). Теперь не могу claim новые порции.
Причина: Некоторые vesting контракты требуют постоянного approve для автоматического начисления токенов.
Как избежать:
- Перед revoke проверь, не участвует ли токен в vesting
- Открой сайт протокола, посмотри раздел "Vesting" или "Unlock schedule"
- Если есть активный vesting — оставь approve до полной разблокировки
Пример: токены от airdrop'а зачастую разблокируются по графику (25% сразу, остальные 75% равными частями за 12 месяцев). Если отозвать approve для vesting контракта, claim последующих частей будет заблокирован.
Ошибка #5: Забыл сделать revoke после теста
Симптом: Тестировал новый протокол с небольшой суммой, дал unlimited approve "на пробу". Забыл отозвать, через месяц пополнил кошелёк на крупную сумму — теперь протокол имеет доступ ко всему балансу.
Причина: Approve привязан к адресу кошелька, а не к балансу в момент одобрения. Если баланс вырос, разрешение автоматически покрывает новые токены.
Как избежать:
- Создай правило: после каждого теста протокола — revoke в тот же день
- Используй отдельный экспериментальный кошелёк для новых протоколов
- Настрой автоматические напоминания (календарь или Python скрипт)
Альтернативные инструменты для управления approvals
Rabby — не единственный способ отзывать разрешения. Вот сравнение с другими инструментами.
Revoke.cash
Плюсы:
- Web-интерфейс, не требует установки расширения
- Показывает risk score для каждого протокола
- Поддерживает 100+ EVM-сетей (больше, чем Rabby)
- Есть mobile версия
Минусы:
- Нет batch revoke — отзываешь по одному
- Нужно подключать кошелёк на сайте (дополнительная поверхность атаки)
- Slower UI по сравнению с нативным расширением
Когда использовать: для разовых проверок кошельков, которые не используешь часто. Для основного кошелька Rabby удобнее.
🎓 Научиться зарабатывать в DeFi — курс «DeFi-Гедонист» с практикой и поддержкой. Подробности в канале «Сергей Зиненко | DeFi-Гедонист».
Etherscan Token Approvals Checker
Плюсы:
- Не требует доверия сторонним сервисам (данные напрямую из блокчейна)
- Показывает детальную информацию о контракте
Минусы:
- Только одна сеть за раз (нужно переключаться между Etherscan, Arbiscan и т.д.)
- Нет сортировки, фильтрации, batch revoke
- Неудобный для регулярного использования
Когда использовать: для финальной проверки перед критическими операциями (например, перед переводом $100k+ стоит проверить approvals через независимый источник).
MetaMask Portfolio
MetaMask добавил раздел Approvals в Portfolio Dashboard (portfolio.metamask.io).
Плюсы:
- Интегрирован с твоим основным кошельком MetaMask
- Multi-chain просмотр
Минусы:
- Поддерживает только MetaMask (не работает с Ledger через Rabby)
- Нет batch revoke
- Медленная загрузка (API часто тормозит)
Когда использовать: если используешь только MetaMask и не хочешь устанавливать дополнительные расширения.
Что дальше
Ревизия token approvals — это базовая гигиена в DeFi, как чистка зубов в реальной жизни. Делай это регулярно, используй batch revoke для экономии времени и gas, ограничивай суммы approvals там, где возможно.
Мой чеклист для начинающих:
- Открой Rabby → Approvals прямо сейчас
- Отзови все unlimited approvals старше 3 месяцев
- Ограничь суммы для активных протоколов до разумного лимита ($5-10k)
- Настрой напоминание в календаре на ревизию каждые 2 недели
Подписывайся на мой Telegram-канал канал «Сергей Зиненко | DeFi-Гедонист» — там разбираю новые уязвимости в DeFi-протоколах, показываю, как настроить автоматический мониторинг approvals, и делюсь кейсами из практики аудита смарт-контрактов. Вступай, если хочешь держать свою крипту в безопасности, а не дарить её хакерам.
FAQ
Q1: Сколько стоит revoke одного approval?
Gas fee зависит от сети: на Ethereum Mainnet — $2-5 при загрузке сети 30-50 gwei, на L2 (Arbitrum, Optimism, Base) — $0.10-0.50. Batch revoke экономит 40-60% gas по сравнению с отзывом по одному. Если у тебя 10 approvals на Ethereum, лучше дождаться низкого gas (воскресенье, 2-5 утра UTC) и сделать batch за $8-12 вместо $30-40 при peak time.
Q2: Что делать, если отозвал approve, но он снова появился в списке?
Это частая проблема Rabby после single revoke — список не обновляется автоматически. Нажми F5 (перезагрузи вкладку) или закрой и открой окно Approvals заново. Если после перезагрузки approve всё ещё там, проверь статус транзакции в explorer'е: возможно, revoke не прошёл из-за недостатка gas или ты случайно отменил подтверждение.
Q3: Можно ли отозвать approve, если потерял доступ к кошельку?
Нет. Token approval — это on-chain разрешение, привязанное к приватному ключу. Без доступа к кошельку ты не можешь подписать транзакцию revoke. Единственный способ защититься — перевести все токены на новый кошелёк (это обнулит approvals для старого адреса, но токены останутся доступны хакеру, если он получит твой ключ).
Q4: Нужно ли отзывать approvals перед выводом всех средств с кошелька?
Технически нет — если баланс токена 0, approve не представляет опасности (контракт не сможет ничего списать). Но если планируешь вернуться к использованию этого кошелька позже, лучше сделать revoke сейчас: забудешь про старые approvals, пополнишь кошелёк через полгода — и окажешься в зоне риска.
Q5: Как часто нужно проверять approvals?
Для основного кошелька (где держишь > $10k) — каждые 2 недели. Для активных трейдеров — еженедельно. Для холодных кошельков, которые используешь только для долгосрочного хранения — раз в месяц достаточно. Настрой напоминание в календаре или используй Python скрипт для автоматических уведомлений в Telegram.