Skip to main content

Introduction aux anneaux

Chaque transaction sur Solana est lisible publiquement : adresses, soldes et historique des transferts sont visibles par tous. Les anneaux chiffrent les soldes onchain et sont toujours non-custodiaux par défaut :
  • Dans les anneaux confidentiels, l’actif et le montant sont privés, tandis que l’expéditeur et le destinataire restent visibles.
  • Dans les anneaux anonymes, l’actif, le montant, l’expéditeur et le destinataire sont privés.
Deux cartes de transaction Solana côte à côte. La carte confidentielle montre le hash de la transaction, l'expéditeur et le destinataire tandis que l'actif et le montant sont occultés. La carte anonyme ne montre que le hash de la transaction ; l'expéditeur, l'actif, le montant et le destinataire sont tous occultés. Le hash de la transaction reste public sur les deux. Il existe différents types d’anneaux :
  1. L’anneau par défaut est sans permission et confidentiel. Il chiffre l’actif et le montant, peut être utilisé par quiconque, et n’a pas de contrôles de politique personnalisés.
  2. Les anneaux personnalisés sont des programmes Solana qui rendent la confidentialité sur Solana programmable, similaire à Token-2022. Un anneau personnalisé peut être confidentiel ou anonyme avec des politiques, rapports et règles de visibilité personnalisés.
Pour la plupart des applications, nous recommandons l’anneau par défaut, sans permission et confidentiel. Pour des contrôles de politique et de conformité personnalisés, contactez-nous pour commencer avec un anneau personnalisé.
Soldes privés montrés comme une zone onchain en pointillés contenant deux anneaux. L'anneau par défaut est confidentiel, auto-custodial et sans permission. L'anneau personnalisé est confidentiel ou anonyme, auto-custodial, et ajoute des politiques et conformités personnalisées. Un transfert privé connecte les anneaux, et chacun dépose et retire à partir d'une couche de soldes publics Solana en dessous.

Les anneaux personnalisés sont programmables

Les anneaux personnalisés sont de simples programmes Solana qui rendent la confidentialité programmable, avec des fonctionnalités similaires à Token-2022. Un anneau personnalisé peut définir des règles entièrement personnalisées pour les transferts et la visibilité/audit.
Les autorités des anneaux sont déclarées lors de la création de l’anneau, pour que les utilisateurs puissent inspecter la politique avant de choisir un anneau. L’anneau par défaut est sans permission et n’a pas d’autorité ou d’auditeur personnalisé.
Si vous souhaitez configurer votre propre anneau personnalisé, contactez-nous et nous vous aiderons à le mettre en place. Vous pouvez soit apporter votre propre conformité, soit utiliser la solution de gestion de KYC et de filtrage des sanctions de Helius.

Flux utilisateurs et garanties de confidentialité

Les transactions avec Helius Privacy sont exécutées nativement onchain et composées avec d’autres programmes Solana en une seule transaction. Les utilisateurs peuvent entrer, transférer en privé, ou sortir d’un anneau : 1. Dépôt ou on ramp. Les utilisateurs envoient des tokens d’un solde public Solana, ou d’un solde fiat, directement vers un solde privé. 2. Transfert privé. Les utilisateurs envoient des tokens entre soldes privés dans le même anneau, ou vers un autre. 3. Retrait ou off ramp. Les utilisateurs envoient des tokens d’un solde privé à un solde public Solana, ou directement à un solde fiat. Diagramme du cycle de vie de l'anneau. Un solde public de 100 USDC dépose dans un anneau et un solde fiat de USD / EUR / ... on-rampe dans le même anneau, les fonds se déplacent entre deux soldes privés via un transfert privé, puis se retirent vers un solde public ou off-rampe vers un solde fiat. Les utilisateurs envoient des tokens à une adresse de portefeuille Solana, comme ils le font avec des soldes publics. L’API de confidentialité achemine automatiquement le transfert vers le portefeuille privé, si le destinataire en a un. Sinon le transfert est un retrait vers l’adresse publique du destinataire. N’importe qui peut déposer sur un portefeuille privé simplement en connaissant l’adresse publique du portefeuille du destinataire. Lorsque l’application de l’expéditeur ne supporte pas la confidentialité, le destinataire reçoit les fonds publiquement et peut les chiffrer vers son propre solde privé en une seconde étape.

Dépôt vers un solde privé : ce qui est privé

