Zum Hauptinhalt springen
  1. Eine Einzahlung verschiebt Token aus dem öffentlichen Solana-Guthaben des Benutzers in sein eigenes oder das private Guthaben einer anderen Person.
  2. Einzahlungen werden in einer einzelnen Solana-Transaktion an eine Solana-Wallet-Adresse gesendet.

Einzahlung: Was privat ist

Der permissionless Ring ist vertraulich. Betrag und Asset sind verschlüsselt. Ein benutzerdefinierter Ring kann als vertraulich oder anonym konfiguriert werden. Dabei sind Absender, Empfänger, Asset und Betrag verschlüsselt.

So funktioniert eine Einzahlung

Eine Einzahlung ist eine öffentliche Solana-Übertragung, aus der ein privates Guthaben entsteht.
  1. Das SOL- oder SPL-Guthaben des Benutzers ist öffentlich onchain sichtbar.
  2. Die Wallet legt Betrag und Empfänger fest, erstellt die Einzahlung und der Eigentümer signiert. Eine Einzahlung erfordert keinen ZK-Beweis.
  3. Die Solana-Laufzeitumgebung prüft die Signaturen und ruft das Solana Privacy Program auf.
  4. Die App verfolgt den Status anhand des Solana-Transaktions-Hashs.
  1. Das SOL- oder SPL-Guthaben des Benutzers ist öffentlich onchain sichtbar.
  2. Die Wallet liest den öffentlichen Zustand, erstellt eine Übertragung und der Eigentümer signiert.
  3. Die Solana-Laufzeitumgebung prüft die Signaturen und ruft das System Program oder Token Program auf, das das öffentliche Guthaben aktualisiert.
  4. Die App verfolgt den Status anhand des Solana-Transaktions-Hashs.
Dies ist der allgemeine Transaktionsablauf für den erlaubnisfreien vertraulichen Ring. Vergleiche ihn mit benutzerdefinierten Rings unter Allgemeiner Transaktionsablauf.

Erste Schritte

1

Voraussetzungen

Für die TypeScript-Beispiele benötigst du Node.js 24 oder höher, pnpm 11.18.0 und die Solana CLI.
Quelle: sdk-libs/ts
Füge einen Helius API key hinzu:
.env
Die Beispiele verwenden standardmäßig die Solana CLI wallet als Gebührenzahler. Der Gebührenzahler muss devnet SOL enthalten. Siehe So erhältst du Devnet SOL.
2

In ein privates Guthaben einzahlen

  • Das SDK gibt Anweisungen zurück. Die App signiert und sendet sie.
  • sendAndConfirmFactory erstellt eine Kit-Transaktion, übermittelt sie und gibt die Signatur sowie den bestätigten slot zurück.
Jeder SPL-Mint benötigt ein Token-Interface, das eingezahlte token verwahrt. Falls das Interface nicht vorhanden ist, erstelle es in derselben Transaktion wie die Einzahlung. Der Ersteller zahlt die Kontomiete.
  • senderAddress ist die des Empfängers. In diesem Beispiel wird auf das private Guthaben des Absenders eingezahlt. Der Empfänger kann der Absender oder eine Wallet eines Dritten sein.
  • senderViewTag ist senderAddress.confidentialViewTag(), der öffentliche Solana-Schlüssel des Absenders in vertraulichen Rings. Der Indexer verwendet ihn, um passende verschlüsselte Ausgaben zurückzugeben.
  • client.tree ist der Zustands-Merkle-Baum, der das neue Output-commitment empfängt.
  • depositor / senderSigner finanziert und signiert die Einzahlung vom öffentlichen in das private Guthaben.
  • DepositAsset.sol() wählt SOL aus. DepositAsset.spl erwartet für SPL- und Token-2022-Assets den Mint, das Quellkonto für token und das Token-Programm.
  • recipientOwnerHash ist senderAddress.ownerHash(). Dieser Hash aus den öffentlichen Signatur- und Nullifier-Schlüsseln des Empfängers wird als Eigentümerfeld im neuen privaten Konto für token festgeschrieben.
  • DEPOSIT_AMOUNT verwendet Lamports für SOL oder die Basiseinheiten des token für SPL- und Token-2022-Assets.
  • sendAndConfirm signiert depositIx und übermittelt es als Solana-Transaktion.
  • Die Bestätigung liefert den verarbeiteten slot, mit dem der Abruf durch den Indexer gesteuert wird.

Vollständiges Codebeispiel

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

Verwandte Anleitungen

Create a Private Wallet

Transfer

Withdraw

Read a Private Balance

Read Private History

Nicht gefunden, wonach du gesucht hast?

Melde dich! Telegram | E-Mail | Kontakt