Skip to main content
  1. Un retrait déplace des tokens d’un solde privé vers un solde public Solana.
  2. Les retraits sont envoyés dans une seule transaction Solana à une adresse de portefeuille Solana.

Retrait : Qu’est-ce qui est Privé

Le Ring sans permission est confidentiel avec la quantité et l’actif cryptés. Un Ring personnalisé peut être configuré comme confidentiel ou anonyme (expéditeur, destinataire, actif et montant cryptés).

Comment fonctionne un Retrait

Un retrait se comporte de manière similaire à un transfert public Solana :
  1. Le solde SOL ou SPL de l’utilisateur est crypté onchain.
  2. L’utilisateur décrypte l’état privé, le portefeuille crée un retrait, et le propriétaire signe.
    • Récupérez l’état crypté avec des méthodes RPC dédiées. Seul l’utilisateur peut décrypter 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 crypté.
  4. L’application suit l’état via le hash de la transaction Solana.
  1. Le solde SOL ou SPL de l’utilisateur est public onchain.
  2. Le portefeuille lit l’état public, crée un transfert, et le propriétaire signe.
  3. Le runtime Solana vérifie les signatures et invoque le programme Système ou Token, qui met à jour le solde public.
  4. L’application suit l’état via le hash de la transaction Solana.
C’est le flux de transaction de haut niveau pour le Ring confidentiel sans permission. Comparer aux Rings 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

Retirer vers un Solde Public

  • Le SDK retourne des instructions. L’application les signe et les envoie.
  • sendAndConfirmFactory crée une transaction Kit, la soumet et retourne la signature ainsi que le slot obtenu.
  • L’exemple dépense le compte de tokens privés Solana restant après le transfert précédent. Un retrait peut dépenser plusieurs UTXOs.
  • withdrawalUtxo sélectionne un compte de tokens privés Solana à partir de ce solde.
  • ProofInputUtxo.fromKeypair prépare l’UTXO sélectionné comme entrée de preuve avec la paire de clés du portefeuille privé de l’expéditeur.
  • La paire de clés dérive le nullifieur qui marque l’UTXO d’entrée comme dépensé alors que l’actif et le montant d’entrée restent cryptés.
  • senderAddress est l’adresse protégée de l’expéditeur. Le retrait dépense à partir de ce portefeuille.
  • [withdrawalInput] liste les UTXOs sélectionnés de l’expéditeur. Un retrait 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 retrait confidentiel.
  • WithdrawalTarget.sol est le destinataire public Solana. Le destinataire peut être le propriétaire ou un tiers.
  • SOL_MINT sélectionne SOL. Un retrait SPL ou Token 2022 passe la frappe de token.
  • WITHDRAW_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.
  • withdrawal.sign autorise la transition d’état, crypte le changement privé restant et produit les entrées pour le prouveur zéro-connaissance.
  • assets est le registre d’actifs utilisé pour résoudre les actifs privés pris en charge.
  • client.proveTransact génère la preuve zéro-connaissance à partir du retrait signé et retourne 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. L’actif retiré et le montant sont publics. Les montants d’entrée et le changement restent cryptés.
  • payer signe et paie la transaction Solana. Un sponsor de gaz peut remplir ce rôle pour un retrait confidentiel.
  • inputTree et outputTree sont client.tree, l’arbre Merkle de l’état qui contient les UTXOs dépensés et reçoit le changement privé de l’expéditeur.
  • withdrawal est TransactWithdrawal.sol, le compte public Solana du destinataire.
  • data contient la preuve zéro-connaissance et le changement crypté produit à l’étape précédente.
  • Un retrait déplace l’actif d’un solde privé vers un compte public Solana. Il passe le compte destinataire public.
  • sendAndConfirm signe et soumet withdrawalInstruction en tant que transaction Solana.
  • La confirmation donne le slot obtenu utilisé pour contrôler la récupération de l’indexeur.

Exemple de Code Complet

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

Guides Connexes

Dépôt

Transfert

Lire un Solde Privé

Lire l'Historique Privé

Didn’t find what you were looking for?

Reach out! Telegram | E-Mail | Contact