⚔️ 1️⃣ permit() = одобрить не требуется транзакция

Когда вы подписываете сообщение EIP-2612 или EIP-712, вы говорите:

“Я разрешаю адресу X тратить Y токенов до момента Z.”

И только с этой подписью (v, r, s) лицо, его держащее, может вызвать token.permit(...)

→ В блокчейне это эквивалентно настоящему одобрению approve().

→ Они могут transferFrom() вывести ваши токены, при этом вы не отправляли никаких транзакций.

🧨 2️⃣ Как хакеры злоупотребляют

Атакующий отправит вам всплывающее окно MetaMask следующего типа:

“Подпишите для проверки кошелька” или “Подпишите сообщение для dApp”

Но на самом деле это permit() или Permit2 с

spender = кошелек хакера, value = 2^256-1.

Вы нажимаете “Подписать” → ваши токены считаются одобренными для хакера.

Нет газа. Нет логов эксплорера. Но токены все равно пропадают 🕳️

🧩 3️⃣ Причина, по которой MetaMask заставляет вас быть самоуверенным

MetaMask отображает “Подписать типизированные данные” или “Подписать для проверки”

не уточняя, для кого вы подписываете permit().

Вот почему многие теряют токены, не понимая почему.

🧰 4️⃣ Как избежать

1️⃣ Смотрите всплывающее окно кошелька (MetaMask / WalletConnect)

•“Запрос подписи” / “Подписать” / “Подписать типизированные данные” → Остановитесь, не подписывайте, если не уверены

•“Подключить” / “Подключиться к сайту” → Обычно просто смотрите адрес, безопаснее, но все равно будьте осторожны

2️⃣ Откройте детали запроса

•Нажмите “Показать детали” / “Расширенные” / три точки → смотрите сырые данные

•Если видите JSON, содержащий domain, types, message, primaryType → Это EIP‑712 типизированные данные, необходимо тщательно проверить

3️⃣ Ищите опасные ключевые слова в сырых данных

•spender, owner, value, deadline, nonce, permit, PermitSingle/Batch/Transfer → 🚩 предупреждение permit/approval

•Если есть текст вроде “Я согласен подключиться” → низкий риск, но не абсолютно безопасно