Skip to main content

Einführung in Ringe

Jede Transaktion auf Solana ist öffentlich lesbar: Adressen, Salden und Übertragungshistorie sind für jeden sichtbar. Ringe verschlüsseln On-Chain-Salden und sind standardmäßig immer nicht-kustodial:
  • In vertraulichen Ringen sind das Asset und der Betrag privat, während Sender und Empfänger sichtbar bleiben.
  • In anonymen Ringen sind das Asset, der Betrag, Sender und Empfänger privat.
Zwei Solana-Transaktionskarten nebeneinander. Die vertrauliche Karte zeigt den Transaktions-Hash, den Sender und den Empfänger, während das Asset und der Betrag geschwärzt sind. Die anonyme Karte zeigt nur den Transaktions-Hash; der Sender, das Asset, der Betrag und der Empfänger sind alle geschwärzt. Der Transaktions-Hash bleibt bei beiden öffentlich. Es gibt verschiedene Arten von Ringen:
  1. Der Standardring ist zulassungsfrei und vertraulich. Er verschlüsselt Asset und Betrag, kann von jedem verwendet werden und hat keine benutzerdefinierten Richtlinienkontrollen.
  2. Benutzerdefinierte Ringe sind Solana-Programme, die Privatsphäre auf Solana programmierbar machen, ähnlich wie Token-2022. Ein benutzerdefinierter Ring kann vertraulich oder anonym mit benutzerdefinierter Richtlinie, Berichterstattung und Sichtbarkeitsregeln sein.
Für die meisten Anwendungen empfehlen wir den zulassungsfreien, vertraulichen Standardring. Für benutzerdefinierte Richtlinien- und Compliance-Kontrollen, kontaktieren Sie uns, um mit einem benutzerdefinierten Ring zu beginnen.
Private Salden, die als gestrichelte On-Chain-Zone mit zwei Ringen dargestellt sind. Der Standardring ist vertraulich, selbstverwaltet und zulassungsfrei. Der benutzerdefinierte Ring ist vertraulich oder anonym, selbstverwaltet und fügt benutzerdefinierte Richtlinien und Compliance hinzu. Eine private Übertragung verbindet die Ringe, und jeder einzahlt in und zieht aus einer darunter liegenden Solana Public Balances-Schicht ab.

Benutzerdefinierte Ringe sind programmierbar

Benutzerdefinierte Ringe sind einfache Solana-Programme, die Privatsphäre programmierbar machen und Funktionen ähnlich wie Token-2022 bieten. Ein benutzerdefinierter Ring kann vollständig benutzerdefinierte Regeln für Übertragungen und Sichtbarkeit/Auditing definieren.
Ring-Autoritäten werden bei der Erstellung des Rings erklärt, sodass Benutzer die Richtlinie überprüfen können, bevor sie einen Ring wählen. Der Standardring ist zulassungsfrei und hat keine benutzerdefinierte Autorität oder Auditor.
Wenn Sie Ihren eigenen benutzerdefinierten Ring einrichten möchten, kontaktieren Sie uns und wir richten Sie ein. Sie können entweder Ihre eigene Compliance mitbringen oder Helius’ verwaltete KYC- und Sanktionsprüfungs-Lösung nutzen.

Benutzerabläufe und Datenschutzgarantien