Les utilisateurs peuvent déposer vers un solde privé de deux façons :
  1. On-ramp d’un solde fiat vers un solde crypto privé
  2. Dépôt d’un solde crypto public vers un solde crypto privé

Transfert privé : ce qui est privé

Les utilisateurs peuvent envoyer un transfert privé de deux façons :
  1. Transfert dans le même anneau
  2. Transfert vers un anneau différent
Pour la plupart des applications, nous recommandons l’anneau par défaut, sans permission et confidentiel. Pour des contrôles de politique et de conformité personnalisés, contactez-nous pour commencer avec un anneau personnalisé.

Retrait d’un solde privé : ce qui est privé

Les utilisateurs peuvent retirer d’un solde privé de deux façons :
  1. Off-ramp de crypto privée vers un solde fiat
  2. Retrait de crypto privée vers un solde crypto public

Flux de transaction à haut niveau

Un transfert privé se comporte de manière similaire aux transferts publics et est exécuté en une seule transaction Solana.
  1. Le solde SOL ou SPL de l’utilisateur est chiffré onchain.
  2. Récupération de l’état chiffré et déchiffrement localement, ou un prestataire délégué déchiffre et fournit l’état déchiffré.
  3. Le portefeuille définit le montant et le destinataire, puis demande une preuve ZK.
  4. Le prestataire RPC génère la preuve ZK par défaut et la retourne. Un anneau personnalisé nécessite aussi une preuve de politique.
  5. Le portefeuille construit la transaction Solana. Les preuves ZK sont vérifiées sans révéler l’état chiffré. Les programmes invoqués et qui signe et soumet dépendent de l’anneau :
  1. L’application suit le statut via le hash de transaction Solana.

Portefeuille privé

Les utilisateurs conservent leur solde chiffré dans un portefeuille privé. Le portefeuille privé reçoit les transferts à l’adresse publique Solana de l’utilisateur, servant de inbox. De cette manière, l’expéditeur entre toujours l’adresse Solana du destinataire, comme ils le font avec les transferts publics.

Création d’un portefeuille privé

Lors de la création d’un portefeuille privé, l’adresse Solana est enregistrée dans un registre onchain. Le registre mappe une adresse Solana à une . Les transferts sont chiffrés discrètement à l’adresse protégée. Plusieurs adresses Solana ne peuvent pas partager une adresse protégée. Chaque enregistrement de registre est un PDA possédé par le , que tout le monde peut consulter pour voir si une adresse Solana peut recevoir des transferts privés. Portefeuille utilisateur montrant deux portefeuilles Solana publics et un portefeuille privé. Une flèche de boîte de réception connecte la clé publique du portefeuille public A à l'adresse protégée du portefeuille privé.
Dans votre application de portefeuille, vous pouvez laisser vos utilisateurs créer des portefeuilles privés uniquement pour une clé publique “Portefeuille privé” dédiée, ou pour n’importe quelle clé publique.

Transferts vers un portefeuille privé

À chaque transfert, l’API de confidentialité consulte l’adresse du portefeuille dans le registre onchain pour vérifier si le destinataire a un portefeuille privé. En cas de correspondance, elle utilise l’adresse protégée discrètement pour chiffrer le transfert.
Lorsque le destinataire d’un transfert privé n’a pas de portefeuille privé, l’API de confidentialité résout le transfert en un retrait privé vers public.Nous recommandons de demander une signature utilisateur séparée dans l’interface pour s’assurer que l’utilisateur ne retire pas par accident vers un solde public.

Gestion des clés

Un portefeuille privé ajoute une paire de clés protégées à un portefeuille Solana à partir de votre paire de clés Solana. La paire de clés protégées est un ensemble des clés de signature, nullificateur et visualisation. Ce n’est pas une paire de clés Solana. L’adresse protégée est les clés publiques de la paire de clés protégées. Les transferts sont chiffrés à elle.

Création d’une paire de clés protégées

