ALLER AU CONTENU
TOKENISATION7 minStandards en production / Ép. 5 · Niveau 5-1

Soldes de tokens cachés : comment appliquer un gel ?

Prenons Alice : 100 tokens, dont 30 gelés, et aucun de ces chiffres n’est public. Comment le token l’empêche-t-il d’en envoyer 80 ?

XIN

EN 30 SECONDES

Un solde confidentiel est un solde de token conservé chiffré : de l’extérieur, personne ne lit le montant. Pour un token permissionné, cela change la façon d’appliquer un gel et ce qu’on voit d’un transfert. On suit ici un vrai contrôle de gel, pas à pas.

À RETENIR · 3

  • Masquer les soldes change ce qu’on voit d’un transfert et qui connaît les montants. Les règles d’identité ou de conformité ne deviennent pas toutes impossibles pour autant.
  • ERC7984Freezable v0.5.0 d’OpenZeppelin transfère un zéro chiffré quand le solde libre ne suffit pas. C’est un choix d’implémentation : le brouillon ERC-7984 autorise aussi un revert.
  • Dans cette version, une transaction réussie ne prouve pas que le montant demandé a été transféré. Lisez le montant réel renvoyé.
Sur cette page

Le problème : un gel a besoin de chiffres que personne ne devrait voir

EN BREF Avec des soldes publics, chacun peut suivre le contrôle d’un gel. Avec des soldes masqués, le contrat doit l’appliquer sans montrer les chiffres à personne.

LES MOTS À CONNAÎTRE

Token permissionné
Un token que seuls des détenteurs approuvés peuvent recevoir, avec des contrôles de l’émetteur comme le gel. Le standard ERC-3643, au statut Final, en est un exemple.
Gel
Un contrôle de l’émetteur qui bloque tout ou partie des tokens d’un détenteur : cette part ne peut plus être transférée.
Solde confidentiel
Un solde conservé chiffré. Chacun voit qu’un transfert a eu lieu, pas son montant.
FHE
Le chiffrement entièrement homomorphe : une façon d’additionner et de comparer des nombres chiffrés sans les déchiffrer.
Sélection chiffrée
Le choix entre deux valeurs chiffrées, selon un oui ou un non lui-même chiffré, sans révéler laquelle a été retenue.

Un Token permissionné Un token que seuls des détenteurs approuvés peuvent recevoir, avec des contrôles de l’émetteur comme le gel. Le standard ERC-3643, au statut Final, en est un exemple. Voir le glossaire ne peut être reçu que par des détenteurs approuvés. Son émetteur peut aussi poser un Gel Un contrôle de l’émetteur qui bloque tout ou partie des tokens d’un détenteur : cette part ne peut plus être transférée. Voir le glossaire sur une partie des tokens d’un détenteur : cette part ne peut plus partir.

MÊME RÈGLE, DEUX CADRES

Soldes publics

  • Solde 100, gel 30 : 70 peuvent partir.
  • Un transfert de 80 est rejeté, et chacun voit pourquoi.

Soldes confidentiels

  • Solde, montant gelé et montant du transfert sont tous chiffrés.
  • Le contrat doit quand même appliquer le gel, sans révéler les chiffres.
Valeurs fictives.

Un Solde confidentiel Un solde conservé chiffré. Chacun voit qu’un transfert a eu lieu, pas son montant. Voir le glossaire est conservé chiffré. Le contrat ne peut plus lire 100 et retirer 30. Dans ERC-7984, une interface Ethereum encore à l’état de brouillon (Draft), chaque montant est un pointeur confidentiel vers des données cachées.

ADAM explique : Pensez à une enveloppe scellée pleine de billets, remise devant témoins : tout le monde voit la remise, personne ne voit les billets. L’image a une limite : une vraie enveloppe se soupèse, et quiconque s’en empare peut l’ouvrir.

Ici, seuls les comptes autorisés par le protocole peuvent déchiffrer. Une valeur peut aussi être rendue publique exprès. Tout cela repose sur du code, de la cryptographie et des hypothèses de sécurité, qui demandent chacun leur propre revue.

EN CLAIR

Masquer les soldes change ce qu’on voit d’un transfert et qui peut connaître les montants. Les règles d’identité ou de conformité ne deviennent pas toutes impossibles pour autant. Le gel compte toujours.

Je m’appuie sur des spécifications publiques et sur une version fixée d’une bibliothèque. Ce n’est pas un retour de production.

Dans la section suivante : Alors, comment un contrat compare-t-il des nombres qu’il ne peut pas lire ?

Comment fonctionne un gel chiffré, étape par étape

EN BREF Dans ERC7984Freezable v0.5.0 d’OpenZeppelin, un transfert supérieur au solde libre n’échoue pas pour ce motif : il transfère un zéro chiffré.

La version d’OpenZeppelin repose sur le FHE Le chiffrement entièrement homomorphe : une façon d’additionner et de comparer des nombres chiffrés sans les déchiffrer. Voir le glossaire, le chiffrement entièrement homomorphe. Il sert à calculer sur des nombres chiffrés sans les ouvrir. La comparaison et la Sélection chiffrée Le choix entre deux valeurs chiffrées, selon un oui ou un non lui-même chiffré, sans révéler laquelle a été retenue. Voir le glossaire ci-dessous marchent ainsi.

ÉTAPE PAR ÉTAPE