Transaktionen mit Helius Privacy werden nativ On-Chain ausgeführt und mit anderen Solana-Programmen in einer einzigen Transaktion kombiniert. Benutzer können in einen Ring eintreten, innerhalb eines Rings privat übertragen oder einen Ring verlassen: 1. Einzahlung oder On-Ramp. Benutzer senden Tokens von einem öffentlichen Solana-Saldo oder einem Fiat-Saldo direkt zu einem privaten Saldo. 2. Private Übertragung. Benutzer senden Tokens zwischen privaten Salden im gleichen Ring oder zu einem anderen. 3. Abheben oder Off-Ramp. Benutzer senden Tokens von einem privaten zu einem öffentlichen Solana-Saldo oder direkt zu einem Fiat-Saldo. Diagramm des Ring-Lebenszyklus. Ein öffentlicher Saldo von 100 USDC wird in einen Ring eingezahlt und ein Fiat-Saldo von USD / EUR / ... on-rampt in denselben Ring, Gelder bewegen sich zwischen zwei privaten Salden durch private Übertragung, dann abgezogen zu einem öffentlichen Saldo oder off-ramp zu einem Fiat-Saldo. Benutzer senden Tokens an eine Solana-Wallet-Adresse, wie sie es mit öffentlichen Salden tun. Die Privacy-API leitet die Übertragung automatisch an die Private Wallet weiter, wenn der Empfänger eine besitzt. Andernfalls ist die Übertragung eine Abhebung an die öffentliche Adresse des Empfängers. Jeder kann auf ein beliebiges Private Wallet einzahlen, indem er nur die öffentliche Wallet-Adresse des Empfängers kennt. Wenn die App des Senders keine Privatsphäre unterstützt, erhält der Empfänger die Mittel öffentlich und kann sie in einem zweiten Schritt in seinen eigenen privaten Saldo verschlüsseln.

Einzahlung in einen privaten Saldo: Was ist privat

Benutzer können auf zwei Arten in einen privaten Saldo einzahlen:
  1. On-Ramp von einem Fiat-Saldo zu einem privaten Krypto-Saldo
  2. Einzahlung von einem öffentlichen zu einem privaten Krypto-Saldo

Private Übertragung: Was ist privat

Benutzer können auf zwei Arten eine private Übertragung senden:
  1. Übertragung im gleichen Ring
  2. Übertragung zu einem anderen Ring
Für die meisten Anwendungen empfehlen wir den zulassungsfreien, vertraulichen Standardring. Für benutzerdefinierte Richtlinien- und Compliance-Kontrollen, kontaktieren Sie uns, um mit einem benutzerdefinierten Ring zu beginnen.

Abheben von einem privaten Saldo: Was ist privat

Benutzer können auf zwei Arten von einem privaten Saldo abheben:
  1. Off-Ramp von privatem Krypto zu einem Fiat-Saldo
  2. Abheben von privatem Krypto zu einem öffentlichen Krypto-Saldo

Transaktionsfluss auf hoher Ebene

Eine private Übertragung verhält sich ähnlich wie öffentliche Übertragungen und wird in einer einzigen Solana-Transaktion ausgeführt.
  1. Der SOL- oder SPL-Saldo des Benutzers wird On-Chain verschlüsselt.
  2. Verschlüsselter Zustand abrufen und lokal entschlüsseln oder ein delegierter Anbieter entschlüsselt und stellt den entschlüsselten Zustand bereit.
  3. Das Wallet legt Betrag und Empfänger fest und fordert einen ZK-Nachweis an.
  4. Der RPC-Anbieter generiert standardmäßig den ZK-Nachweis und gibt ihn zurück. Ein benutzerdefinierter Ring erfordert auch einen Richtliniennachweis.
  5. Das Wallet erstellt die Solana-Transaktion. ZK-Nachweise werden verifiziert, ohne den verschlüsselten Zustand offenzulegen. Die aufgerufenen Programme und wer unterzeichnet und einreicht, hängen vom Ring ab:
  1. Die App verfolgt den Status über den Solana-Transaktions-Hash.

Private Wallet

Benutzer halten ihren verschlüsselten Saldo in einer Private Wallet. Die Private Wallet erhält Übertragungen an der öffentlichen Solana-Adresse des Benutzers, dient als die inbox. So gibt der Sender immer die Solana-Adresse des Empfängers ein, wie er es bei öffentlichen Übertragungen tut.

Erstellung einer Private Wallet

Bei der Erstellung einer Private Wallet wird die Solana-Adresse in einem On-Chain-Register registriert. Das Register ordnet eine Solana-Adresse einer zu. Übertragungen werden im Hintergrund an die geschützte Adresse verschlüsselt. Mehrere Solana-Adressen können keine gemeinsame geschützte Adresse teilen. Jeder Registereintrag ist ein PDA, der vom verwaltet wird, das jeder nachschlagen kann, um zu sehen, ob eine Solana-Adresse private Übertragungen empfangen kann. Benutzer-Wallet zeigt zwei öffentliche Solana-Wallets und eine Private Wallet. Ein Posteingangspfeil verbindet den öffentlichen Schlüssel von Public Wallet A mit der geschützten Adresse der Private Wallet.
In Ihrer Wallet-App können Sie Ihren Benutzern erlauben, private Wallets nur für einen dedizierten “Private Wallet”-öffentlichen Schlüssel zu erstellen, oder für jeden öffentlichen Schlüssel.

