Skip to main content
  1. Un transfert privé déplace des tokens dans un anneau entre des portefeuilles privés.
  2. Les transferts privés sont envoyés dans une seule transaction Solana vers une adresse de portefeuille Solana.

Transfert : ce qui est privé

L’anneau sans permission est confidentiel avec un montant et un actif chiffrés. Un anneau personnalisé peut être configuré comme confidentiel ou anonyme (expéditeur, destinataire, actif et montant chiffrés).

Comment fonctionne un transfert

Un transfert privé se comporte de manière similaire à un transfert public Solana :
  1. Le solde SOL ou SPL de l’utilisateur est chiffré sur la chaîne.
  2. L’utilisateur déchiffre l’état privé, le portefeuille crée un transfert et le propriétaire signe.
    • Récupérer l’état chiffré avec des méthodes RPC dédiées. Seul l’utilisateur peut déchiffrer les soldes localement.
    • Le portefeuille définit le montant et le destinataire, puis demande une preuve ZK. Le fournisseur RPC génère la preuve ZK par défaut et la renvoie.
  3. Le runtime Solana vérifie les signatures et invoque le programme de confidentialité Solana, qui vérifie la preuve ZK sans révéler l’état chiffré.
  4. L’application suit le statut via le hash de la transaction Solana.
  1. Le solde SOL ou SPL de l’utilisateur est public sur la chaîne.
  2. Le portefeuille lit l’état public, construit un transfert et le propriétaire signe.
  3. Le runtime Solana vérifie les signatures et invoque le programme système ou le programme token, qui met à jour le solde public.
  4. L’application suit le statut via le hash de la transaction Solana.
Voici le flux de transaction de haut niveau pour l’anneau confidentiel sans permission. Comparez avec les anneaux personnalisés dans concepts.

Commencer

1

Prérequis

The TypeScript examples require Node.js 24 or later, pnpm 11.18.0, and the Solana CLI.
Source: sdk-libs/ts
Add a Helius API key:
.env
The examples use the Solana CLI wallet as the payer by default. The payer must hold devnet SOL. See How to Get Devnet SOL.
2

Transférer vers un solde privé

  • Le SDK renvoie des instructions. L’application les signe et les envoie.
  • sendAndConfirmFactory construit une transaction Kit, la soumet et renvoie la signature ainsi que le slot arrivé.
  • L’exemple dépense le compte de token Solana privé créé par le dépôt précédent. Un transfert peut dépenser plusieurs UTXOs.
  • transferUtxo sélectionne un compte de token Solana privé à partir de ce solde.
  • ProofInputUtxo.fromKeypair prépare l’UTXO sélectionné comme entrée de preuve avec la clé privée du portefeuille de l’expéditeur.
  • La paire de clés dérive le nullificateur qui marque l’UTXO d’entrée comme dépensé alors que l’actif et le montant restent chiffrés.
  • senderAddress est l’ de l’expéditeur. Le transfert se fait à partir de ce portefeuille.
  • [transferInput] répertorie les UTXOs sélectionnés de l’expéditeur. Un transfert peut dépenser plusieurs UTXOs.
  • senderSigner.address est l’adresse Solana du payeur des frais. Un sponsor de gaz peut remplir ce rôle pour un transfert confidentiel.
  • recipient est l’adresse masquée du destinataire. La sortie transférée est chiffrée pour la clé d’observation du destinataire.
  • SOL_MINT sélectionne SOL. Un transfert SPL ou Token 2022 passe la frappe de token.
  • TRANSFER_AMOUNT est exprimé dans les unités de base de l’actif. SOL utilise des lamports. Les actifs SPL et Token 2022 utilisent les unités de base du token.
  • transfer.sign autorise la transition d’état, chiffre l’actif et le montant et produit les entrées pour le prouveur de connaissance zéro.
  • assets est le registre des actifs utilisé pour résoudre les actifs privés pris en charge.
  • client.proveTransact génère la preuve de connaissance zéro à partir du transfert signé et renvoie les données d’instruction sérialisées.
  • La preuve démontre que l’expéditeur possède et peut dépenser les entrées sans révéler l’actif ou le montant chiffré.
  • payer signe et paie pour la transaction Solana. Un sponsor de gaz peut remplir ce rôle pour un transfert confidentiel.
  • inputTree et outputTree sont client.tree, l’arbre Merkle d’état qui contient les UTXOs dépensés et reçoit la sortie du destinataire et la modification de l’expéditeur.
  • data contient la preuve de connaissance zéro et les sorties chiffrées produites à l’étape précédente.
  • Un transfert privé déplace l’actif uniquement entre des soldes privés. Il ne passe pas par des comptes Solana publics ou des comptes de token.
  • sendAndConfirm signe et soumet transferInstruction comme une transaction Solana.
  • La confirmation produit le slot arrivé utilisé pour limiter la récupération de l’indexeur.

Exemple de code complet

Cloner et exécuter l’exemple :
Les exemples utilisent un anneau confidentiel sur local/devnet ici.
deposit_transfer_withdraw.ts

Guides connexes

Dépôt

Retrait

Lire un solde privé

Lire l'historique privé

Didn’t find what you were looking for?

Reach out! Telegram | E-Mail | Contact