Skip to main content
Ein privates Guthaben wird in UTXOs (nicht ausgegebenen Transaktionsausgaben) gespeichert. Du kannst dir UTXOs als private SPL-Token-Konten vorstellen. Es gibt jedoch zwei wesentliche Unterschiede:
  1. Ein UTXO ist kein Solana-Konto und benötigt daher keine Befreiung von der Rent.
  2. Sein Guthaben wird onchain verschlüsselt.
Das Datenlayout eines UTXO ähnelt dem von SPL-Token-Konten:
  • Eigentümer – Solana-Keypair, PDA oder P-256-Schlüssel.
  • Asset – der Mint (SOL, SPL oder Token-2022).
  • Betrag – die Anzahl der Einheiten von asset in der kleinsten Einheit.
  • Daten – ein UTXO kann beliebige Daten speichern, zum Beispiel den Eigentümer treuhänderisch verwahrter Token.
  • Programm- und Richtliniendaten – optional konfigurierte Ring-Compliance.
Ein privates Solana-Token-Konto. Das Solana Privacy Program besitzt ein privates Token-Konto, das in seine UTXO-Felder aufgeteilt ist: Eigentümer, Asset, Betrag, Daten, Richtliniendaten und Richtlinienprogramm-ID.
Solana-Token-Konto.

Privates Guthaben

Das private Guthaben ist die Summe aller UTXOs eines Assets, die einem privaten Wallet gehören. Das Wallet zeigt ein einziges Guthaben an, unabhängig davon, ob das private Guthaben aus einem oder mehreren UTXOs besteht. Eine private Übertragung kann mehrere UTXOs gleichzeitig ausgeben. Ein privates Wallet ist durch gestrichelte Linien mit mehreren UTXOs verbunden, die jeweils einen Betrag eines Assets enthalten. Das Wallet-Guthaben entspricht der Summe der UTXOs.

Private Übertragung

Private Übertragungen mit UTXOs funktionieren anders als öffentliche Übertragungen mit SPL-Token-Konten:
  • Eine Übertragung von einem SPL-Token-Konto aktualisiert amount.
  • Eine private Übertragung mit UTXOs aktualisiert amount eines UTXO nicht. Stattdessen geben private Übertragungen vorhandene UTXOs aus und erstellen neue UTXOs für den Empfänger sowie für das Restguthaben des Absenders.
Für Benutzer fühlen sich öffentliche Übertragungen mit Solana-Token-Konten und private Übertragungen mit UTXOs dennoch ähnlich an. Alice hat beispielsweise 50 USDC und sendet Bob 35 USDC.
  • Bei SPL-Token-Konten sinkt Alices amount von 50 auf 15 und Bobs steigt um 35.
  • Bei UTXOs besitzt Alice ein UTXO über 50 USDC. Die Transaktion gibt das vorhandene UTXO aus und erstellt zwei neue UTXOs: eines über 35 USDC für Bob und eines über 15 USDC für Alice.
Ein UTXO ausgeben

UTXO-Auswahl

Für private Übertragungen wählt das SDK nicht ausgegebene UTXOs aus, die den zu übertragenden Betrag abdecken. Der UTXO-Auswahlalgorithmus gibt pro Übertragung so wenige UTXOs wie möglich aus:
  1. Das SDK filtert deine UTXOs nach dem gesendeten Asset und sortiert sie nach Betrag.
  2. Das SDK wählt so viele UTXOs aus, wie zum Abdecken des Übertragungsbetrags erforderlich sind. Es wählt zuerst die größten UTXOs aus, bis der Übertragungsbetrag abgedeckt ist.
Alice sendet Bob beispielsweise 80 USDC. Ihre drei größten UTXOs reichen aus, um die Übertragung abzudecken: Alice sendet 80 USDC. Ihre UTXOs sind absteigend sortiert: 40, 25, 20, 10 und 5 USDC. Das SDK wählt 40, 25 und 20 USDC aus, die 80 USDC abdecken, und lässt 10 und 5 USDC unausgewählt. Weniger UTXOs halten die Transaktion klein. Jedes ausgegebene UTXO fügt 66 Byte für ein Nullifier-Konto hinzu, das das UTXO als ausgegeben markiert. Das Konto verhindert, dass das UTXO . Beispiele für private Übertragungen ohne zusätzliche Daten oder weitere Anweisungen:

Transaktionsvarianten