Übertragungen zu einer Private Wallet

Bei jeder Übertragung prüft die Privacy-API die Wallet-Adresse im On-Chain-Register, um zu überprüfen, ob der Empfänger über eine Private Wallet verfügt. Bei einem Treffer wird die geschützte Adresse im Hintergrund verwendet, um die Übertragung zu verschlüsseln.
Wenn der Empfänger einer privaten Übertragung keine Private Wallet hat, löst die Privacy-API die Übertragung als privat-zu-öffentlich-Abhebung.Wir empfehlen, im UI eine separate Benutzerunterschrift anzufordern, um sicherzustellen, dass der Benutzer nicht versehentlich auf ein öffentliches Guthaben abhebt.

Schlüsselverwaltung

Eine Private Wallet fügt einer Solana-Wallet von Ihrem Solana-Schlüsselpaar ein geschütztes Schlüsselpaar hinzu. Das geschützte Schlüsselpaar ist ein Bündel der Signatur-, Nullifikations- und Ansichtsschlüssel. Es ist kein Solana-Schlüsselpaar. Die geschützte Adresse sind die öffentlichen Schlüssel des geschützten Schlüsselpaares. Übertragungen werden an diese verschlüsselt.

Erstellen eines geschützten Schlüsselpaares

Eine Wallet kann das geschützte Schlüsselpaar auf zwei Arten erstellen.
  1. Schlüssel aus der Seed-Phrase ableiten.
    • Der empfohlene Ansatz für seed-basierte Wallets.
    • Vertrauliche Ringe: der Signaturschlüssel ist derselbe Ed25519-Schlüssel, den eine Solana-Wallet aus diesem Seed ableitet. Die Nullifikations- und Ansichtsschlüssel sind zusätzliche Schlüssel, die aus demselben Seed abgeleitet werden.
    • Benutzerdefinierte anonyme Ringe: der Signaturschlüssel ist ein zusätzlicher P-256-Schlüssel, der aus dem Wallet-Seed abgeleitet wird.
    • Sie können das geschützte Schlüsselpaar immer auf dieselbe Weise wiederherstellen, wie Sie die Solana Wallet wiederherstellen.
  2. Schlüssel aus einer fixen Nachricht mit dem vorhandenen Solana-Schlüssel ableiten.
    • Solana-Signaturen sind deterministisch, daher produziert dasselbe Solana-Schlüsselpaar immer dasselbe geschützte Schlüsselpaar. Die App erhält nie den privaten Schlüssel.
    • Der empfohlene Ansatz für Tests und Wallets, die keine Seed-Phrase verwenden. Das integrierende Wallet muss sicherstellen, dass die Signatur nicht an Dritte weitergegeben wird.

Integration eines geschützten Schlüsselpaares

Eine Wallet kann das geschützte Schlüsselpaar selbst über die native Wallet-Integration halten. Mit der Embedded Privacy Wallet hält ein Wallet-Anbieter das geschützte Schlüsselpaar und führt seine Schlüsseloperationen stattdessen durch.

Entschlüsselungsmodi und Wallet-Synchronisation

Nur der Besitzer kann einen privaten Wallet-Saldo mit einem Ansichtsschlüssel entschlüsseln. Für selektive Offenlegung kann ein Besitzer einen Ansichtsschlüssel mit einem Auditor teilen, sodass der Auditor Aktivitäten lesen kann, ohne ausgeben zu können. In benutzerdefinierten Ringen kann die Richtlinie einen Auditor erklären, der alle Salden aus diesem benutzerdefinierten Ring entschlüsseln kann. Vertrauliche Ringe (der Standardring und vertrauliche benutzerdefinierte Ringe) unterstützen lokale und delegierte Entschlüsselung. Anonyme Ringe (nur benutzerdefinierte Ringe) unterstützen nur delegierte Entschlüsselung.
Eine Wallet sollte Salden entschlüsseln und aktualisieren, wo immer sie Backfills ausführt: beim Entsperren der Wallet, Öffnen der privaten Wallet, Fortsetzen der App, erneuter Netzwerkverbindung, Stream-Lücke oder Wiederherstellung der Wallet.

