Отзыв одобрений токенов из SSP

·7 мин. чтения·Автор: SSP Editorial Team
Иллюстрация отзыва одобрений токенов ERC-20 из wallet SSP: allowance сброшен в ноль, а SSP Key сосирает транзакцию.

Отзыв одобрений токенов из 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 хотите отозвать, или когда не хотите подключаться к стороннему инструменту.

  1. Откройте страницу контракта токена в подходящем explorer'е:
    • Ethereum: etherscan.io
    • Polygon: polygonscan.com
    • Base: basescan.org
    • BNB Smart Chain: bscscan.com
    • Avalanche: snowtrace.io
  2. Перейдите на вкладку Contract, затем Write Contract (или Write as Proxy, если токен — это контракт-прокси; большинство крупных стейблкоинов именно такие).
  3. Найдите функцию approve. Её параметры — spender (адрес, который вы хотите отозвать) и amount (новое allowance).
  4. Установите amount равным 0. Вставьте адрес spender — скопируйте его из вашей предыдущей истории транзакций, никогда не вводите по памяти.
  5. Подключите свой wallet. Большинство explorer'ов поддерживают WalletConnect — рекомендуемый способ подключить SSP. Подтвердите соединение в расширении.
  6. Нажмите Write. Explorer соберёт транзакцию approve(spender, 0) и передаст её SSP. Расширение SSP покажет детали вызова; SSP Key сосирает; отзыв уйдёт в сеть.

Этот путь многословный, но не оставляет двусмысленности насчёт того, что именно вы подписали.

Путь 2: использовать специализированный инструмент отзыва

Для большинства пользователей это практичный вариант. revoke.cash — широко используемый open-source инструмент для этой задачи. Он сканирует ваш адрес во всех поддерживаемых чейнах, перечисляет каждое активное allowance, помечает рискованные (неограниченные суммы, незнакомые контракты) и позволяет отзывать их — поштучно или пачками — через подключённый wallet.

Сценарий:

  1. Откройте revoke.cash прямо в браузере. Добавьте настоящий домен в закладки и заходите только из закладки. Фишинговые копии инструментов отзыва существуют именно потому, что пользователь приходит туда уже готовым подписывать транзакции.
  2. Подключитесь через WalletConnect, затем отсканируйте QR-код или вставьте URI в SSP.
  3. Переключите селектор чейна на тот, который хотите проаудитить. revoke.cash подтянет ваши одобрения для этого чейна.
  4. Просмотрите список. Каждая строка показывает токен, spender, сумму allowance и обычно метку dApp.
  5. Нажмите Revoke рядом со всем, чем вы больше не пользуетесь. Каждый отзыв — это отдельная транзакция approve(spender, 0), сосиренная SSP.

Практический workflow аудита

Раз или два в год выделяйте 20 минут и проходите так:

  1. Подключите SSP к revoke.cash через WalletConnect.
  2. Просмотрите ваши активные одобрения на каждом чейне, которым вы пользовались. Начните с Ethereum — исторически самого плотного графа одобрений, — затем пройдитесь по Polygon, Base, BNB Smart Chain и Avalanche.
  3. Сначала берите самое рискованное. Отсортируйте или просмотрите список в поиске неограниченных allowance и незнакомых названий dApp. Протокол, в котором вы один раз сделали swap в 2024 и больше не возвращались, — отличный кандидат. То же касается любого контракта, который вы не можете опознать.
  4. Отзовите. Подтвердите транзакцию в расширении SSP; SSP Key попросит вас сосирать; отзыв уйдёт в сеть.
  5. Сосирайте на SSP Key. Это момент, чтобы перепроверить адресата. SSP Key показывает контракт, который вы вызываете, и функцию — подтвердите, что оба соответствуют вашему намерению.
  6. Повторяйте по каждому чейну. 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) поддерживают permitoff-chain подписи, действующие как одобрения. revoke.cash покажет известные ему permit-разрешения; всё, чего вы не узнаёте, трактуйте так же, как on-chain allowance.

Преимущество 2-из-2 при уборке

Часто упускаемый момент: отзыв в SSP — это не один клик на одном устройстве. Расширение составляет отзыв, но в одиночку отправить его не может. SSP Key должен сосирать, и именно на этом шаге сосирания вы проверяете, что именно сейчас уйдёт. Если бы расширение когда-нибудь оказалось скомпрометировано и попыталось отправить вредоносный "отзыв", который на деле оказался бы новым одобрением, SSP Key показал бы настоящую функцию и сумму на своём экране. Два устройства, две возможности поймать проблему.

Регулярная гигиена одобрений — это привычка DeFi с самой высокой отдачей, которую большинство пользователей пропускают. Поставьте напоминание в календарь, проведите аудит, спите спокойнее. И продолжайте читать серию — начните с Ethereum в SSP, если хотите закрепить специфику чейна, или вернитесь к Одобрения токенов: разрешения, которые вы продолжаете выдавать, чтобы напомнить себе, почему это важно.

Поделиться статьёй

Похожие статьи