NOUVEAU : Helius acquiert Light Protocol
Que sont les extensions de jetons ?
Blog/Recherche

Que sont les extensions de jetons ?

Ingénieur en expérience développeurOwen Venter sur XOwen Venter sur LinkedIn
13 min de lecture

Les développements dans l'écosystème Solana ont progressé rapidement au cours de l'année écoulée, avec la sortie de nombreuses technologies nouvelles et prometteuses. Solana est réputée pour ses vitesses de traitement extrêmement élevées et ses frais de transaction réduits, mais même avec ces avantages impressionnants, des améliorations restent possibles. C'est là qu'interviennent les extensions de jetons, un nouveau programme conçu pour améliorer les fonctionnalités actuelles des jetons sur Solana. Découvrons ce que la norme des extensions de jetons réserve à l'écosystème Solana.

Le programme de jetons actuel sur Solana

Tous les jetons sur Solana autres que le jeton natif $SOL sont considérés comme des jetons SPL. Cela inclut les jetons fongibles, comme $BONK, et les jetons non fongibles (NFT). Le programme de jetons définit les fonctions courantes permettant de créer et de gérer ces deux types de jetons. Il propose plusieurs fonctionnalités auxquelles les développeurs et les utilisateurs finaux sont désormais habitués. Ces opérations comprennent la frappe, le transfert et la destruction de jetons. Il permet également de mettre à jour ou de geler un jeton, c'est-à-dire de geler un compte de jetons pour empêcher toute modification de son état jusqu'à son dégel.

Que sont les extensions de jetons et pourquoi sont-elles nécessaires ?

Vous pouvez considérer les extensions de jetons comme une nouvelle version améliorée du programme de jetons sur Solana. Elles peuvent gérer à la fois les jetons fongibles et non fongibles. Ce nouveau programme conserve toutes les fonctionnalités de l'ancien programme de jetons, tout en ajoutant un ensemble de fonctionnalités utiles destinées à améliorer le fonctionnement des jetons sur Solana. Ces nouveautés, qui font toute la force de Token2022, prennent la forme d'extensions.

Mais pourquoi les extensions de jetons sont-elles nécessaires ? À mesure que Solana progresse, la demande en fonctionnalités de jetons plus complexes et adaptables augmente. Le programme de jetons actuel sur Solana répond aux besoins fondamentaux des jetons fongibles et non fongibles grâce à un ensemble simple de fonctionnalités, mais cette simplicité crée des limites susceptibles de freiner l'innovation. Pour concrétiser leurs nouvelles idées, les développeurs ont souvent dû créer un fork du programme de jetons afin d'y ajouter les fonctionnalités requises, ce qui complique son adoption à grande échelle. Le modèle de programmation de Solana exige d'inclure les programmes et les comptes dans les transactions, ce qui complique la création de transactions impliquant plusieurs programmes de jetons. En outre, les portefeuilles et les programmes on-chain doivent faire confiance à chaque programme de jetons qu'ils choisissent de prendre en charge, ce qui peut présenter des risques. Pour répondre à cette évolution, Solana propose Token2022, une suite de fonctionnalités et d'améliorations supplémentaires conçue pour élargir les possibilités offertes aux jetons au sein de l'écosystème.

Présentation des extensions : une étape majeure dans l'évolution

Les capacités révolutionnaires de cette nouvelle norme résident dans les extensions disponibles, un ensemble de nouveaux champs conçus pour répondre à différents besoins. En termes simples, dans le contexte des extensions de jetons, une extension est une fonctionnalité supplémentaire qui peut être ajoutée à un jeton afin d'améliorer ses capacités et son utilité. Les extensions permettent aux créateurs de personnaliser le comportement et les caractéristiques de leurs jetons selon des besoins ou des objectifs précis. Lors de la création d'un jeton, il est possible d'utiliser autant d'extensions que nécessaire. Examinons quelques-unes des principales extensions et leur impact potentiel sur l'écosystème Solana. Notez que toutes ces extensions ne sont pas encore disponibles.

Extensions de mint

Voici une présentation de chaque extension de mint :

1. Frais de transfert

Alors que le programme de jetons existant ne permet pas d'appliquer des frais aux transferts, la norme des extensions de jetons change la donne en permettant de configurer des frais de transfert au niveau du protocole. Ce mécanisme introduit un nouveau degré de contrôle financier sur les transactions.

2. Hooks de transfert

L'extension de hook de transfert offre aux créateurs de jetons un niveau de contrôle supplémentaire sur les transferts de leurs jetons. Elle est particulièrement importante pour gérer les difficultés liées aux royalties des NFT. Cette extension permet aux créateurs de développer des programmes personnalisés que les jetons utiliseront à chaque transfert. Lorsqu'un transfert de jetons est lancé, le jeton communique avec ce programme personnalisé, qui peut alors déclencher toute action ultérieure.

