Skip to main content
  1. Ein privater Transfer verschiebt Tokens in einem Ring zwischen privaten Wallets.
  2. Private Transfers werden in einer einzigen Solana-Transaktion an eine Solana-Wallet-Adresse gesendet.

Übertragung: Was ist privat?

Der genehmigungslose Ring ist vertraulich mit verschlüsselter Menge und Asset. Ein benutzerdefinierter Ring kann als vertraulich oder anonym (verschlüsselter Absender, Empfänger, Asset und Menge) konfiguriert werden.

So funktioniert eine Übertragung

Eine private Übertragung verhält sich ähnlich wie eine öffentliche Solana-Übertragung:
  1. Der SOL- oder SPL-Saldo des Benutzers wird on-chain verschlüsselt.
  2. Der Benutzer entschlüsselt den privaten Zustand, die Wallet erstellt eine Übertragung und der Eigentümer unterschreibt.
    • Abgerufener verschlüsselter Zustand mit dedizierten RPC-Methoden. Nur der Benutzer kann Salden lokal entschlüsseln.
    • Die Wallet legt die Menge und den Empfänger fest, dann wird ein ZK-Beweis angefordert. 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-Privacy-Programm auf, das den ZK-Beweis überprüft, ohne den verschlüsselten Zustand preiszugeben.
  4. Die App verfolgt den Status über den Solana-Transaktions-Hash.
  1. Der SOL- oder SPL-Saldo des Benutzers ist on-chain öffentlich.
  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 System- oder Token-Programm auf, das den öffentlichen Saldo aktualisiert.
  4. Die App verfolgt den Status über den Solana-Transaktions-Hash.
Dies ist der Transaktionsfluss auf hoher Ebene für den genehmigungslosen vertraulichen Ring. Vergleiche 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

Übertragung auf ein privates Guthaben

  • Das SDK gibt Anweisungen zurück. Die App signiert und sendet sie.
  • sendAndConfirmFactory erstellt eine Kit-Transaktion, übermittelt sie und gibt die Signatur plus den gelandeten Slot zurück.
  • Das Beispiel gibt das private Solana-Token-Konto aus, das durch die vorherige Einzahlung erstellt wurde. Eine Übertragung kann mehrere UTXOs ausgeben.
  • transferUtxo wählt ein privates Solana-Token-Konto aus diesem Guthaben aus.
  • ProofInputUtxo.fromKeypair bereitet das ausgewählte UTXO als Beweis-Eingabe mit dem privaten Wallet-Keypair des Absenders vor.
  • Das Keypair leitet den Nullifier ab, der das Eingabe-UTXO als ausgegeben markiert, während die Asset- und Mengeninformationen verschlüsselt bleiben.
  • senderAddress ist die des Absenders. Der Transfer geht von dieser Wallet aus.
  • [transferInput] listet die ausgewählten UTXOs des Absenders auf. Ein Transfer kann mehrere UTXOs ausgeben.
  • senderSigner.address ist die Solana-Adresse des Gebührenzahlers. Ein Gassponsor kann diese Rolle bei einem vertraulichen Transfer übernehmen.
  • recipient ist die geschützte Adresse des Empfängers. Der übertragene Output wird zum Ansichtsschlüssel des Empfängers verschlüsselt.
  • SOL_MINT wählt SOL aus. Eine SPL- oder Token-2022-Übertragung übergibt das Token-Mint.
  • TRANSFER_AMOUNT ist in den Basiseinheiten des Assets angegeben. SOL verwendet Lamports. SPL- und Token-2022-Assets verwenden die Basiseinheiten des Tokens.
  • transfer.sign autorisiert den Zustandsübergang, verschlüsselt das Asset und die Menge und erzeugt die Eingaben für den Zero-Knowledge-Prover.
  • assets ist das Asset-Register, das zur Auflösung unterstützter privater Assets verwendet wird.
  • client.proveTransact generiert den Zero-Knowledge-Proof aus dem unterschriebenen Transfer und gibt serialisierte Anweisungsdaten zurück.
  • Der Beweis zeigt, dass der Absender die Eingaben besitzt und ausgeben kann, ohne das verschlüsselte Asset oder die Menge preiszugeben.
  • payer signiert und bezahlt die Solana-Transaktion. Ein Gassponsor kann diese Rolle für einen vertraulichen Transfer übernehmen.
  • inputTree und outputTree sind client.tree, der Zustands-Merkle-Baum, der die verbrauchten UTXOs enthält und den Empfänger-Output und die Senderänderung erhält.
  • data enthält den Zero-Knowledge-Proof und die im vorherigen Schritt erzeugten verschlüsselten Ausgaben.
  • Ein privater Transfer bewegt das Asset nur zwischen privaten Salden. Er geht nicht über öffentliche Solana-Konten oder Token-Konten.
  • sendAndConfirm signiert und übermittelt transferInstruction als eine Solana-Transaktion.
  • Die Bestätigung liefert den gelandeten Slot, der verwendet wird, um den Index-Abruf zu steuern.

Vollständiges Codebeispiel

Klone und führe das Beispiel aus:
Die Beispiele verwenden einen vertraulichen Ring auf Local/Devnet hier.
deposit_transfer_withdraw.ts

Verwandte Anleitungen

Einzahlung

Auszahlung

Privates Guthaben lesen

Private Historie lesen

Didn’t find what you were looking for?

Reach out! Telegram | E-Mail | Contact