Validez les adresses EIP-55, Bitcoin, TRON et Solana et affichez leur forme correcte avec checksum.
Inspecteur de demandes de signature
L'outil lui-même est en anglais ; cette page vous l'explique dans votre langue.
Utilisez Inspecteur de demandes de signature
Fonctionnalités
Collez ce qu'un portefeuille ou un site vous demande de signer et voyez en langage clair ce que cela autoriserait. Les approbations de jetons, les permits, les signatures Permit2 et les annonces Seaport qui paient quelqu'un d'autre sont marqués en rouge.
Tout se passe entièrement dans votre navigateur : aucune des données que vous saisissez n'est transmise.
Comment utiliser Inspecteur de demandes de signature
- Copiez la demande brute. Prenez le texte exact que l'on vous demande de signer : le JSON EIP-712, les données 0x d'une transaction, l'objet de transaction complet, une requête JSON-RPC ou le texte du message.
- Collez et inspectez. Collez-le dans la zone. L'inspection démarre au collage ; vous pouvez aussi appuyer sur Inspect ou Ctrl+Entrée.
- Vérifiez comment il a été lu. La première ligne indique comment la saisie a été interprétée, par exemple transaction object. Si c'est faux, choisissez le bon type dans Read the input as.
- Lisez l'encadré coloré. Le badge, le titre et le résumé indiquent en langage clair ce que permettrait la signature. La liste en dessous contient les alertes ; les plus graves sont en gras.
- Vérifiez les champs. Examinez dans le tableau le spender ou l'operator, le jeton, le montant, l'expiration et la chaîne. Ouvrez Decoded arguments ou Message fields pour les valeurs brutes.
- Décidez et partagez. Si vous ne connaissez pas le spender, rejetez la demande dans votre portefeuille et recherchez les adresses sur un explorateur de blocs. Copy report fournit un résumé en texte brut avec les liens désamorcés.
Exemple
Signature Permit2 pour une allowance USDC illimitée
{
"types": {
"EIP712Domain": [
{
"name": "name",
"type": "string"
},
{
"name": "chainId",
"type": "uint256"
},
{
"name": "verifyingContract",
"type": "address"
}
],
"PermitSingle": [
{
"name": "details",
"type": "PermitDetails"
},
{
"name": "spender",
"type": "address"
},
{
"name": "sigDeadline",
"type": "uint256"
}
],
"PermitDetails": [
{
"name": "token",
"type": "address"
},
{
"name": "amount",
"type": "uint160"
},
{
"name": "expiration",
"type": "uint48"
},
{
"name": "nonce",
"type": "uint48"
}
]
},
"primaryType": "PermitSingle",
"domain": {
"name": "Permit2",
"chainId": 1,
"verifyingContract": "0x000000000022D473030F116dDEE9F6B43aC78BA3"
},
"message": {
"details": {
"token": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
"amount": "1461501637330902918203684832716283019655932542975",
"expiration": "281474976710655",
"nonce": "0"
},
"spender": "0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB",
"sigDeadline": "115792089237316195423570985008687907853269984665640564039457584007913129639935"
}
}Read as: EIP-712 typed data. Change this with “Read the input as”.
DangerousPermit2 PermitSingle: token allowance by signature (UNLIMITED)
Signing lets 0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB move an unlimited amount of 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48 (USDC token on Ethereum) out of your wallet through Permit2. The allowance never expires in practice. The spender submits this signature itself, so you will not see another prompt. Drainers favour Permit2 because many wallets have already approved Permit2 for apps such as Uniswap.
Unlimited amount: the spender can take your whole balance of the token.
The allowance never expires in practice.
The signature never expires in practice.
SPENDER 0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB
TOKEN 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48
USDC token on Ethereum
AMOUNT Unlimited: 2^160−1, the Permit2 maximum (1461501637330902918203684832716283019655932542975)
ALLOWANCE EXPIRES 2^48−1 (Permit2 maximum): no practical expiry (beyond the year 5000)
NONCE 0
SIGNATURE VALID UNTIL (SIGDEADLINE) 2^256−1: no practical expiry (beyond the year 5000)
DOMAIN name "Permit2"
CHAIN Ethereum (chain ID 1)
VERIFYING CONTRACT 0x000000000022D473030F116dDEE9F6B43aC78BA3
Permit2 (Uniswap)
EIP-712 DIGEST (WHAT IS SIGNED) 0x579baa31b8f7279c82034e935d103d07caa27a817903937e201389d81d55984c
DOMAIN SEPARATOR 0x866a5aba21966af95d6c7ab78eb2b2fc913915c28be3b9aa07cc04ff903e3f28
MESSAGE HASH (HASHSTRUCT) 0xb646364eb4dc82faf68b61d79beb585797490532ff745845f3821e6f8573463c
PRIMARY TYPE PermitSingle(PermitDetails details,address spender,uint256
…Encadré rouge : le spender 0xbBbB…BBbB pourrait déplacer un montant illimité d'USDC via Permit2, et ni l'allowance ni la signature n'expirent. Le digest EIP-712 est calculé.
Ce qu'il vérifie
| Signal | Ce que cela signifie |
|---|---|
| Badge de risque : Dangerous, Check carefully, Low risk ou Note | Dangerous signifie que la demande peut céder des jetons ou des NFT. Les approbations le reçoivent même pour une application connue, car le pouvoir accordé est le même. Une révocation, comme approve avec un montant de 0, est affichée en Low risk. |
| Spender ou operator en rouge | L'adresse qui obtiendrait le droit de déplacer vos actifs. Quelques contrats sont nommés, comme Permit2, Seaport et le conduit OpenSea ; toute autre adresse doit être vérifiée. |
| Montant illimité | Affiché pour 2^256−1 ou toute valeur de 2^255 ou plus, et dans les demandes Permit2 pour 2^160−1. Le spender pourrait prendre tout votre solde de ce jeton, maintenant et plus tard. |
| Montant avec les décimales du jeton | Pour USDC, USDT, DAI et WETH sur Ethereum, le nombre brut est converti : par exemple, 1000000 devient 1 USDC. Pour les autres jetons, vous voyez l'entier brut lu avec 18 et avec 6 décimales. |
| Expiration et date limite | N'expire jamais en pratique (au-delà de l'an 5000), valable plus d'un an, ou déjà expiré. Un permit ou une allowance qui n'expire jamais reste utilisable longtemps après que vous l'avez oublié. |
| Signature aveugle d'un hash de 32 octets | Le portefeuille ne peut pas montrer ce que représente le hash, et avec eth_sign il peut s'agir d'une transaction ou d'un permit. Ne signez qu'un hash que vous avez produit vous-même. |
| Vérifications des ordres Seaport | Annonce à prix nul, autres destinataires recevant plus que l'offrant, ou éléments offerts qui réapparaissent avec un autre destinataire : typique des fausses annonces de NFT qui paient l'attaquant. |
| Domaine Sign-In with Ethereum | Un message de connexion nomme le site qui le demande. Si ce domaine n'est pas exactement le site sur lequel vous êtes, la signature pourrait connecter quelqu'un d'autre à votre place. |
| Deux lectures d'un même sélecteur | approve(address,uint256) est le même appel en ERC-20 et en ERC-721. Sauf si le contrat fait partie des quelques jetons que l'outil connaît, les deux lectures sont affichées. |
D'autres exemples
Approbation NFT pour une collection entière
0xa22cb465000000000000000000000000000000000000000000000000000000000000dead0000000000000000000000000000000000000000000000000000000000000001Read as: transaction calldata (known function selector). Dangerous : setApprovalForAll: control of ALL your NFTs in this collection. Operator 0x000000000000000000000000000000000000dEaD, Approved true, Collection (to) not given.
Approbation USDC limitée dans une transaction
{"to":"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48","data":"0x095ea7b3000000000000000000000000000000000000000000000000000000000000dead00000000000000000000000000000000000000000000000000000000000f4240","value":"0x0","chainId":1}Read as: transaction object. Dangerous : ERC-20 approval. Le résumé indique que 0x000000000000000000000000000000000000dEaD pourrait déplacer jusqu'à 1000000 unités du jeton USDC sur Ethereum sans redemander. Le tableau affiche Chain Ethereum (chain ID 1), Value 0 ETH (0 wei) et Amount 1000000 avec la note 1 USDC (6 decimals).
Demande eth_sign aveugle
{"method":"eth_sign","params":["0x0000000000000000000000000000000000000001","0xabababababababababababababababababababababababababababababababab"]}Read as: JSON-RPC eth_sign request. Dangerous : Blind signature: a 32-byte hash instead of text, avec l'alerte indiquant que la plupart des portefeuilles ont désactivé ou masqué eth_sign parce que les drainers l'utilisaient.
FAQ
Que vérifie Signature Request Inspector ?
Il décode les typed data EIP-712, la calldata de transaction, les objets de transaction et les messages personal_sign ou eth_sign, et calcule le digest EIP-712. Il signale les approbations de jetons, setApprovalForAll, les permits EIP-2612 et DAI, les signatures Permit2, les ordres Seaport qui paient quelqu'un d'autre que vous, et les signatures aveugles d'un hash de 32 octets.
Une demande non marquée en rouge peut-elle quand même être dangereuse ?
Oui. L'outil ne lit que la demande elle-même : il ne voit ni les soldes, ni les approbations existantes, ni si un contrat est malveillant, et les fonctions absentes de sa table sont affichées comme inconnues. Les approbations pour des applications légitimes sont aussi marquées en rouge, car la signature accorde le même pouvoir dans tous les cas.
La demande collée est-elle envoyée quelque part ?
Non. Le décodage et le hachage s'exécutent dans votre navigateur, et la page n'effectue aucune requête réseau avec votre saisie. Une demande de signature ne contient aucun secret, mais ne collez jamais une clé privée ou une seed phrase sur un site web, quel qu'il soit.
Un petit montant rend-il une approbation sûre ?
Il limite ce qui peut être pris à ce montant, mais le spender peut l'utiliser à tout moment sans vous redemander. C'est pourquoi l'outil affiche quand même une approbation de 1 USDC comme Dangerous. N'approuvez que le montant nécessaire, pour un spender que vous avez vérifié.
Pourquoi vois-je une lecture ERC-20 et une lecture ERC-721 pour un même approve ?
Les deux standards utilisent le même nom de fonction et les mêmes types d'arguments : les données 0x seules ne disent donc pas de laquelle il s'agit. Collez la transaction entière avec l'adresse to, et vérifiez sur un explorateur de blocs si ce contrat est un jeton ou une collection de NFT.
J'ai déjà signé une demande qui apparaît en rouge ici. Que faire ?
Agissez vite. Révoquez les approbations on-chain et transférez ce qui reste vers un nouveau portefeuille. Un permit signé qui n'a pas encore été utilisé n'apparaît pas comme une approbation : déplacer les jetons est donc la mesure la plus sûre. Le guide d'urgence (Emergency Guide) indique l'ordre des actions.