3. Fermeture du mint

Les extensions de jetons comblent une lacune importante du programme de jetons en permettant à une adresse choisie de fermer les comptes de mint, ce qui était auparavant impossible. Pour cela, l'extension MintCloseAuthority doit être initialisée avant le mint. Une personne autre que le portefeuille faisant autorité peut ainsi fermer le mint d'un jeton.

4. Jetons générant des intérêts

Les extensions de jetons introduisent une extension InterestBearingMint, qui permet d'afficher différemment le montant des jetons dans l'interface utilisateur en y intégrant les intérêts accumulés. Cette fonctionnalité permet essentiellement aux jetons de « générer des intérêts », ce qui augmente leur valeur à mesure que vous les conservez.

5. Jetons non transférables (jetons soulbound)

L'extension de mint NonTransferable permet de créer des jetons « soulbound » qui ne peuvent pas être déplacés hors d'un portefeuille. Ils conviennent parfaitement aux récompenses ou accomplissements uniques, ainsi qu'à la billetterie événementielle, puisque vous ne pourriez transférer le billet à personne d'autre.

6. Transferts confidentiels

Les extensions de jetons introduisent une nouvelle extension de jeton confidentiel appelée Confidential Transfers. Cette fonctionnalité de confidentialité utilise des preuves à divulgation nulle de connaissance pour chiffrer les soldes et les montants des transferts de jetons SPL.

L'objectif général de cette extension est d'améliorer la confidentialité des utilisateurs en protégeant les informations plutôt qu'en garantissant l'anonymat. Comme les soldes peuvent être augmentés ou diminués, la norme des extensions de jetons requiert un système de chiffrement permettant d'effectuer ces opérations mathématiques masquées : le chiffrement doit être homomorphe. Le chiffrement homomorphe désigne une catégorie particulière de systèmes permettant d'effectuer certains types de calculs sur des données chiffrées sans avoir à les déchiffrer. Ces calculs masqués produisent ainsi un résultat chiffré qui, une fois déchiffré, équivaut au résultat obtenu en appliquant les mêmes opérations mathématiques aux données en clair. Confidential Transfers utilise le « chiffrement Twisted ElGamal » afin d'effectuer des opérations mathématiques masquées sur le texte chiffré.

Pour les personnes qui souhaitent approfondir le sujet, le chiffrement Twisted ElGamal est une variante simple du système de chiffrement ElGamal standard, dans laquelle un texte chiffré est divisé entre un engagement de Pedersen portant sur le message chiffré et une clé de déchiffrement permettant d'effectuer des opérations mathématiques masquées sur le texte chiffré.

Confidential Transfers est validé à l'aide de protocoles Sigma, une catégorie spécifique de preuves à divulgation nulle de connaissance dans laquelle une partie, le prouveur, peut démontrer à une autre partie, le vérificateur, qu'elle connaît un secret sans révéler ce secret. Ces protocoles Sigma sont nécessaires à plusieurs instructions fournies avec l'extension. Examinons chaque preuve :

Preuve de validité (de clé publique)

  • Vérifie qu'une clé publique Twisted ElGamal est correctement formatée
  • Cela revient à valider la « carte d'identité numérique » d'une autre personne avant de démarrer une conversation sécurisée
  • Cette preuve est requise pour l'instruction ConfigureAccount

Preuve de validité (du texte chiffré)

  • Garantit que le message chiffré est correctement formé
  • Imaginez que vous recevez une boîte scellée : vous savez qu'elle n'a pas été altérée, car elle est toujours fermée
  • Cette preuve est requise pour les instructions Withdraw, Transfer et TransferWithFee

Preuve de solde nul

  • Prouve que le texte chiffré Twisted ElGamal chiffre le nombre zéro
  • Cela revient à vérifier que le solde de votre compte bancaire est nul sans ouvrir votre application bancaire
  • Cette preuve est requise pour l'instruction EmptyAccount

Preuve d'égalité

  • Confirme deux types d'égalité : entre deux textes chiffrés ElGamal ou entre un texte chiffré ElGamal et un engagement de Pedersen
  • Imaginez deux abris verrouillés remplis d'outils : il s'agit de prouver qu'ils contiennent exactement les mêmes outils sans les ouvrir
  • Cette preuve est requise pour les instructions Transfer, TransferWithFee, WithdrawWithheldTokensFromMint et WithdrawWithheldTokensFromAccounts

Preuve Sigma des frais

  • Prouve que les frais de transfert engagés sont corrects
  • Cela revient à confirmer à FedEx que vous avez payé les droits de douane de votre colis sans lui indiquer le montant exact versé
  • Cette preuve est requise pour l'instruction TransferWithFee