Un portefeuille peut créer la paire de clés protégées de deux manières.
  1. Dériver les clés à partir de la phrase de récupération.
    • La méthode recommandée pour les portefeuilles basés sur la phrase de récupération.
    • Anneaux confidentiels : la clé de signature est la même clé Ed25519 qu’un portefeuille Solana dérive de cette phrase. Les clés de nullificateur et de visualisation sont des clés supplémentaires dérivées de la même phrase.
    • Anneaux anonymes personnalisés : la clé de signature est une clé P-256 supplémentaire dérivée de la phrase de récupération du portefeuille.
    • Vous pouvez toujours recréer la paire de clés protégées de la même manière que vous recréez le portefeuille Solana.
  2. Dériver les clés à partir d’un message fixe avec la clé Solana existante.
    • Les signatures Solana sont déterministes, donc la même paire de clés Solana produit toujours la même paire de clés protégées. L’application ne reçoit jamais la clé privée.
    • La méthode recommandée pour les tests et les portefeuilles qui n’utilisent pas de phrase de récupération. Le portefeuille intégrateur doit s’assurer que la signature n’est pas exposée à des tiers.

Intégration d’une paire de clés protégées

Un portefeuille peut conserver la paire de clés protégées lui-même via l’Intégration de portefeuille native. Avec le Portefeuille de confidentialité embarqué, un Fournisseur de portefeuille conserve la paire de clés protégées et effectue ses opérations de clés à la place.

Modes de déchiffrement et synchronisation du portefeuille

Seul le propriétaire peut déchiffrer un solde de portefeuille privé avec une clé de visualisation. Pour une divulgation sélective, un propriétaire peut partager une clé de visualisation avec un auditeur, afin que l’auditeur puisse lire l’activité sans pouvoir dépenser. Dans les anneaux personnalisés, la politique peut déclarer un auditeur qui peut déchiffrer tous les soldes de cet anneau personnalisé. Les anneaux confidentiels (l’anneau par défaut et les anneaux personnalisés confidentiels) supportent le déchiffrement local et délégué. Les anneaux anonymes (uniquement les anneaux personnalisés) supportent uniquement le déchiffrement délégué.
Un portefeuille doit déchiffrer et mettre à jour les soldes partout où il relance le remplissage : à l’ouverture du portefeuille, l’ouverture du portefeuille privé, reprise de l’application, reconnexion au réseau, écart de flux, ou restauration de portefeuille.

Déchiffrement local

En mode de déchiffrement local, le portefeuille déchiffre et synchronise les soldes et l’historique localement. Les serveurs Helius ne reçoivent pas la phrase mnémotechnique, la graine, la clé privée de signature, les clés privées de visualisation, ou le secret de nullificateur.

Déchiffrement délégué

En mode de déchiffrement délégué, le portefeuille et le prestataire sélectionné partagent une clé de visualisation. Cela permet au prestataire de déchiffrer les soldes et l’historique, mais cela ne confère pas l’autorité de dépense. Un portefeuille peut également partager les clés de visualisation antérieures lorsqu’il autorise le prestataire à synchroniser l’activité historique. L’accès de l’auditeur est séparé du déchiffrement délégué. Un auditeur reçoit la visibilité de l’anneau définie par la politique, tandis qu’un prestataire délégué reçoit un accès de synchronisation limité au portefeuille.

L’indexeur sert l’état chiffré

Tout comme les portefeuilles publics reposent sur un RPC Solana, les portefeuilles privés reposent sur un indexeur. L’indexeur fournit l’état chiffré dont un portefeuille a besoin pour lire les soldes et construire des transactions privées. Par défaut, l’indexeur est accessible via l’; toute personne peut également exécuter son propre indexeur sans permission comme solution de secours.

Solde du portefeuille privé

Le solde du portefeuille privé est conservé onchain dans des comptes de tokens Solana privés sous forme de UTXOs (sorties de transactions non dépensées), pas dans un compte de tokens Solana. L’anneau par défaut et tous les anneaux personnalisés stockent les soldes privés dans un arbre Merkle d’état. Le solde du portefeuille privé est la somme de tous les UTXOs possédés par un portefeuille privé. Les programmes Solana peuvent posséder des UTXOs de manière similaire aux comptes Solana réguliers. Cette documentation utilise les comptes de tokens Solana privés et les UTXOs de manière interchangeable. Un portefeuille privé relié par des lignes pointillées à plusieurs notes UTXO, chacune détenant un montant d'un actif. Le solde du portefeuille est la somme des notes.
Pour l’expérience utilisateur, il n’importe pas si le solde est conservé dans des UTXOs ou des comptes de tokens Solana.À un niveau technique, dépenser un solde public réduit le amount dans un compte de tokens Solana. Dépenser un solde privé n’écrase pas le champ amount d’un UTXO. Au lieu de cela, les transactions privées prennent les UTXOs existants en entrée (choisis automatiquement par le SDK), consomment les entrées et créent de nouvelles sorties pour le destinataire et pour le solde restant de l’expéditeur.Par exemple, Alice a 50 USDC et envoie 35 à Bob.
  • Dans un compte de tokens Solana, son champ amount passe de 50 à 15, et celui de Bob augmente de 35. Le nombre change sur place.
  • Avec les UTXOs, Alice détient une note de 50 USDC. La transaction la dépense et crée deux nouvelles notes : une note de 35 USDC pour Bob, et une note de change de 15 USDC pour Alice. Sa vieille note de 50 est maintenant dépensée.
