Outil · Sécurité · 100 % local

Décodeur de calldata

Colle les données hexadécimales d'une transaction. L'outil décode la fonction et alerte sur les autorisations dangereuses.

approvefonction
Illimitéportée
095ea7b3sélecteur (hex)

Autorisation sans plafond : ce dépensier peut prendre tout le solde de ce token, maintenant ou plus tard. Vérifie son adresse.

ChampValeur
Signatureapprove(address,uint256)
Dépensier0xa1b2c3d4e5f60718293a4b5c6d7e8f9001122334
Montant autorisé2^256 − 1 (maximum)
Intégrer cet outil

Copie ce code sur ton site, ton cours ou ton blog. L'outil reste gratuit ; garde simplement le lien vers protocole.org.

Mode d'emploi

Un wallet affiche parfois une transaction sous forme de bloc hexadécimal. Ce bloc, le calldata, dit au contrat quelle fonction appeler et avec quels arguments. Cet outil le traduit pour six fonctions courantes, celles qu'on retrouve souvent dans les vols par signature. Il travaille hors ligne et ne simule rien.

La structure à lire

Les 4 premiers octets forment le sélecteur : le début du Keccak-256 de la signature de la fonction. Le texte approve(address,uint256) donne 0x095ea7b3. Viennent ensuite les arguments, chacun sur 32 octets. Une adresse occupe les 20 derniers octets de son mot, précédés de 12 octets nuls.

SélecteurFonction
0xa9059cbbtransfer
0x23b872ddtransferFrom
0x095ea7b3approve
0x39509351increaseAllowance
0xa22cb465setApprovalForAll
0xd505accfpermit (EIP-2612)

Un exemple chiffré

L'exemple préchargé est un approve fictif. Son second mot contient 64 fois la lettre f, soit 2^256 − 1, le plus grand entier possible. Un token à 18 décimales n'aura jamais une telle quantité en circulation : cette valeur signifie « sans plafond », d'où l'alerte. Sur un token ERC-20, un approve à zéro est au contraire une révocation, comme l'explique notre page sur les approbations de tokens.

Les limites à connaître

Le calldata ne dit pas à quel contrat il s'adresse. Le token concerné se trouve dans le champ « to » de la transaction : compare-le aussi. Les montants sont en unités brutes. Il faut les diviser par 10 puissance les décimales du token, une information que le calldata ne contient pas.

Un même sélecteur peut servir à deux standards. approve et transferFrom ont la même signature en ERC-20 et en ERC-721 : sur un NFT, le dernier champ est un identifiant, pas un montant. Et un nom de fonction ne garantit pas le comportement : un contrat malveillant peut faire ce qu'il veut derrière transfer.

Un sélecteur inconnu n'est pas une preuve d'attaque. Les routeurs et les appels groupés cachent souvent d'autres actions à l'intérieur. Le réflexe vu avec les transactions de phishing reste valable : si tu ne peux pas lire, ne signe pas.

Questions fréquentes

Où trouver le calldata d'une transaction ?

Beaucoup de wallets l'affichent dans un onglet Données ou Hex de la fenêtre de confirmation. Un explorateur de blocs le montre aussi pour une transaction déjà envoyée, sous le nom Input Data.

Un permit passe-t-il par le calldata ?

Pas au moment où tu signes. Le propriétaire signe un message hors chaîne. Le calldata permit apparaît quand quelqu'un soumet cette signature au contrat. Dans la fenêtre de signature, vérifie donc les champs spender et value.

Si l'outil n'affiche pas d'alerte, puis-je signer ?

Non, ce n'est pas une garantie. L'outil ne connaît ni le contrat appelé, ni le dépensier, ni l'effet réel du code. Il rend les données lisibles, le jugement reste le tien.

Autres outils