Preuve d'intervalle

  • Confirme qu'un nombre chiffré se situe dans un intervalle donné
  • Imaginez que vous estimez la taille d'une personne et prouvez que votre estimation se situe dans un intervalle correct, sans révéler sa taille réelle
  • Solana utilise Bulletproofs pour ces preuves. Vous pouvez en apprendre davantage en consultant cet article universitaire et leur implémentation dalek

En bref : ces preuves à divulgation nulle de connaissance permettent de valider qu'une partie connaît un secret qu'une autre peut vérifier sans qu'il soit révélé. Ces différents types de preuves garantissent que les soldes et les transferts de jetons fonctionnent mathématiquement comme prévu, tout en restant entièrement confidentiels grâce au chiffrement.

Dans ce système confidentiel, seul le titulaire du compte, qui possède la clé de déchiffrement, peut consulter son solde. Il peut toutefois arriver qu'un tiers externe ait besoin d'examiner les soldes, par exemple à des fins d'audit ou de conformité. L'extension de jeton confidentiel le permet grâce à son système d'auditeur global. Dans ce système, chaque compte peut disposer d'une clé de déchiffrement distincte, ce qui permet à un titulaire d'accorder de manière sélective un accès en lecture à certains comptes. Le mint, ou l'entité qui émet les actifs, possède une structure de données spéciale pouvant inclure facultativement une « clé de chiffrement globale de l'auditeur ». Le code est le suivant :

Code
Transfer {
  amount_sender: PKE::encrypt(pke_pubkey_sender, 10),
  amount_receiver: PKE::encrypt(pke_pubkey_receiver, 10),
  amount_auditor: PKE::encrypt(pke_pubkey_auditor, 10),
  range_proof: RangeProof,
  equality_proof: EqualityProof,
  ...
}

Le paramètre amount_auditor correspond au montant du transfert chiffré à l'aide de la clé de chiffrement publique de l'auditeur. Toute personne disposant de la clé secrète de l'auditeur peut déchiffrer amount_auditor et ainsi auditer les montants des transactions pour un mint donné.

Si vous vous intéressez à la sécurité, vous avez peut-être remarqué une faille potentielle dans cette conception. Supposons qu'Alice génère une preuve à partir de son solde chiffré. Au même moment, Bob lui envoie des jetons et sa transaction est traitée en premier. La transaction d'Alice est alors rejetée, car la preuve générée ne tient pas compte du nouvel état du compte. Ce type d'attaque, appelé front-running, pourrait rendre le compte d'Alice inutilisable si Bob saturait continuellement le réseau de transferts vers ce compte. Pour éviter ce type d'attaque, le solde chiffré d'un compte est divisé entre son solde pending et son solde available :

Code
let ct_pending = PKE::encrypt(pke_pubkey, 10);
let ct_available = PKE::encryption(pke_pubkey, 50);

Account {
    mint: Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB,
    owner: 5vBrLAPeMjJr9UfssGbjUaBmWtrXTg2vZuMN6L4c8HE6,
    encryption_key: mpbpvs1LksLmdMhCEzyu5UEWEb3dsRPbB5,
    pending_balance: ct_pending,
    account_balance: ct_available,
    ...
}

Tous les fonds sortants sont soustraits du solde disponible, tandis que tous les fonds entrants sont ajoutés au solde en attente.

Confidential Transfers n'est pas encore disponible et les sections Introduction et Quick Start Guide de la documentation Solana sont toujours en cours de développement. Vous pouvez cependant suivre les tâches restantes pour Confidential Transfers dans cette issue GitHub du dépôt solana-program-library. La documentation propose une analyse approfondie du protocole, mais il est important de noter qu'il n'est pas nécessaire d'en maîtriser le contenu pour utiliser l'extension. Le résumé accessible de Confidential Transfers présenté dans les paragraphes précédents devrait largement suffire pour commencer à l'utiliser une fois que tout sera disponible.

Extensions de compte

Voici une présentation de chaque extension de compte :

1. Mémo obligatoire pour les transferts entrants

Les extensions de jetons proposent une fonctionnalité permettant d'imposer un mémo pour tous les transferts entrants. Un mémo est simplement un court message on-chain. Cette fonctionnalité ressemble à la note accompagnant un cadeau : vous savez ainsi qui vous l'a envoyé et pourquoi.

2. Propriété immuable

L'extension ImmutableOwner ajoute une couche de sécurité en empêchant la réattribution de la propriété d'un compte. Cette mesure renforce la sécurité des transactions de jetons. Pour mieux la comprendre, examinons la manière dont les jetons sont stockés dans le programme de jetons standard. En général, pour envoyer un jeton à un portefeuille, la première étape consiste à créer dans le portefeuille du destinataire un compte de jetons qui contiendra ce jeton. Ce compte est créé à partir d'une combinaison de l'adresse du mint et de l'adresse du portefeuille du destinataire. Tout fonctionne correctement, à ceci près qu'une fois le compte créé, sa propriété peut être transférée à une autre personne. Avec l'extension Immutable Owner de Token2022, cela ne sera plus possible.

