⚔️ 1️⃣ permit() = approuver sans avoir besoin d'une transaction

Lorsque vous signez un message EIP-2612 ou EIP-712, vous dites :

"J'autorise l'adresse X à dépenser Y de mes tokens jusqu'au moment Z."

Et avec cette signature (v, r, s), la personne qui la détient peut appeler token.permit(...)
→ Sur la chaîne, cela équivaut à un appel approve() réel.
→ Ils peuvent transferFrom() retirer vos tokens sans que vous n'ayez envoyé aucune transaction.

⸻

🧨 2️⃣ Comment les hackers en profitent

L'attaquant vous enverra une fenêtre contextuelle MetaMask du type :

"Signer pour vérifier le portefeuille" ou "Signer un message pour dApp"

Mais en réalité, c'est permit() ou Permit2 avec
spender = portefeuille du hacker, value = 2^256-1.

Vous cliquez sur "Signer" → vos tokens sont considérés comme approuvés entièrement pour le hacker.
Pas de frais de gaz. Pas de journal d'exploration. Mais les tokens s'envolent 🕳️

⸻

🧩 3️⃣ Pourquoi MetaMask vous rend imprudent

MetaMask affiche "Signer des données tapées" ou "Signer pour vérification"
sans préciser pour qui vous signez permit().
C'est pourquoi beaucoup de gens perdent des tokens sans savoir pourquoi.

⸻

🧰 4️⃣ Comment se protéger

1️⃣ Regardez la fenêtre contextuelle du portefeuille (MetaMask / WalletConnect)
•"Demande de signature" / "Signer" / "Signer des données tapées" → Arrêtez-vous, ne signez pas si vous n'êtes pas sûr
•"Connecter" / "Se connecter au site" → Généralement, vérifiez juste l'adresse, c'est plus sûr mais restez prudent

2️⃣ Ouvrez les détails de la demande
•Cliquez sur "Afficher les détails" / "Avancé" / trois points → voir les données brutes
•Si vous voyez un JSON comprenant le domaine, les types, le message, le primaryType → Ceci est un EIP‑712 typed data, à vérifier attentivement

3️⃣ Recherchez des mots-clés dangereux dans les données brutes
•spender, owner, value, deadline, nonce, permit, PermitSingle/Batch/Transfer → 🚩 avertissement de permit/approval
•Seulement du texte simple comme "Je consens à me connecter" → faible risque, mais pas absolu