
Отзыв одобрений токенов из SSP
Каждый раз, когда вы подтверждаете swap, депозит или листинг NFT в EVM-чейне, вы даёте dApp разрешение перемещать конкретный ERC-20 токен от вашего имени. Эти разрешения — называемые одобрениями или allowance — остаются on-chain после исполнения транзакции. Через несколько месяцев контракт, которому вы доверили токен в марте, в июне всё ещё может иметь право его опустошить. Решение простое: отозвать одобрения, которые больше не нужны. Это руководство показывает, как это сделать из SSP, самокастодиального wallet'а 2-из-2, где каждая транзакция (включая отзывы) сосирается вашим SSP Key.
Если концепция вам в новинку, сначала прочитайте Одобрения токенов: разрешения, которые вы продолжаете выдавать. Там объясняется, зачем существуют одобрения и почему неограниченные allowance — это поверхность атаки по умолчанию в DeFi. Эта статья — её уборочное дополнение.
Краткое напоминание
Когда вы подписываете вызов approve(spender, amount), контракт токена записывает, что spender (как правило, контракт роутера, vault'а или маркетплейса) имеет право перевести до amount этого токена с вашего адреса. Многие dApp запрашивают 2^256 - 1 — фактически неограниченно — чтобы сэкономить вам gas в будущих взаимодействиях. Это удобство — и есть риск: если контракт spender позже будет скомпрометирован или вы перестанете пользоваться dApp, а allowance останется, атакующий может в любой момент опустошить весь баланс.
Отзыв отменяет это разрешение. Он не отменяет прошлых переводов и ничего не "удаляет" — он просто возвращает allowance к нулю.
Как отзыв работает технически
Отзыв — это просто ещё одна транзакция. Вы вызываете approve(spender, 0) на том же контракте токена, в том же чейне, где было выдано исходное одобрение. Этот единственный вызов функции записывает новый 0 в маппинг allowance[owner][spender] контракта, перезаписывая старое значение.
Несколько механических деталей, которые стоит усвоить:
- Один отзыв на чейн на пару токен-spender. Если вы одобрили spender USDC на Ethereum и того же spender на Polygon, вам нужны две транзакции отзыва — по одной на каждом чейне. Allowance не общие между чейнами.
- Отзыв — это самостоятельная транзакция. Она стоит gas, как и любой перевод. Планируйте это: держите нативный актив чейна (ETH на Ethereum, MATIC на Polygon и т. д.), чтобы покрыть комиссию.
- Может быть дешевле, чем вы опасаетесь. Отзыв — это простая запись, часто дешевле swap'а. На Layer 2 вроде Base это обычно копейки.
- SSP всё равно сосирает. Поскольку SSP — это wallet 2-из-2, транзакция отзыва идёт по тому же маршруту, что и любая другая: ваше расширение её предлагает, SSP Key её просматривает и сосирает. Ваша защита распространяется и на саму уборку — ни одно устройство в одиночку не может отозвать, и ни одно устройство в одиночку нельзя обмануть, чтобы подтвердить нечто, замаскированное под отзыв.
Два пути отзыва
У вас есть два одинаково валидных способа отозвать одобрения из SSP. Выбирайте тот, что подходит к ситуации.
Путь 1: использовать авторитетный block explorer
Это ручной, прозрачный маршрут. Полезен, когда вы точно знаете, какой токен и какого spender хотите отозвать, или когда не хотите подключаться к стороннему инструменту.
- Откройте страницу контракта токена в подходящем explorer'е:
- Ethereum: etherscan.io
- Polygon: polygonscan.com
- Base: basescan.org
- BNB Smart Chain: bscscan.com
- Avalanche: snowtrace.io
- Перейдите на вкладку Contract, затем Write Contract (или Write as Proxy, если токен — это контракт-прокси; большинство крупных стейблкоинов именно такие).
- Найдите функцию
approve. Её параметры —spender(адрес, который вы хотите отозвать) иamount(новое allowance). - Установите
amountравным0. Вставьте адрес spender — скопируйте его из вашей предыдущей истории транзакций, никогда не вводите по памяти. - Подключите свой wallet. Большинство explorer'ов поддерживают WalletConnect — рекомендуемый способ подключить SSP. Подтвердите соединение в расширении.
- Нажмите Write. Explorer соберёт транзакцию
approve(spender, 0)и передаст её SSP. Расширение SSP покажет детали вызова; SSP Key сосирает; отзыв уйдёт в сеть.
Этот путь многословный, но не оставляет двусмысленности насчёт того, что именно вы подписали.
Путь 2: использовать специализированный инструмент отзыва
Для большинства пользователей это практичный вариант. revoke.cash — широко используемый open-source инструмент для этой задачи. Он сканирует ваш адрес во всех поддерживаемых чейнах, перечисляет каждое активное allowance, помечает рискованные (неограниченные суммы, незнакомые контракты) и позволяет отзывать их — поштучно или пачками — через подключённый wallet.
Сценарий:
- Откройте
revoke.cashпрямо в браузере. Добавьте настоящий домен в закладки и заходите только из закладки. Фишинговые копии инструментов отзыва существуют именно потому, что пользователь приходит туда уже готовым подписывать транзакции. - Подключитесь через WalletConnect, затем отсканируйте QR-код или вставьте URI в SSP.
- Переключите селектор чейна на тот, который хотите проаудитить. revoke.cash подтянет ваши одобрения для этого чейна.
- Просмотрите список. Каждая строка показывает токен, spender, сумму allowance и обычно метку dApp.
- Нажмите Revoke рядом со всем, чем вы больше не пользуетесь. Каждый отзыв — это отдельная транзакция
approve(spender, 0), сосиренная SSP.
Практический workflow аудита
Раз или два в год выделяйте 20 минут и проходите так:
- Подключите SSP к revoke.cash через WalletConnect.
- Просмотрите ваши активные одобрения на каждом чейне, которым вы пользовались. Начните с Ethereum — исторически самого плотного графа одобрений, — затем пройдитесь по Polygon, Base, BNB Smart Chain и Avalanche.
- Сначала берите самое рискованное. Отсортируйте или просмотрите список в поиске неограниченных allowance и незнакомых названий dApp. Протокол, в котором вы один раз сделали swap в 2024 и больше не возвращались, — отличный кандидат. То же касается любого контракта, который вы не можете опознать.
- Отзовите. Подтвердите транзакцию в расширении SSP; SSP Key попросит вас сосирать; отзыв уйдёт в сеть.
- Сосирайте на SSP Key. Это момент, чтобы перепроверить адресата. SSP Key показывает контракт, который вы вызываете, и функцию — подтвердите, что оба соответствуют вашему намерению.
- Повторяйте по каждому чейну. Allowance — по чейнам. Не считайте, что отзыв на Ethereum чистит и Polygon.
Не нужно делать с нуля. Цель — оставить allowance на контрактах, которыми вы реально пользуетесь, и обнулить остальное.
Меры предосторожности
- Гигиена доменов. Используйте только официальный домен
revoke.cash. Фишинговые клоны метят именно в этот сценарий, потому что пользователь уже в режиме подписания транзакций. Сохраните в закладках; проверяйте адресную строку перед подключением. - Реальность по чейнам. Отзыв одобрения USDC на Ethereum не трогает одобрение USDC на Polygon, даже если токен "выглядит одинаково" в вашем портфеле. Обходите каждый чейн явно.
- Бюджет на gas. Отзыв стоит gas. На Ethereum накопившиеся отзывы могут сложиться в сумму; делайте их, когда gas спокойный. На Layer 2 стоимость пренебрежимо мала.
- Всегда проверяйте spender. Прежде чем подписать любую транзакцию "отзыва", убедитесь, что адрес spender в вызове совпадает с контрактом, который вы намеревались отозвать. Вредоносный сайт может подсунуть фальшивый интерфейс отзыва, который на самом деле выпускает новое одобрение атакующему. Прочитать имя функции (
approve) и сумму (0) на запросе SSP Key — это ваша последняя линия обороны. - Permit — это другое. Некоторые токены (USDC, варианты DAI) поддерживают
permit— off-chain подписи, действующие как одобрения. revoke.cash покажет известные ему permit-разрешения; всё, чего вы не узнаёте, трактуйте так же, как on-chain allowance.
Преимущество 2-из-2 при уборке
Часто упускаемый момент: отзыв в SSP — это не один клик на одном устройстве. Расширение составляет отзыв, но в одиночку отправить его не может. SSP Key должен сосирать, и именно на этом шаге сосирания вы проверяете, что именно сейчас уйдёт. Если бы расширение когда-нибудь оказалось скомпрометировано и попыталось отправить вредоносный "отзыв", который на деле оказался бы новым одобрением, SSP Key показал бы настоящую функцию и сумму на своём экране. Два устройства, две возможности поймать проблему.
Регулярная гигиена одобрений — это привычка DeFi с самой высокой отдачей, которую большинство пользователей пропускают. Поставьте напоминание в календарь, проведите аудит, спите спокойнее. И продолжайте читать серию — начните с Ethereum в SSP, если хотите закрепить специфику чейна, или вернитесь к Одобрения токенов: разрешения, которые вы продолжаете выдавать, чтобы напомнить себе, почему это важно.