3. État par défaut du compte

L'extension DefaultAccountState permet aux créateurs de mints de limiter l'utilisation des jetons en configurant tous les nouveaux comptes de jetons comme gelés par défaut. Elle apporte un niveau de contrôle supplémentaire sur la distribution et l'utilisation des jetons. Vous pourriez ainsi recevoir un jeton, mais vous ne pourriez rien en faire tant que ses créateurs ne vous y autorisent pas.

4. Délégué permanent

Avec les extensions de jetons, il est possible de désigner un délégué de compte permanent pour un jeton. Vous pouvez ainsi nommer une personne, le délégué, qui disposera toujours de l'autorité nécessaire pour gérer les jetons d'un mint. Elle pourra notamment transférer ou détruire des jetons. Si cette extension est utilisée, cette autorité disposera de privilèges de délégation illimités sur tous les comptes associés à ce mint. Cela peut être très dangereux, car ce délégué pourrait transférer ou détruire les jetons de n'importe quel portefeuille.

Extensions de jetons face à Ethereum et Binance Smart Chain (BSC)

Ethereum et Binance Smart Chain (BSC) ont déjà réalisé des avancées importantes dans la DeFi, et certaines fonctionnalités des extensions de jetons sont déjà apparues sur les jetons de ces chaînes.

SafeMoon sur BSC en est un exemple : le projet a instauré des frais de 10 % sur chaque transaction, dont 5 % sont redistribués aux autres détenteurs de SafeMoon. Cela encourage les détenteurs à HODL. Le concept des transferts confidentiels utilisant des preuves à divulgation nulle de connaissance n'est pas nouveau non plus. Sur Ethereum, des projets comme Aztec Protocol ont exploré les transactions privées.

Même si Solana a mis un peu plus de temps à proposer ces fonctionnalités, sa vitesse supérieure et ses coûts de transaction réduits offrent un environnement propice au développement des extensions de jetons, ce qui lui confère un avantage concurrentiel sur Ethereum et BSC.

Premiers utilisateurs des extensions de jetons

Les développeurs, les dApps et les portefeuilles doivent s'adapter à ces nouvelles fonctionnalités pour tirer pleinement parti des extensions de jetons. Voici quelques-unes des premières adoptions du nouveau programme :

$BERN / BonkEarn

$BERN, créé par la communauté $BONK, est l'un des premiers jetons développés à partir du programme des extensions de jetons. $BERN utilise actuellement l'extension de frais de transfert pour prélever 6,9 % sur chaque transfert. L'équipe de $BERN utilise ces frais pour récompenser les détenteurs de $BERN et de $BONK.

Détail complet :

  • 5 % pour les « Bernzy Bonus Fee », destinés à récompenser les détenteurs de $BERN
  • 1 % pour acheter et détruire des $BONK
  • 0,5 % pour détruire des $BERN
  • 0,3 % pour le fonds de développement, afin de payer davantage de frais et d'alimenter le pool de liquidité du jeton.
  • 0,1 % pour la DAO $BONK

Plateformes d'échange décentralisées

FluxBeam est une DEX sur Solana qui prend actuellement en charge les jetons créés avec le programme des extensions de jetons.

Portefeuilles

Backpack, une extension de portefeuille populaire, prend déjà en charge les extensions de jetons et Phantom proposera bientôt cette fonctionnalité.

Outils

Des outils permettant de créer votre propre jeton avec le programme des extensions de jetons sont désormais disponibles sur FluxBeam.

RugCheck , un outil permettant d'analyser les marchés de jetons Solana et différents jetons, permet déjà de vérifier les jetons créés avec Token 2022.

Adopter l'avenir

L'introduction des extensions de jetons constitue une avancée majeure dans le parcours web3 de Solana. Elle apporte de nombreuses fonctionnalités inédites tout en renforçant les capacités existantes. Ces extensions révolutionnaires offrent non seulement davantage de contrôle et de flexibilité aux créateurs de jetons, mais ouvrent également de nouvelles possibilités dans la DeFi. Même si d'autres blockchains proposent déjà des fonctionnalités similaires, l'avantage de Solana en matière de vitesse et de coût, associé aux fonctionnalités de Token2022, en fait un concurrent redoutable dans l'univers des cryptomonnaies. À mesure que le soutien des premiers utilisateurs et de l'ensemble de la communauté continue de progresser, Token2022 est prêt à renforcer et à faire évoluer l'écosystème Solana.

Abonnez-vous à Helius

Suivez les dernières actualités du développement sur Solana et recevez une notification à chaque publication