Pourquoi certaines blockchains affichent ce que vous signez (et d’autres

Pourquoi votre wallet ne peut pas toujours vous dire ce que vous signez et quelles blockchains en sont responsables.

Cet article est disponible dans les langues suivantes :

Author logo
Denis Baturin

Points essentiels

La signature claire désigne la capacité des hardware wallets à afficher tous les détails pertinents d’une transaction — destinataire, montant, frais, fonction du contrat — avant validation par l’utilisateur. Cela n’est possible que si le protocole de la blockchain encode les transactions de façon auto-descriptive et lisible pour l’humain. Les blockchains à modèles de transactions typés et finis (comme XRP Ledger, Polkadot, Cosmos et NEAR) permettent la signature claire par conception, tandis que celles reposant sur des données binaires opaques issues de smart contracts (Ethereum, Solana, TON) rendent la signature claire difficile, voire impossible, nécessitant souvent des métadonnées externes comme solution de contournement. Au final, l’article montre que ce sont les choix d’architecture du protocole — et non le wallet — qui déterminent la faisabilité de la signature claire, avec de réelles conséquences en matière de sécurité, comme l’illustrent les piratages majeurs dus à l’opacité des transactions.

Qu’est-ce que la signature claire ?

La signature claire signifie que l’écran sécurisé de votre hardware wallet affiche les détails réels d’une transaction avant que vous ne la validiez : destinataire, montant, frais, et fonction du contrat appelée. Le facteur déterminant n’est pas la qualité du wallet, mais bien si le protocole de la blockchain encode les transactions sous forme de structures typées auto-descriptives, ou sous forme de blocs binaires opaques nécessitant des métadonnées externes pour être interprétés. Il s’agit d’un choix d’architecture fait dès la conception du protocole, avec de véritables conséquences sur la sécurité.

⚠️ February 2025 : Le piratage Bybit à 1,5 milliard de dollars — le plus grand vol crypto de l’histoire — a réussi précisément parce que les wallets matériels n’ont pas pu distinguer un transfert standard d’une mise à jour malveillante d’un proxy contract. Le protocole ne leur donnait aucune information exploitable.

Pourquoi certaines blockchains facilitent la signature claire

Comprendre pourquoi certaines chaînes rendent la signature claire facile, et pourquoi d’autres la rendent presque impossible, nécessite d’examiner comment chaque blockchain encode les transactions, identifie les fonctions de smart contracts et gère la logique programmable.


Les 13 principaux écosystèmes blockchain se répartissent en trois grands groupes selon la façon dont leur architecture prend en charge la signature claire. Les chaînes à modèles de transactions typés et finis dominent le haut du classement. Celles qui reposent sur des smart contracts généralistes rencontrent systématiquement des difficultés, et plus la programmabilité est poussée, plus il devient difficile d’obtenir une signature claire.

  1. Comment les transactions sont encodées : le format contient-il assez d’informations de type pour être interprété sans contexte externe, ou s’agit-il de binaire brut nécessitant une aide extérieure ?
  2. Comment fonctionne la logique programmable : des opérations typées et limitées sont lisibles par définition ; les smart contracts généralistes avec des données arbitraires ne le sont pas.
Les smart contracts généralistes sont l’élément perturbateur universel : même les chaînes disposant d’une excellente base et d’une signature claire deviennent opaques dès que la programmabilité Turing-complete entre en jeu.

Niveau 1 : Transparence architecturale — l’intention de la transaction est lisible par conception

Quatre écosystèmes se distinguent : ils font de la signature claire une conséquence naturelle de leur protocole, sans dépendre d’outils externes.

XRP Ledger

XRP Ledger offre le modèle de signature claire le plus abouti parmi les blockchains majeures. Son architecture repose sur un ensemble fini d’environ 50 types de transactions énumérés (Payment, OfferCreate, TrustSet, EscrowCreate, NFTokenMint, etc.), chacun avec un schéma défini de champs nommés et typés. 

Le format binaire est auto-descriptif : un champ TransactionType rend le décodage totalement déterministe, et le schéma complet est maintenu dans le fichier de définitions du code source rippled. 

Un hardware wallet peut afficher chaque champ de chaque type de transaction connu : destinataire, montant (avec devise et émetteur pour les tokens), frais, mémos et paramètres spécifiques. Le modèle basé sur les comptes rend les montants explicites (pas de complexité UTXO) et les frais sont un champ simple, non un calcul implicite. 

Pratiquement 100 % des transactions mainnet actuelles peuvent être signées de façon claire. Le seul risque est que de nouveaux types de transactions ajoutés via des évolutions du protocole (comme Vault ou Loan) nécessitent une mise à jour du wallet ; les types inconnus retombent en signature aveugle.
 

Polkadot / Substrate

Polkadot a développé la solution de signature claire la plus sophistiquée techniquement du secteur. Son système de métadonnées d’exécution (MetadataV14/V15) fournit un registre auto-descriptif de chaque pallet (module), appel et type de données du runtime. 

Chaque transaction (extrinsic) est structurée comme pallet_index || call_index || encoded_arguments, et les métadonnées indiquent précisément la signification de ces indices et comment décoder les arguments. 

Le défi principal : les métadonnées complètes dépassent 200 Ko — bien trop pour les wallets disposant de 64 Ko de RAM. La solution, RFC-0078 (Merkleized Metadata), construit un arbre de Merkle à partir des métadonnées et ne transmet que la partie pertinente (types nécessaires pour la transaction) avec une preuve cryptographique d’inclusion. 

Le hash des métadonnées est vérifié on-chain via l’extension signée CheckMetadataHash, rendant le système sans confiance. Cela permet une application Ledger générique fonctionnant sur tous les parachains Polkadot sans mise à jour par chaîne.

L’approche gère les mises à jour du runtime de façon élégante : même si les indices changent, de nouvelles métadonnées et preuves assurent la fiabilité de la signature.

Cosmos / Tendermint

Cosmos/Tendermint bénéficie d’une architecture à messages typés : chaque transaction contient un ou plusieurs objets sdk.Msg encapsulés dans Protobuf google.protobuf.Any, qui inclut un champ type_url identifiant le type de message.
Les messages standards comme MsgSend, MsgDelegate et MsgVote ont des schémas bien connus. 

La solution dédiée à la signature claire est SIGN_MODE_TEXTUAL (ADR-050), introduite dans Cosmos SDK v0.50. Elle affiche les transactions en séquences adaptées aux petits écrans (~40 caractères), avec des value renderers qui convertissent les données brutes au format lisible : les montants s’affichent « 2 ATOM » au lieu de « 2000000uatom », les adresses utilisent bech32, les dates RFC3339. 

Les développeurs peuvent fournir des renderers personnalisés pour leurs types de messages (à condition que les fonctions de formatage et de parsing soient parfaitement réversibles). La charge signée inclut la représentation textuelle et le hash des données brutes, garantissant la sécurité.

 

NEAR Protocol

NEAR Protocol assure la signature claire grâce à des choix architecturaux privilégiant la lisibilité humaine. Les identifiants de compte sont des noms lisibles (ex. : « alice.near ») et non des adresses hexadécimales. 

Les transactions contiennent des enums typés Action (Transfer, Stake, FunctionCall, AddKey, etc.) toujours identifiables. Surtout, l’action FunctionCall inclut un method_name en texte clair (ex. : « transfer », « set_greeting ») et des arguments sérialisés en JSON par défaut. 

Un hardware wallet peut afficher : « Appeler la méthode ‘swap’ sur app.defi.near avec args : {amount: 1000, token: 'usdc.near'} ». C’est bien plus lisible que tout système basé sur des sélecteurs. La principale limite : certains contrats utilisent des arguments Borsh sérialisés pour gagner en efficacité, ce qui les rend opaques sans le schéma.


Niveau 2 : Signature conditionnellement claire — opérations natives lisibles, smart contracts problématiques

La signature claire fonctionne bien pour les opérations de base. Mais dès que la programmabilité générale entre en scène, la lisibilité se dégrade fortement.

Bitcoin

Bitcoin occupe une place à part : son modèle de transaction pose des défis de signature claire même sans smart contracts. Le modèle UTXO fait que les transactions brutes ne contiennent pas le montant des entrées : les inputs référencent des sorties antérieures par hash et index, mais sans préciser leur valeur. 

Sans cette information, un hardware wallet ne peut pas calculer les frais (total des entrées moins total des sorties) ni vérifier qu’il ne se fait pas piéger. PSBT (BIP 174) résout ce problème en encapsulant les transactions non signées avec les métadonnées UTXO et les chemins de dérivation BIP32 pour identifier les adresses de change. 

Ainsi, les wallets peuvent afficher clairement les adresses destinataires, montants et frais pour les paiements standards, couvrant environ 90 % des transactions courantes. La complexité augmente avec les multisigs, scripts verrouillés dans le temps, et les dépenses Taproot — P2SH et P2WSH masquent des scripts arbitraires derrière des hashes, et la structure MAST de Taproot rend invisibles les conditions alternatives tant qu’elles ne sont pas utilisées.

Aptos

Aptos bénéficie du système de types solide de Move et de la disponibilité des ABIs on-chain. Les charges de transaction contiennent des identifiants de fonction entièrement qualifiés, comme 0x1::aptos_account::transfer : l’adresse du module, son nom et le nom de la fonction sont tous visibles. 

Le SDK peut interroger les ABIs on-chain pour désérialiser les arguments BCS. Ainsi, un hardware wallet avec accès à l’ABI pourrait afficher : « Appeler 0x1::aptos_account::transfer(recipient: 0xABC..., amount: 1000) ». 

Cependant, BCS (Binary Canonical Serialization) n’est pas auto-descriptif : sans schéma ABI, les octets BCS bruts sont illisibles. Les scripts (bytecode Move arbitraire) contournent complètement le format structuré. L’application Ledger Aptos inclut un réglage explicite « Enable Blind Signing » pour les transactions complexes, ce qui confirme l’écart entre opérations simples et complexes.

Stellar

Le modèle du niveau 2 dans sa forme la plus pure. Ses 26 types d’opérations classiques (Payment, ChangeTrust, ManageSellOffer, etc.) ont des schémas fixes et sont entièrement interprétables : l’application Ledger affiche le type d’opération, le montant, la destination, l’actif, le mémo et les frais étape par étape. Environ 95 % de couverture pour les opérations classiques.

  • Les smart contracts Soroban (lancés en 2024) réintroduisent le problème d’opacité d’Ethereum. Les appels arrivent sous forme d’InvokeHostFunction avec des adresses de contrat opaques et des paramètres encodés en ScVal, nécessitant une connaissance spécifique du contrat pour décoder. Pratiquement 0 % de signature claire pour les interactions Soroban brutes sans métadonnées externes.

Algorand

Sept types de transactions typées (Payment, Asset Transfer, Asset Configuration, Key Registration, Application Call, Asset Freeze, State Proof) — tous interprétables grâce à l’encodage MessagePack. La norme ARC-4 ABI fournit les signatures de méthodes, noms de paramètres et descriptions pour les smart contracts compatibles.

  • Les contrats non ARC-4 ont des arguments opaques.
  • Tous les smart contracts peuvent générer jusqu’à 256 transactions internes, y compris des appels imbriqués sur 8 niveaux — complètement invisibles lors de la signature.

Cardano & Tezos

Le modèle eUTXO de Cardano permet d’afficher clairement entrées, sorties, frais et valeurs multi-actifs pour les transactions simples. Mais les interactions avec les scripts Plutus impliquent des datums et redeemers, structures CBOR arbitraires sans schéma standard pour l’interprétation humaine. La CIP-21 précise que le mode Plutus « vise la flexibilité maximale au prix d’un risque de confusion pour l’utilisateur ».

Tezos a un avantage structurel : les types de paramètres de contrat sont stockés on-chain et les entrypoints utilisent des noms en clair plutôt que des sélecteurs hashés, éliminant le risque de collision. Mais l’encodage binaire Micheline nécessite tout de même le schéma de type du contrat pour un affichage complet, et l’application Ledger Tezos reconnaît sa couverture limitée des paramètres complexes.

Niveau 3

❌ Opaque par conception — la signature claire est un défi structurel

Des choix d’architecture fondamentaux — et non un manque d’outils — rendent la signature claire intrinsèquement difficile ici. Les couches de métadonnées externes aident à la marge mais ne peuvent pas corriger l’architecture de base.

Ethereum / EVM Chains

Le cas le plus emblématique et étudié. Lorsqu’un utilisateur interagit avec un smart contract, le champ data de la transaction contient un sélecteur de fonction sur 4 octets (les 4 premiers octets du keccak256 de la signature de fonction), suivi de paramètres ABI-encodés sur des mots de 32 octets. Sans l’ABI JSON du contrat — qui n’est pas stocké on-chain — ce n’est que du bruit hexadécimal. Un hardware wallet voyant 0xa9059cbb000...03e8 ne peut pas savoir qu’il s’agit d’un « Transfer de 1000 tokens vers 0xABC... » sans métadonnées externes.

Les difficultés s’accumulent avec les schémas propres à l’EVM :

  • Collisions de sélecteurs de fonction : la base 4byte.directory recense près d’un million de signatures — bien au-delà du seuil du paradoxe des anniversaires pour un espace de 32 bits. Différentes fonctions peuvent produire le même sélecteur.
  • Proxy contracts : l’exécution passe par delegatecall vers des contrats d’implémentation dont l’adresse peut changer à tout moment. Le hack Bybit a précisément exploité cette faille.
  • Patrons multicall : encodage récursif de calldata ABI dans des paramètres.
  • EIP-712 : améliore la lisibilité des messages off-chain (permis, ordres) mais ne change rien à l’opacité des transactions on-chain.
La solution de l’industrie : ERC-7730 (créé en février 2024) est un standard JSON de métadonnées liant les règles d’affichage à des contrats et chain IDs spécifiques. L’initiative Clear Signing de Ledger et le partenariat MetaMask (février 2025) sont les principales implémentations. Cela fonctionne — mais ce n’est qu’un pansement sur une architecture non pensée pour la transparence, et cela exige une maintenance communautaire continue.

Solana

Probablement l’architecture la plus complexe pour la signature claire. Les instructions de transaction contiennent un program_id, une liste de comptes et un tableau d’octets d’instructions opaque. Il n’existe pas d’ABI standardisé : chaque programme définit son propre format de sérialisation. Le framework Anchor propose une convention semi-standard (discriminateurs de 8 octets issus du SHA-256 du nom d’instruction), mais il s’agit d’une convention de framework, non d’une obligation protocolaire. Beaucoup de programmes n’utilisent pas Anchor et ne publient pas d’IDL.

  • Les Address Lookup Tables dans les transactions versionnées compressent les adresses 32 octets en indices sur 1 octet — les wallets ne peuvent pas vérifier le contenu de la lookup table sans accès on-chain. La documentation officielle de Solana le reconnaît explicitement.
  • Les chaînes Cross-Program Invocation sont invisibles lors de la signature.
  • Les transferts SOL simples et opérations SPL token — Ledger sait les interpréter. Les interactions DeFi, qui représentent la majorité du volume Solana, nécessitent quasi systématiquement la signature aveugle.

TON

Combine plusieurs caractéristiques architecturales qui, prises séparément, résistent déjà à la signature claire :

  • Structure cellulaire des données : toutes les données sont représentées sous forme d’arbres de cellules (jusqu’à 1023 bits et 4 références par cellule), nécessitant un parcours récursif pour décoder les messages dépassant une cellule.
  • Encodage TL-B : opère au niveau du bit avec des constructeurs complexes et des références récursives — bien plus difficile à parser sur un hardware wallet que les formats alignés sur l’octet.
  • Pas d’ABI universel : les op codes 32 bits sont une convention, pas une règle du protocole.
  • Exécution asynchrone : une seule action utilisateur peut déclencher des messages internes en cascade sur plusieurs contrats et shards dans les blocs suivants. L’utilisateur ne signe que le message externe initial — tout ce qui suit est invisible et imprévisible au moment de la signature.

Sui (mention honorable)

Sui partage le système de types fort de Move avec Aptos, ce qui aide au niveau des instructions. Mais les Programmable Transaction Blocks de Sui peuvent contenir jusqu’à 1 024 commandes enchaînant les résultats — fractionner un coin, déposer sur un protocole DeFi, emprunter, transférer les fonds, le tout en une seule transaction atomique. Si chaque commande est bien typée, afficher une PTB multi-étapes sur l’écran d’un hardware wallet de façon intelligible reste un défi UX extrême. Comprendre l’ensemble de la transaction suppose d’analyser toute la séquence de commandes et leurs dépendances de données.

Référence rapide

ChaîneDéfi principalSignature claire
XRP LedgerNouveaux types de tx : mise à jour du walletBonne
PolkadotMétadonnées >200 Ko : résolu par Merkle proofsBonne
CosmosTypes de messages personnalisés : renderers dédiésBonne
NEARArguments Borsh opaques sans schémaBonne
BitcoinModèle UTXO, scripts complexesMoyenne
AptosArguments BCS : ABI externe requise ; scripts hors structureMoyenne
StellarOpérations classiques OK ; Soroban quasi nulMoyenne
AlgorandContrats non ARC-4 opaques ; 256 transactions internes invisiblesMoyenne
CardanoDatums/redeemers Plutus sans format d’affichage standardMoyenne
TezosParamètres complexes : schéma de type requisMoyenne
Ethereum / EVMPas d’ABI on-chain, proxies, collisions, multicallDifficile
SolanaPas d’ABI standard, CPI invisibles, lookup tables opaquesDifficile
TONEncodage au bit, messages asynchrones, pas d’ABI universelDifficile
SuiPTB à 1 024 commandes, dépendances complexesDifficile

Ce qui prédit réellement la qualité de la signature claire

Trois grands modèles architecturaux ressortent :

  1. Modèles de transactions typés et finis (XRP, Stellar classique, Algorand couche de base) : chaque opération possible a un schéma connu, donc facile à afficher.
  2. Systèmes de métadonnées auto-descriptifs (métadonnées runtime de Polkadot, messages typés de Cosmos) : les transactions ne sont pas lisibles nativement mais contiennent assez d’informations de type pour être décodées sans registre externe.
  3. Données d’instruction opaques (Solana, Ethereum, TON) : le protocole traite les paramètres de smart contract comme de simples tableaux d’octets. Aucun outil externe ne peut vraiment compenser cela.
En résumé : la faisabilité de la signature claire dépend avant tout des choix d’architecture du protocole faits il y a des années, et non des efforts d’outillage actuels. Les chaînes ayant opté pour des types de transactions énumérés ou des systèmes de métadonnées auto-descriptifs ont un avantage structurel que les standards externes ne peuvent pas reproduire sur des architectures opaques.

La réponse de l’industrie

L’écosystème s’est tourné vers les couches de métadonnées externes comme solution pragmatique pour les chaînes de niveau 3. ERC-7730, le Generic Parser de Ledger et le partenariat MetaMask sont les implémentations les plus abouties. La Merkleized Metadata de Polkadot est sans doute la solution la plus élégante : sans confiance, compatible avec tous les parachains, sans registre externe. SIGN_MODE_TEXTUAL de Cosmos est intégré nativement dans le SDK. Pour Solana et TON, il n’existe pas encore de standard universel de signature claire.

Clarifions ce que sont les métadonnées externes : elles fonctionnent, sont nécessaires, mais n’atteindront jamais la couverture d’un protocole nativement transparent. Elles nécessitent une maintenance communautaire continue, accusent un retard sur les nouveaux contrats et introduisent des hypothèses de confiance que les solutions natives n’ont pas.

Le coût d’une mauvaise implémentation se chiffre en milliards : le hack Bybit a montré que la signature aveugle n’est pas un simple problème d’UX — c’est une faille structurelle de l’infrastructure. Pour les nouvelles blockchains, la leçon est claire : intégrer la lisibilité des transactions au niveau protocole est infiniment plus efficace que d’essayer de la rajouter après coup via des standards externes.

Author logo
Auteur Denis Baturin

Blockchain analyst and team lead at Tangem.

Author logo
Examiné par Rukkayah Jigam

Writer & editor covering digital assets and product updates.