В 2022 году Uniswap представил Permit2 как «UX-революцию для DeFi»: вместо отдельных approve-транзакций под каждое приложение пользователь даёт одну универсальную подпись, и токены становятся доступны сразу всем интегрированным dApps. С точки зрения удобства — прорыв, экономия на gas и кликах. С точки зрения безопасности — главная мишень wallet drainer’ов 2024-2026 годов. Разберёмся, как Permit2 устроен и почему одна подпись может стоить вам всего портфеля.

Что такое Permit2 простыми словами

Permit2 — это специальный смарт-контракт Uniswap Labs, который выступает посредником между вашим кошельком и любыми DeFi-приложениями. Принцип такой: вы один раз даёте Permit2 разрешение тратить ваши токены (обычно на максимум — unlimited), а затем подписываете гриппой запросы от конкретных приложений через off-chain сигнатуру EIP-712. Permit2 проверяет подпись и переводит токены получателю, не требуя новой on-chain транзакции approve.

До Permit2 каждый DeFi-проект требовал собственный approve на каждый токен — отдельная транзакция за газ, отдельное подтверждение в кошельке. Permit2 решает эту проблему универсальным интерфейсом: один контракт-агрегатор для всех. Сейчас Permit2 поддерживается Uniswap, 1inch, Cowswap, Matcha, ParaSwap и десятками других протоколов на Ethereum, Arbitrum, Optimism, Base, Polygon.

ℹ️ Важно понимать

Permit2 сам по себе не вредоносный — это удобный технический стандарт. Но его подписи имеют огромную силу: одна неверная подпись может разрешить вывести все ваши токены любому адресу. И в отличие от обычного approve, эту подпись невозможно «увидеть» в блокчейне до её использования.

Permit2 vs обычный approve — сравнение

Чтобы понять риски, сравним классический approve, EIP-2612 Permit и Permit2.

Параметр Permit2 EIP-2612 Permit Classic approve
On-chain транзакция Один раз для Permit2 Нет, подпись off-chain Каждый раз
Универсальность Все интегрированные dApps Только конкретный токен Конкретный токен + контракт
Срок действия Настраиваемый, обычно 30 дней Настраиваемый До явного revoke
Видимость в кошельке Сложная (EIP-712) Сложная Простая
Риск drainer’а Высокий Средний Низкий

Главная проблема Permit2 — UX-видимость. Когда MetaMask показывает запрос подписи Permit2, вы видите технический JSON с полями spender, amount, deadline. Большинство пользователей не интерпретируют этот текст и просто нажимают «Confirm». Drainer’ы пользуются именно этим: они подсовывают подпись Permit2, которая разрешает выкачать все основные стейблы кошелька (USDT, USDC, DAI) сразу на их адрес.

Как работает Permit2 (механика)

Процесс одобрения через Permit2 происходит в два этапа:

  • Шаг 1 — Одноразовая регистрация: пользователь один раз делает on-chain approve контракту Permit2 (адрес 0x000000000022D473030F116dDEE9F6B43aC78BA3) на максимум для каждого нужного токена
  • Шаг 2 — Off-chain подписи: при каждом swap’е/действии в dApp кошелёк подписывает EIP-712 сообщение со структурой PermitDetails: токен, сумма, spender, expiration, nonce
  • dApp передаёт подпись в Permit2-контракт, тот проверяет валидность и переводит токены spender’у
  • Срок действия подписи (deadline) обычно ставится на 30 минут — для swap’а в реальном времени
  • Permit2 поддерживает batch-подписи: одно сообщение может разрешить трату нескольких токенов сразу

Drainer-сценарий использует именно batch-вариант: жертва подписывает «обычный swap», а на самом деле в подписи зашифрованы permissions на 5-10 токенов сразу с deadline на годы вперёд и spender = адрес атакующего.

⚠️ Не делай так

Никогда не подписывайте Permit2-сообщения на незнакомых сайтах, через рекламу, ссылки из Discord или Telegram. Проверяйте поле spender в подписи — оно должно совпадать с известным адресом dApp (Uniswap Universal Router, 1inch Aggregator), а не с непонятным EOA-адресом.

Инструменты защиты

  • Rabby Wallet или Frame вместо MetaMask — оба интерфейса парсят Permit2-подписи в читаемый вид: токен, сумма, получатель, срок
  • Pocket Universe и Wallet Guard — браузерные расширения, которые симулируют последствия подписи и предупреждают, если spender выглядит подозрительно
  • Blockaid и Web3 Antivirus — поведенческий анализ сайта в реальном времени
  • revoke.cash — на вкладке Permissions показывает все активные Permit2-allowance’ы и позволяет отозвать одним кликом
  • Лимитированные approve — вместо max approval ставьте конкретную сумму под конкретный swap (поддерживается в Rabby и Frame)
  • Hardware wallet — Ledger и Trezor отображают параметры Permit2 на экране устройства, без подтверждения физической кнопкой подпись не уйдёт
  • Аудит привязок — раз в месяц проверяйте revoke.cash и отзывайте просроченные или ненужные разрешения
  • Для долгосрочного хранения активов используйте отдельный кошелёк без Permit2-связок, либо кастодиальные сервисы на Bybit, Bitget
💡 Совет

Если вам нужно подписать Permit2 на новом сайте — сначала проверьте адрес spender в подписи через Etherscan: это должен быть известный контракт с верифицированным кодом и большой историей транзакций. Если в поле spender — EOA-адрес без истории, это 100% drainer, отказывайте подписать.

Что делать, если столкнулся

Если вы подписали подозрительную Permit2-подпись, у вас есть короткое окно, чтобы спасти средства. Подпись действует, пока не истечёт её deadline, но реализуется она через on-chain транзакцию атакующего — обычно через несколько секунд или минут.

  • Немедленно переведите все свободные токены с этого адреса на новый чистый кошелёк
  • Откройте revoke.cash, перейдите в раздел Permissions/Signatures, отозвите все активные Permit2-allowance’ы
  • Помните: revoke.cash отзывает on-chain approve, но не отменяет off-chain подпись — если вы её подписали, drainer всё ещё может попытаться её использовать через transferFrom (если allowance Permit2 ещё активен)
  • Полная защита — отозвать allowance Permit2 для конкретного токена через approve(Permit2, 0), это сделает подпись бесполезной
  • Проверьте все цепи и все токены — Permit2 единый адрес на каждой сети, и опасность одинакова на Ethereum, Arbitrum, Optimism, Base, Polygon
  • Никогда больше не используйте этот кошелёк с большими суммами — даже если выглядит, что drainer не сработал, рассмотрите его как скомпрометированный
  • Сообщите о drainer-сайте в Scam Sniffer и Chainabuse, добавьте URL в чёрный список — это спасёт следующих пользователей