Jede private Übertragung verwendet eine Transaktionsvariante: eine feste Anzahl von slots für auszugebende UTXOs und neu zu erstellende UTXOs. Die Varianten reichen von 1 bis 36 ausgegebenen UTXOs. Jede Variante hat ihren eigenen ZK-Schaltkreis. Der Schaltkreis beweist, dass die ausgegebenen UTXOs gültig sind und die neuen UTXOs denselben Gesamtbetrag enthalten. Wenn eine Übertragung mehr als 36 UTXOs benötigt, führe sie zuerst zusammen. Das SDK wählt eine zur Übertragung passende Variante aus und füllt ungenutzte slots mit Dummy-UTXOs. Dummy-UTXOs haben keinen Wert und sehen onchain wie echte UTXOs aus.
Alice sendet Bob 30 USDC. Ihr größtes UTXO deckt die Übertragung ab.Alices UTXO über 40 USDC wird ausgegeben. Ihre UTXOs über 25, 20, 10 und 5 USDC bleiben nicht ausgegeben. Die Transaktion erstellt 30 USDC für Bob und 10 USDC für Alice.

UTXOs zusammenführen

Wenn du viele Übertragungen empfängst, ohne etwas auszugeben, kann sich das private Guthaben auf viele UTXOs verteilen. Wenn eine Übertragung mehr als 36 UTXOs benötigt, führe sie zuerst zusammen, damit der Benutzer das gesamte Guthaben in einer Übertragung ausgeben kann. Die meisten Benutzer werden selten auf ein fragmentiertes Guthaben stoßen, da eine Übertragung bis zu 36 UTXOs ausgeben kann.
  • Eine Zusammenführung kombiniert UTXOs desselben Eigentümers und Assets zu einem UTXO mit demselben Gesamtwert.
  • Eine Zusammenführung kann keine Mittel ausgeben oder den Eigentümer ändern.
  • Die Zusammenführung kann im Hintergrund erfolgen, ohne die UX für Endbenutzer zu beeinträchtigen.
Eine Zusammenführung gibt fünf UTXOs von Alice über jeweils 1 USDC aus und erstellt für Alice ein neues UTXO über 5 USDC. Wie viele Zusammenführungen erforderlich sind, um das gesamte Guthaben in einer Übertragung auszugeben, hängt von der Anzahl der enthaltenen UTXOs ab: Jede Zusammenführung ist eine Solana-Transaktion mit einem ZK-Beweis und wandelt bis zu 36 UTXOs in ein UTXO um. Da das Ergebnis der Zusammenführung deterministisch ist, werden die Zusammenführungsbeweise und der Übertragungsbeweis parallel erzeugt.

Beispiel für die Verwendung einer Zusammenführungsanweisung

Deine Anwendung kann UTXOs zu zwei Zeitpunkten zusammenführen:
  • Beim Synchronisieren des privaten Guthabens: beim Entsperren des Wallets, Öffnen des privaten Wallets, Fortsetzen der App, Wiederherstellen der Netzwerkverbindung, bei einer Lücke im stream oder beim Wiederherstellen des Wallets.
  • Vor einer Übertragung: wenn die Übertragung mehr als 36 UTXOs benötigt.
Zusammenführungen werden ohne Benutzersignatur ausgeführt. Benutzerdefinierte Rings legen ihre eigenen Berechtigungen für Zusammenführungen fest. Wenn du das eingebettete private Wallet verwendest, erfolgt die Zusammenführung automatisch im Hintergrund.
Ein privates Wallet enthält beispielsweise 1.296 USDC in 1.296 UTXOs, nachdem es 1.296 private Übertragungen über jeweils 1 USDC empfangen hat. Eine Übertragung gibt höchstens 36 UTXOs aus. Daher gibt das Wallet das Guthaben in zwei Schritten aus:
  1. 36 Zusammenführungstransaktionen werden parallel ausgeführt und erstellen 36 UTXOs über jeweils 36 USDC.
  2. Eine Übertragung mit 36 Eingaben gibt das gesamte Guthaben von 1.296 USDC aus.

UTXO-Parallelität

Benutzer können private Guthaben ausgeben, sobald die Transaktionen final sind. Ein privates Guthaben kann parallel ausgegeben werden, wenn es auf mehrere UTXOs aufgeteilt ist. Jedes UTXO kann gleichzeitig in einer separaten Transaktion ausgegeben werden. Ein Guthaben aus drei UTXOs über jeweils 100 USDC kann beispielsweise gleichzeitig drei Übertragungen von bis zu 100 USDC finanzieren. Das Wallet wählt aus, welche UTXOs ausgegeben werden. Alices drei UTXOs über jeweils 100 USDC finanzieren gleichzeitig drei Übertragungen, ein UTXO pro Übertragung. Ein einzelnes UTXO kann nur einmal ausgegeben werden. Die Durchsatzgrenzen des Protokolls findest du unter State Merkle Tree und Forester.

Mehr erfahren

Overview

Rings, Datenschutzgarantien und Transaktionsablauf.

Architecture

So interagieren Wallets, RPC-Dienste und Solana-Programme.

Encryption and Privacy Guarantees

So werden Assets verschlüsselt und diese Rolle spielt das abgeschirmte Keypair.

Custom Enterprise Rings

Erfahre, wie du einen benutzerdefinierten Ring konfigurierst.

Nicht gefunden, wonach du gesucht hast?

Melde dich! Telegram | E-Mail | Kontakt