Skip to main content
  1. Eine Abhebung überträgt Token von einem privaten Guthaben auf ein öffentliches Solana-Guthaben.
  2. Abhebungen werden in einer einzigen Solana-Transaktion an eine Solana-Wallet-Adresse gesendet.

Abheben: Was ist privat

Der genehmigungsfreie Ring ist vertraulich mit verschlüsseltem Betrag und Vermögenswert. Ein benutzerdefinierter Ring kann als vertraulich oder anonym konfiguriert werden (verschlüsselter Absender, Empfänger, Vermögenswert und Betrag).

Wie eine Abhebung funktioniert

Eine Abhebung verhält sich ähnlich wie eine öffentliche Solana-Übertragung:
  1. Das SOL- oder SPL-Guthaben des Benutzers ist onchain verschlüsselt.
  2. Der Benutzer entschlüsselt den privaten Zustand, die Wallet erstellt eine Abhebung und der Eigentümer unterschreibt.
    • Abrufen des verschlüsselten Zustands mit dedizierten RPC-Methoden. Nur der Benutzer kann Guthaben lokal entschlüsseln.
    • Die Wallet legt Betrag und Empfänger fest und fordert einen ZK-Beweis an. Der RPC-Anbieter generiert standardmäßig den ZK-Beweis und gibt ihn zurück.
  3. Die Solana-Laufzeit überprüft die Signaturen und ruft das Solana-Datenschutzprogramm auf, das den ZK-Beweis überprüft, ohne den verschlüsselten Zustand preiszugeben.
  4. Die App verfolgt den Status über den Solana-Transaktionshash.
  1. Das SOL- oder SPL-Guthaben des Benutzers ist öffentlich onchain.
  2. Die Wallet liest den öffentlichen Zustand, erstellt eine Übertragung und der Eigentümer unterschreibt.
  3. Die Solana-Laufzeit überprüft die Signaturen und ruft das Systemprogramm oder Token-Programm auf, das das öffentliche Guthaben aktualisiert.
  4. Die App verfolgt den Status über den Solana-Transaktionshash.
Dies ist der Transaktionsablauf auf hoher Ebene für den genehmigungsfreien vertraulichen Ring. Vergleichen Sie mit benutzerdefinierten Ringen in Konzepte.

Erste Schritte

1

Voraussetzungen

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

Abheben auf ein öffentliches Guthaben

  • Das SDK gibt Anleitungen zurück. Die App signiert und sendet sie.
  • sendAndConfirmFactory erstellt eine Kit-Transaktion, gibt sie ein und gibt die Signatur plus den gelandeten Slot zurück.
  • Das Beispiel gibt das verbleibende Private Solana Token-Konto nach der vorhergehenden Übertragung aus. Eine Abhebung kann mehrere UTXOs ausgeben.
  • withdrawalUtxo wählt ein privates Solana Token-Konto aus diesem Guthaben aus.
  • ProofInputUtxo.fromKeypair bereitet den ausgewählten UTXO als Beweismittel mit dem privaten Wallet-Schlüsselpaar des Absenders vor.
  • Das Schlüsselpaar leitet den Nullifier ab, der den Eingabe-UTXO als ausgegeben markiert, während der Eingabe-Vermögenswert und der Betrag verschlüsselt bleiben.
  • senderAddress ist die des Absenders. Die Abhebung erfolgt von dieser Wallet.
  • [withdrawalInput] listet die ausgewählten UTXOs des Absenders auf. Eine Abhebung kann mehrere UTXOs ausgeben.
  • senderSigner.address ist die Solana-Adresse des Gebührenträgers. Ein Gassponsor kann diese Rolle für eine vertrauliche Abhebung übernehmen.
  • WithdrawalTarget.sol ist der öffentliche Solana-Empfänger. Der Empfänger kann der Eigentümer oder ein Dritter sein.
  • SOL_MINT wählt SOL. Eine SPL- oder Token-2022-Abhebung gibt den Token-Mint weiter.
  • WITHDRAW_AMOUNT ist in den Basiseinheiten des Vermögenswerts angegeben. SOL verwendet Lamports. SPL- und Token-2022-Vermögenswerte verwenden die Basiseinheiten des Tokens.
  • withdrawal.sign autorisiert den Zustandsübergang, verschlüsselt das verbleibende private Wechselgeld und erzeugt die Eingaben für den Zero-Knowledge-Prover.
  • assets ist das Asset-Register, das zum Auflösen unterstützter privater Vermögenswerte verwendet wird.
  • client.proveTransact generiert den Zero-Knowledge-Beweis aus der signierten Abhebung und gibt die serialisierten Anweisungsdaten zurück.
  • Der Beweis zeigt, dass der Absender die Eingaben besitzt und ausgeben kann. Das abgehobene Vermögen und der Betrag sind öffentlich. Eingabemengen und Wechselgeld bleiben verschlüsselt.
  • payer signiert und zahlt die Solana-Transaktion. Ein Gassponsor kann diese Rolle für eine vertrauliche Abhebung übernehmen.
  • inputTree und outputTree sind client.tree, der Zustands-Merkle-Baum, der die ausgegebenen UTXOs enthält und das private Wechselgeld des Absenders erhält.
  • withdrawal ist TransactWithdrawal.sol, das öffentliche Solana-Empfängerkonto.
  • data enthält den Zero-Knowledge-Beweis und das verschlüsselte Wechselgeld, die im vorherigen Schritt erzeugt wurden.
  • Eine Abhebung überträgt den Vermögenswert von einem privaten Guthaben auf ein öffentliches Solana-Konto. Sie übergibt das öffentliche Empfängerkonto.
  • sendAndConfirm signiert und übermittelt withdrawalInstruction als Solana-Transaktion.
  • Die Bestätigung ergibt den gelandeten Slot, der verwendet wird, um das Indexer-Abrufen zu steuern.

Vollständiges Codebeispiel

Klonen und ausführen des Beispiels:
Die Beispiele verwenden einen vertraulichen Ring auf lokalem/devnet hier.
deposit_transfer_withdraw.ts

Verwandte Anleitungen

Einzahlung

Transfer

Ein privates Guthaben lesen

Private Historie lesen

Didn’t find what you were looking for?

Reach out! Telegram | E-Mail | Contact