В этой статье разберём отозвать разрешения 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"), но у него три недостатка:

  1. Одна сеть за раз — чтобы проверить approvals на Ethereum, Arbitrum и Optimism, нужно переключаться между explorer'ами
  2. Нет batch revoke — каждую транзакцию подписываешь отдельно, платишь gas за каждый revoke
  3. Неудобная фильтрация — нельзя отсортировать по сумме одобренных токенов или дате

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:

  1. Открой rabby.io и скачай расширение для браузера
  2. Импортируй кошелёк через seed phrase или подключи hardware wallet (Ledger/Trezor)
  3. В настройках (Settings → Preferences) включи "Show test networks" если работаешь с тестнетами

Для hardware wallets процесс выглядит так:

📢 Больше практических разборов — в канале «Сергей Зиненко | DeFi-Гедонист». Подписывайтесь, чтобы не пропустить.

  1. Подключи Ledger к компьютеру, разблокируй и открой Ethereum app
  2. В Rabby: кликни на иконку кошелька → Add Address → Hardware Wallet → Ledger
  3. Выбери адрес из 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 больше не нужен — отзывай.

Как я это делаю:

  1. Сортирую approvals по дате (по умолчанию в Rabby)
  2. Прокручиваю вниз до отметки "1 month ago"
  3. Отмечаю всё, что старше 30 дней
  4. 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:

  1. Открой контракт в Etherscan
  2. Вкладка "Contract"
  3. Если видишь "Read as Proxy" или "Write as Proxy" — контракт upgradeable
  4. Проверь раздел "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 недели (автоматически):

  1. Python скрипт опрашивает API Rabby для моих адресов
  2. Формирует список approvals старше 30 дней
  3. Отправляет уведомление в Telegram бот

Раз в месяц (вручную):

  1. Открываю Rabby, захожу в Approvals
  2. По списку из Telegram делаю batch revoke для каждой сети
  3. Обновляю таблицу в 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:

  1. Подключи кошелёк на сайте
  2. Включи email alerts в настройках
  3. Выбери частоту уведомлений (еженедельно/ежемесячно)

Revoke.cash пришлёт письмо со списком approvals старше указанного срока. Минусы:

  • Нет batch revoke (придётся переходить в Rabby или отзывать через их UI по одному)
  • Email можно пропустить (я предпочитаю Telegram)

Гигиена безопасности: как избежать ненужных approvals

Лучше предотвратить проблему, чем решать её. Вот правила, которые я соблюдаю при взаимодействии с DeFi.

Ограничивай суммы approvals

Никогда не давай unlimited approve, если можешь указать точную сумму. Современные кошельки (Rabby, Rainbow, Frame) позволяют редактировать сумму перед подтверждением транзакции.

Как это сделать в Rabby:

  1. Протокол запрашивает approve (например, Uniswap просит разрешение на 100 USDC)
  2. Rabby показывает окно "Token Approval"
  3. Кликни на сумму — появится поле ввода
  4. Введи нужное количество (например, 105 USDC с запасом 5%)
  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 там, где возможно.

Мой чеклист для начинающих:

  1. Открой Rabby → Approvals прямо сейчас
  2. Отзови все unlimited approvals старше 3 месяцев
  3. Ограничь суммы для активных протоколов до разумного лимита ($5-10k)
  4. Настрой напоминание в календаре на ревизию каждые 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.