Lokale Entschlüsselung

Im lokalen Entschlüsselungsmodus entschlüsselt und synchronisiert die Wallet Salden und Verlauf lokal. Helius-Server erhalten nicht die mnemonische Phrase, den Seed, den privaten Signaturschlüssel, die privaten Ansichtsschlüssel oder das Nullifikator-Geheimnis.

Delegierte Entschlüsselung

Im delegierten Entschlüsselungsmodus teilen die Wallet und der ausgewählte Anbieter einen Ansichtsschlüssel. Dies ermöglicht es dem Anbieter, Salden und Verlauf zu entschlüsseln, gewährt jedoch keine Ausgabeberechtigung. Eine Wallet kann auch vorherige Ansichtsschlüssel teilen, wenn sie den Anbieter autorisiert, historische Aktivitäten zu synchronisieren. Auditorenzugriff ist getrennt von delegierter Entschlüsselung. Ein Auditor erhält Richtlinien-definierte Ring-Sichtbarkeit, während ein delegierter Anbieter Wallet-bezogenen Synchronisationszugriff erhält.

Indexer dient verschlüsseltem Zustand

So wie öffentliche Wallets auf einen Solana RPC angewiesen sind, verlassen sich Private Wallets auf einen Indexer. Der Indexer dient dem verschlüsselten Zustand, den eine Wallet benötigt, um Salden zu lesen und private Transaktionen zu erstellen. Standardmäßig ist der Indexer über die zugänglich; jeder kann auch einen eigenen Indexer zulassungsfrei als Fallback betreiben.

Private Wallet-Saldo

Der Private Wallet-Saldo wird On-Chain in privaten Solana Token Accounts als UTXOs (unspent transaction outputs) gehalten, nicht in einem Solana Token Account. Der Standardring und alle benutzerdefinierten Ringe speichern private Salden in einem Merklebaum. Der Private Wallet-Saldo ist die Summe aller von einer Private Wallet gehaltenen UTXOs. Solana-Programme können UTXOs ähnlich wie reguläre Solana-Konten besitzen. Diese Dokumentation verwendet Private Solana Token Accounts und UTXOs austauschbar. Eine Private Wallet ist durch gestrichelte Linien mit mehreren UTXO-Notizen verbunden, von denen jede einen Betrag eines Assets hält. Der Wallet-Saldo ist die Summe der Notizen.
Für das Benutzererlebnis macht es keinen Unterschied, ob das Guthaben in UTXOs oder Solana Token Accounts gehalten wird.Auf technischer Ebene reduziert das Ausgeben eines öffentlichen Saldos das amount-Feld in einem Solana Token Account. Das Ausgeben eines privaten Saldos überschreibt nicht das amount-Feld eines UTXO. Stattdessen nutzen private Transaktionen bestehende UTXOs als Eingaben (automatisch vom SDK ausgewählt), verwenden die Eingaben und erstellen neue Ausgaben für den Empfänger und für den verbleibenden Saldo des Senders.Zum Beispiel hat Alice 50 USDC und sendet Bob 35.
  • In einem Solana Token Account geht ihr amount-Feld von 50 auf 15, und Bobs steigt um 35. Die Zahl ändert sich im Feld.
  • Mit UTXOs hält Alice einen 50 USDC-Schein. Die Transaktion gibt ihn aus und erstellt zwei neue Scheine: einen 35 USDC-Schein für Bob und einen 15 USDC-Wechselschein für Alice. Ihr alter 50-Schein ist jetzt ausgegeben.