Diagramme de flux : 6 étapesDiagramme de flux : 6 étapes. Demande de transfert, puis Solde libre. Solde libre, puis Comparaison chiffrée. Comparaison chiffrée, puis Sélection chiffrée. Sélection chiffrée se divise en 2 : Si oui, alors Montant demandé. Si non, alors Zéro. Les deux chemins continuent vers Mise à jour des soldes. Mise à jour des soldes, puis Montant réel renvoyé.OUINON1Demande de transfert2Solde libreSolde moins gel3Comparaison chiffréeLe solde libre suffit-il ?4Sélection chiffréeMontant demandéZéro5Mise à jour des soldesRéussit, sauf autre erreur6Montant réel renvoyéToujours chiffré

Étape 1. Demande. Un détenteur demande à envoyer un montant chiffré.

Choisissez une étape pour la voir bouger
  1. Demande Un détenteur demande à envoyer un montant chiffré.
  2. Solde libre Le contrat calcule le solde moins le montant gelé, jamais sous zéro. Le résultat est chiffré.
  3. Comparaison Il vérifie si le solde libre suffit pour la demande. Le oui ou non est chiffré, lui aussi.
  4. Sélection Il garde le montant demandé si c’est oui, zéro si c’est non. Le statut public de réussite ne dit pas lequel.
  5. Mise à jour Les soldes varient du montant retenu, et la transaction réussit dans les deux cas. D’autres erreurs peuvent encore provoquer un revert.
  6. Résultat La fonction renvoie le montant réellement transféré, toujours chiffré. Les comptes autorisés peuvent le déchiffrer.
ERC7984Freezable v0.5.0 d’OpenZeppelin, cas du solde libre insuffisant uniquement. Toutes les valeurs restent chiffrées à partir de l’étape 2.

C’est le choix d’une bibliothèque, pour un cas, dans une version fixée. Le brouillon ERC-7984 autorise aussi un revert, un échec public, quand le solde ne suffit pas.

Lisez tout le code de cette version avant de vous fier à ce qu’il fait pour l’émission (la création de tokens), les transferts, les droits et les échecs.

Dans la section suivante : Et avec de vrais chiffres, cela donne quoi ?

Un exemple concret : un gel, deux transferts

EN BREF Demande couverte par le solde libre : tout part. Sinon, rien ne part. Le statut public de réussite reste le même.

UN EXEMPLE CONCRET

Chiffres illustratifs

VALIDÉAlice détient 100 tokens dont 30 gelés et en envoie 50

ENTRÉE

Solde
100 (chiffré)
Gelé
30 (chiffré)
Demande
50 (chiffré)

CE QUI SE PASSE

  1. Solde libre : 100 moins 30, il reste 70.
  2. 70 suffisent pour 50 : la réponse chiffrée est oui.
  3. La sélection garde 50.

SORTIE

Transaction
réussie
Montant réellement transféré
50 (chiffré)

ZÉRO TRANSFÉRÉMême solde de départ, elle demande 80 à la place

ENTRÉE

Demande
80 (chiffré)

CE QUI SE PASSE

  1. 70 ne suffisent pas pour 80 : la réponse chiffrée est non.
  2. La sélection garde zéro.

SORTIE

Transaction
réussie
Montant réellement transféré
0 (chiffré)

Un portefeuille (wallet) qui affiche « paiement terminé » après le second transfert d’Alice, vide, se trompe.

Le chiffrement cache le montant au public. Il n’empêche pas le détenteur de savoir ce qui s’est passé, si vous lui donnez un moyen autorisé de déchiffrer le résultat ou d’en obtenir une preuve.

OBJET OBTENU

Lisez le résultat, pas le statut

Dans OpenZeppelin v0.5.0, un statut de réussite ne prouve pas que le montant demandé a été transféré. Lisez le montant réel renvoyé, par un déchiffrement autorisé ou une preuve.

Sources : ERC-7984 (brouillon), ERC-3643, OpenZeppelin ERC7984Freezable v0.5.0.

NIVEAU TERMINÉ

Ce que vous savez maintenant

  • Comment un contrat peut appliquer un gel à des soldes illisibles pour le public.
  • Pourquoi, dans OpenZeppelin v0.5.0, un transfert réussi peut ne rien déplacer.

Vérifiez par vous-même

Touchez ou cliquez une question pour voir la réponse.

Chiffres illustratifs : sur ERC7984Freezable v0.5.0 d’OpenZeppelin, Bob détient 100 tokens, dont 40 gelés. Il veut en envoyer 70. La transaction échoue-t-elle ?

Pas pour cette raison. Seuls 60 sont libres : la sélection garde zéro. Sauf autre erreur, la transaction réussit et ne transfère rien. Le montant réel, déchiffré ou prouvé par une partie autorisée, le montre.

Niveau suivant :Que peut trahir sur un solde caché un transfert raté, ou un contrôle public qui répond oui ou non ?7 min
Adam Boudjemaa
Adam Boudjemaa

Ingénieur web3 x IA, ancien CTO d’Integra. Auteur nommé (1 sur 5) d’ERC-3643, premier auteur d’ERC-6960, co-auteur d’ERC-7410 et co-auteur d’ERC-8203, encore à l’état de brouillon.

Un projet à livrer ou un poste à pourvoir ?

Parlons de votre besoin

Mon travail entre web3 et IAMes outils open source

Suivre les notes techniques

Recevez les nouveaux articles sur l’IA en production et les smart contracts par email.