EIP-2612 (Permit) — это стандарт Ethereum, который позволяет пользователю авторизовать передачу токенов, подписывая off-chain сообщение, вместо отправки on-chain approval-транзакции. Польза должна была быть экономией газа — без отдельной approve-транзакции, permit-подпись путешествует с реальным трансфером. Цена в том, что signature-фишинг теперь доминирует как ведущий вектор криптопотерь в 2025-2026.
Что Permit-подпись реально делает
Пользователь подписывает EIP-712 typed сообщение, гласящее: "Я авторизую адрес X тратить до Y токена Z с моего адреса, истекает в момент T." Подпись — валидное доказательство on-chain; любой, держащий подпись, может отправить её в контракт токена, и контракт распознает авторизацию без требования предшествующей approve-транзакции.
С точки зрения UX это элегантно: одна подпись, без газа, без отдельной транзакции. С точки зрения атаки это катастрофично: подпись выглядит как бессмысленный криптографический блок в UI кошелька, у пользователя нет интуиции, что её подписание эквивалентно передаче кастодиальных отношений для этого токена по этому адресу.
Эволюция Permit2
Uniswap запустил Permit2 в конце 2022 года как обновлённую permit-систему. Permit2 вводит единый approval-контракт, который может использовать любое приложение, с более гранулярным контролем (лимиты per-transaction, batch-операции, expiration nonces). Тот же вектор signature-based фишинг-атаки применяется, с добавленной складкой, что Permit2 подписи могут быть валидны для многих токенов одновременно.
К середине 2024 года Permit2 стал доминирующим approval-механизмом на Uniswap и многих других Ethereum dApp. Chainalysis в полугодовом отчёте 2025 года приписал примерно 60% approval-фишинг потерь подписям типа Permit2.
Шаблон атаки в 2026
Пользователь приземляется на фейковый интерфейс — иногда клонированный DEX, иногда фишинговая страница "claim airdrop", иногда скомпрометированный легитимный dApp. Интерфейс запрашивает соединение кошелька, затем запрашивает "подпись", а не транзакцию. Подпись в UI кошелька выглядит как хеш или строка typed-data полей.
Если пользователь подписывает, злоумышленник собирает подпись и ждёт — часто дни — прежде чем отправить. Задержка преднамеренна: ломает ментальную связь пользователя между "я подписал что-то странное три дня назад" и "мой USDC только что исчез".
Что реально защищает
Три слоя:
Первое, читайте каждую off-chain подпись. Display EIP-712 typed-data в Rabby Wallet, MetaMask (с обновления мая 2024 года) и современной прошивке Ledger и Trezor показывает структурированные поля Permit-подписи в человекочитаемой форме. Если вы видите "spender", установленный на адрес, который вы не узнаёте, не подписывайте.
Второе, предпочитайте DEX-агрегаторы, которые не используют signature-only approval-потоки. 1inch использует стандартный on-chain approval (больше газа, больше трения, но видно в истории транзакций пользователя). Некоторые меньшие DEX имеют похожие конфигурации.
Третье, регулярно отзывайте. Запускайте revoke.cash раз в квартал и отзывайте каждый Permit2 allowance, который вы не можете идентифицировать. Это операционный эквивалент "аудита ваших approval".
Оговорка по аппаратному кошельку
Аппаратные кошельки отображают EIP-712 подписи, но качество отображения варьируется. Ledger Nano S Plus показывает структурированные данные на маленьком экране; Trezor Safe 5 показывает в большом тексте на цветном тачскрине. Какое бы устройство вы ни использовали, замедлитесь для typed-data подписей — окно атаки в секунду или две между "это выглядит нормально, нажму подтвердить" и "на самом деле это был вредоносный approval".
Дополнительное чтение: setApprovalForAll, Фишинг, revoke.cash.