Alice sendet Bob 35 von ihren 50 USDC. Auf einem Solana Token Account ändert sich das Betrag-Feld von 50 auf 15. Mit UTXOs wird Alices einzelne 50 USDC-Schuld ausgegeben und zwei neue Schulden erstellt: eine 35 USDC-Schuld für Bob und eine 15 USDC-Wechselschuld für Alice.
Bei einer Einzahlung in einen privaten Saldo von SOL- und SPL-Assets verwahrt ein Interface-PDA, der vom Solana Privacy Program verwaltet wird, Tokens und erstellt UTXOs mit dem Benutzer als Eigentümer.Bei einer Abhebung zu einem öffentlichen Saldo werden bestehende UTXOs als ausgegeben markiert und Tokens an die Solana Token Accounts freigegeben.
Eine Private Wallet kann gleichzeitig Salden in mehreren Ringen halten, ohne Begrenzung der Anzahl der Ringe. Welchem Ring ein Saldo angehört, ist keine Eigenschaft der Wallet. Es ist eine Eigenschaft jedes UTXO, die in seinem policy_program_id-Feld gespeichert ist.

Private Solana Token Accounts

Ein privater Solana Token Account ist ein UTXO, das sich ähnlich wie ein Solana Token Account verhält, mit zwei wesentlichen Unterschieden:
  • ein privater Solana Token Account erfordert bei der Erstellung keine Mietenfreistellung, und
  • sein Saldo ist On-Chain verschlüsselt.
Dennoch speichern private Solana Token Accounts dieselben Daten, wie zum Beispiel:
  • Asset: die Prägewährung, die der UTXO Einheiten hält. SOL ist die Standard-Prägeadresse. Das Asset kann SOL oder ein beliebiges SPL- oder Token-2022-Asset sein.
  • Menge: die Anzahl der Einheiten von asset, die die Schuld hält, in der kleinsten Einheit des Assets.
  • Programm- und Richtliniendaten: optionale Daten für die konfigurierte Ringrichtlinie, um Token-2022-ähnliche Funktionen hinzuzufügen
Ein privater Solana Token Account. Das Solana Privacy Program besitzt ein privates Token-Konto, das sich in seine PrivateAccount-Felder erweitert: Besitzer, Asset, Menge, Richtliniendaten und Richtlinienprogramm-ID.
Ein Solana Token Account. Das Token-Programm besitzt ein Token-Konto, erweitert zu seinen AccountInfo-Feldern (Daten, ausführbar, Lamports, Besitzer) und das Datenfeld erweitert zu Kontodaten (Prägemünze, Besitzer, Menge).

Zu Gleichzeitigkeit

Benutzer können private Salden ausgeben, sobald Transaktionen abgeschlossen sind. Nämlich kann der Saldo eines Schlüsselpaares gleichzeitig verwendet werden, wenn er zwischen einer Anzahl von UTXOs aufgeteilt ist. Das Wallet wählt aus, welche UTXOs ausgegeben werden sollen. Ein Merkle-Baum speichert den privaten Zustand für den zulassungsfreien Standardring und alle benutzerdefinierten Ringe. Der Baum wird in einem beschreibbaren Solana-Konto gespeichert. Private Übertragungen, die auf dieses Konto schreiben, teilen Solanas Limit von 12 Millionen CU pro Konto-Sperre pro Block. Eine private Übertragung verbraucht ungefähr 220.000 CU. Ein Baum unterstützt daher ungefähr 54 private Übertragungen pro Block oder ungefähr 130 Transaktionen pro Sekunde bei aktuellen Solana-Blockzeiten von etwa 400 Millisekunden. Das Protokoll kann mehr Bäume hinzufügen, um den Durchsatz zu erhöhen. Jeder Baum ist ein separates beschreibbares Konto mit seinem eigenen Rechenbudget pro Konto, sodass Transaktionen auf verschiedenen Bäumen nicht um dasselbe Sperrbudget konkurrieren.

Zur Nachweiserzeugungszeit

Zero-Knowledge-Nachweise werden derzeit von einem Proverserver generiert; ein typischer vertraulicher Transfer wird in Bruchteilen von Sekunden bewiesen; lokale Bewiesungen für vertrauliche Ringe sind geplant. Die Nachweiszeit wird aktiv optimiert, um ein reibungsloses Benutzererlebnis zu gewährleisten.

Begriffe