Alice envoie 35 de ses 50 USDC à Bob. Sur un compte de tokens Solana, le montant change sur place de 50 à 15. Avec les UTXOs, la seule note de 50 USDC d'Alice est dépensée et deux nouvelles notes sont créées : une note de 35 USDC pour Bob et une note de change de 15 USDC pour Alice.
Lors du dépôt à un solde privé de SOL et d’actifs SPL, un PDA d’interface possédé par le programme de Confidentialité Solana met les tokens en séquestre et crée des UTXOs avec l’utilisateur comme propriétaire.Lors du retrait vers un solde public, les UTXOs existants sont marqués comme dépensés, et les tokens sont libérés vers les comptes de tokens Solana.
Un portefeuille privé peut détenir des soldes dans plusieurs anneaux en même temps sans limites quant au nombre d’anneaux. À quel anneau un solde appartient n’est pas une propriété du portefeuille. C’est une propriété de chaque UTXO, stockée dans son champ policy_program_id.

Comptes de tokens Solana privés

Un compte de tokens Solana privé est un UTXO qui se comporte de manière similaire à un compte de tokens Solana avec deux différences principales :
  • un compte de tokens Solana privé ne nécessite pas d’exemption de loyer lors de sa création, et
  • son solde est chiffré onchain.
Cependant, les comptes de tokens Solana privés stockent les mêmes données, telles que :
  • Actif : la frappe que l’UTXO contient des unités de. SOL est l’adresse de frappe par défaut. L’actif peut être SOL ou n’importe quel actif SPL ou Token-2022.
  • Montant : le nombre d’unités de asset que la note contient, dans l’unité la plus petite de l’actif.
  • Données de programme et de politique : données facultatives pour la politique d’anneau configurée pour ajouter une fonctionnalité similaire à Token-2022
Un compte de tokens Solana privé. Le programme de confidentialité Solana possède un compte de tokens privé, qui s'étend dans ses champs PrivateAccount : propriétaire, actif, montant, données de politique et ID de programme de politique.
Un compte de tokens Solana. Le programme de tokens possède un compte de tokens, déployé dans ses champs AccountInfo (Données, Exécutable, Lamports, Propriétaire) et le champ Data déployé dans les Données de compte (Frappe, Propriétaire, Montant).

Sur la concurrence

Les utilisateurs peuvent dépenser les soldes privés dès que les transactions sont finales. Autrement dit, le solde d’une paire de clés peut être utilisé simultanément lorsqu’il est réparti entre plusieurs UTXOs. Le portefeuille sélectionne quels UTXOs dépenser. Un arbre Merkle stocke l’état privé pour l’anneau par défaut sans permission et tous les anneaux personnalisés. L’arbre est stocké dans un compte Solana modifiable. Les transferts privés qui écrivent dans ce compte partagent la limite de verrouillage d’écriture de 12 millions CU par compte de Solana par bloc. Un transfert privé consomme environ 220 000 CU. Un arbre supporte donc environ 54 transferts privés par bloc, ou environ 130 transactions par seconde avec les temps de bloc actuels de Solana d’environ 400 millisecondes. Le protocole peut ajouter plus d’arbres pour augmenter le débit. Chaque arbre est un compte modifiable séparé avec son propre budget de calcul par compte, donc les transactions sur différents arbres ne se disputent pas le même budget de verrouillage d’écriture.

Sur le temps de génération de preuve

Les preuves de zéro connaissance sont actuellement générées par un serveur de prouveur ; un transfert confidentiel typique est prouvé en quelques dizaines de millisecondes ; la preuve locale pour les anneaux confidentiels est prévue. Le temps de preuve est activement optimisé pour assurer une expérience utilisateur fluide.

Termes

Didn’t find what you were looking for?

Reach out! Telegram | E-Mail | Contact