> ## Documentation Index
> Fetch the complete documentation index at: https://www.helius.dev/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Konzepte

> Verstehen Sie, wie Helius Privacy funktioniert, einschließlich Benutzerabläufe, was bei einer Übertragung öffentlich oder privat bleibt, und Ringe mit anpassbarer Richtlinie.

## 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.

<img src="https://mintcdn.com/helius/ANceN_N6YhA2y60D/images/privacy/transaction-visibility-cards.svg?fit=max&auto=format&n=ANceN_N6YhA2y60D&q=85&s=d775dd0d4ebcf7b299ef0f3ccfb025ca" alt="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." width="2320" height="540" data-path="images/privacy/transaction-visibility-cards.svg" />

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.

<Info>
  Für die meisten Anwendungen empfehlen wir den zulassungsfreien, vertraulichen Standardring.
  Für benutzerdefinierte Richtlinien- und Compliance-Kontrollen, [kontaktieren Sie uns](https://www.helius.dev/contact), um mit einem benutzerdefinierten Ring zu beginnen.
</Info>

<img src="https://mintcdn.com/helius/iNBk0QZ3vdaUiFW5/images/privacy/privacy-network.svg?fit=max&auto=format&n=iNBk0QZ3vdaUiFW5&q=85&s=af61b324d07f1184da1f3912d9f050fb" alt="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." width="850" height="540" data-path="images/privacy/privacy-network.svg" />

### 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.

<Accordion title="Beispielrichtlinien für benutzerdefinierte Ringe">
  | Richtlinie                       | Beispiel                                                                                                     |
  | -------------------------------- | ------------------------------------------------------------------------------------------------------------ |
  | Zugelassene Assets               | Nur USDC oder eine bestimmte ausgegebene Stablecoin                                                          |
  | Übertragungsgrenzen              | Zusätzliche Genehmigung über einem Schwellenwert erforderlich                                                |
  | Mitunterzeichnung                | Compliance-Genehmigung für ausgewählte Zahlungen erforderlich                                                |
  | Zulassungslisten                 | Übertragungen nur zu genehmigten Konten, Händlern oder Ringen zulassen                                       |
  | Sperrlisten                      | Gesperrte oder riskante Ziele blockieren                                                                     |
  | Einfrieren/Auftauen              | Ein Saldo einfrieren während einer laufenden Untersuchung                                                    |
  | Permanent delegiert              | Ermöglicht einer konfigurierten Autorität, Gelder unter Richtlinie zu bewegen                                |
  | Auditorensichtbarkeit            | Compliance-, Buchhaltungs- oder Regulierungsbehörden können Ringaktivitäten einsehen                         |
  | Ringübergreifende Regeln         | Bewegung zwischen bestimmten Ringen erlauben oder blockieren                                                 |
  | Abzugsregeln                     | Öffentliche Abhebungen einschränken oder Genehmigung erforderlich                                            |
  | Unterstützung für Smart Accounts | Nativen Gebrauch mit Smart Accounts ermöglichen                                                              |
  | Kontowiederherstellung           | Ermöglicht einer konfigurierten Autorität oder einer alternativen Identität die Wiederherstellung von Konten |
</Accordion>

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.

<Tip>
  Wenn Sie Ihren eigenen benutzerdefinierten Ring einrichten möchten, [kontaktieren Sie uns](https://www.helius.dev/contact) und wir richten Sie ein.
  Sie können entweder Ihre eigene Compliance mitbringen oder Helius’ verwaltete KYC- und Sanktionsprüfungs-Lösung nutzen.
</Tip>

## 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.

<img src="https://mintcdn.com/helius/df3Lmw7POmPkuUJN/images/privacy/privacy-rings-lifecycle.svg?fit=max&auto=format&n=df3Lmw7POmPkuUJN&q=85&s=54d057b2674ad3a194575858d35db167" alt="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." width="1420" height="240" data-path="images/privacy/privacy-rings-lifecycle.svg" />

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

<Tabs>
  <Tab title="On-ramp from fiat balance">
    | Field                    | Visibility                                                  | Why                                                                                                                                                                                                                                                                                                   |
    | ------------------------ | ----------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
    | Fiat balance and payment | Not onchain                                                 | The fiat payment is not onchain                                                                                                                                                                                                                                                                       |
    | Asset                    | Private                                                     | The asset is encrypted onchain                                                                                                                                                                                                                                                                        |
    | Amount                   | Private                                                     | The transferred amount is encrypted onchain                                                                                                                                                                                                                                                           |
    | Onramp Provider          | Public in a confidential Ring, private in an anonymous Ring | In a confidential Ring the wallet address of the provider is visible. An anonymous Ring uses a relayer, so the public ledger does not reveal the source private wallet.                                                                                                                               |
    | User wallet address      | Public in a confidential Ring, private in an anonymous Ring | In a confidential Ring the user wallet address is visible onchain. The user address used for the onramp cannot be linked to the user, if it is new and is not later tied to a known wallet address by a confidential transfer. In an anonymous Ring, the public ledger does not reveal the recipient. |
  </Tab>

  <Tab title="Deposit from public crypto balance">
    | Field                      | Visibility | Why                                                |
    | -------------------------- | ---------- | -------------------------------------------------- |
    | Source public wallet       | Public     | The source wallet address is visible onchain       |
    | Asset                      | Public     | The asset is visible onchain                       |
    | Amount                     | Public     | The deposited amount is visible onchain            |
    | Destination wallet address | Public     | The destination wallet address is visible onchain  |
    | Resulting private balance  | Private    | The resulting private balance is encrypted onchain |
  </Tab>
</Tabs>

### 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

<Info>
  Für die meisten Anwendungen empfehlen wir den zulassungsfreien, vertraulichen Standardring.
  Für benutzerdefinierte Richtlinien- und Compliance-Kontrollen, [kontaktieren Sie uns](https://www.helius.dev/contact), um mit einem benutzerdefinierten Ring zu beginnen.
</Info>

<Tabs>
  <Tab title="Permissionless Confidential Ring">
    | Field                 | Visibility | Why                                                                  |
    | --------------------- | ---------- | -------------------------------------------------------------------- |
    | Asset                 | Private    | The asset is encrypted onchain                                       |
    | Amount                | Private    | The transferred amount is encrypted onchain                          |
    | Source private wallet | Public     | In a confidential Ring the source private wallet is visible onchain. |
    | Recipient             | Public     | In a confidential Ring the recipient is visible onchain.             |
  </Tab>

  <Tab title="Custom Rings">
    Transfers from and within a ring reveal the program ID of the custom Ring.

    A balance in a Custom Ring can exit to an SPL token account, to the Default Ring, or to another Ring, as long as the source Ring's policy permits it.
    The default Ring is permissionless and does not have a policy or authority.

    One transaction can combine balances from the Default Ring and one Custom Ring. A transfer between two Custom Rings routes through the Default Ring.

    | Private transfer       | Custom confidential Rings | Custom anonymous Rings                                                                                      | Default confidential to or from Custom confidential | Confidential (Default or Custom) to Custom anonymous | Custom anonymous to confidential (Default or Custom)                                                        |
    | ---------------------- | ------------------------- | ----------------------------------------------------------------------------------------------------------- | --------------------------------------------------- | ---------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- |
    | Amount                 | Private                   | Private                                                                                                     | Private                                             | Private                                              | Private                                                                                                     |
    | Asset                  | Private                   | Private                                                                                                     | Private                                             | Private                                              | Private                                                                                                     |
    | Source private wallet  | Public                    | Private. A relayer submits the transaction, so the public ledger does not reveal the source private wallet. | Public                                              | Public                                               | Private. A relayer submits the transaction, so the public ledger does not reveal the source private wallet. |
    | Recipient              | Public                    | Private                                                                                                     | Public                                              | Private                                              | Public                                                                                                      |
    | Custom Ring program ID | Public                    | Public                                                                                                      | Public                                              | Public                                               | Public                                                                                                      |
  </Tab>
</Tabs>

### 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

<Tabs>
  <Tab title="Off-ramp to fiat balance">
    | Field               | Visibility                                                  | Why                                                                                                                                                                                                                                                                                                        |
    | ------------------- | ----------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
    | Fiat payout         | Not onchain                                                 | The fiat payout is not onchain                                                                                                                                                                                                                                                                             |
    | Asset               | Private                                                     | The asset is encrypted onchain                                                                                                                                                                                                                                                                             |
    | Amount              | Private                                                     | The transferred amount is encrypted onchain                                                                                                                                                                                                                                                                |
    | Offramp Provider    | Public in a confidential Ring, private in an anonymous Ring | In a confidential Ring an observer can see that a user offramped with this Offramp Provider. In an anonymous Ring the public ledger does not reveal sender and recipient.                                                                                                                                  |
    | User wallet address | Public in a confidential Ring, private in an anonymous Ring | In a confidential Ring the user wallet address is visible onchain. Another wallet address cannot be linked to this address if this address is new and is not later tied to a known wallet address by a confidential transfer. In an anonymous Ring the public ledger does not reveal sender and recipient. |
  </Tab>

  <Tab title="Withdraw to public crypto balance">
    | Field                     | Visibility | Why                                                                  |
    | ------------------------- | ---------- | -------------------------------------------------------------------- |
    | Source private wallet     | Public     | In a confidential Ring the source private wallet is visible onchain. |
    | Asset                     | Public     | The asset is visible onchain                                         |
    | Amount                    | Public     | The withdrawn amount is visible onchain                              |
    | Destination public wallet | Public     | The destination wallet address is visible onchain                    |
    | Resulting public balance  | Public     | The resulting public balance is visible onchain                      |
    | Remaining private balance | Private    | The remaining balance is encrypted onchain                           |
  </Tab>
</Tabs>

## Transaktionsfluss auf hoher Ebene

Eine private Übertragung verhält sich ähnlich wie öffentliche Übertragungen und wird in einer einzigen Solana-Transaktion ausgeführt.

<Tabs>
  <Tab title="Private Übertragung">
    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:

    |                       | Zulassungsfreier vertraulicher Ring                               | Benutzerdefinierter vertraulicher Ring                            | Benutzerdefinierter anonymer Ring                                       |
    | --------------------- | ----------------------------------------------------------------- | ----------------------------------------------------------------- | ----------------------------------------------------------------------- |
    | Aufgerufene Programme | Solana Privacy Program                                            | Benutzerdefiniertes Ring-Programm und Solana Privacy Program      | Benutzerdefiniertes Ring-Programm und Solana Privacy Program            |
    | Unterzeichner         | Der Sender unterzeichnet. Ein Gas-Sponsor kann die Gebühr zahlen. | Der Sender unterzeichnet. Ein Gas-Sponsor kann die Gebühr zahlen. | Ein Relayer, sodass der Sender nicht mit der Transaktion verknüpft ist. |

    6. Die App verfolgt den Status über den Solana-Transaktions-Hash.

    <Tabs sync={false}>
      <Tab title="Zulassungsfreier vertraulicher Ring">
        ```mermaid theme={"system"}
        %%{init: {
          'theme': 'base',
          'themeVariables': {
            'lineColor':           '#FF6B35',
            'primaryTextColor':    '#737373',
            'primaryBorderColor':  '#9CA3AF',
            'actorBkg':            '#FFFFFF',
            'actorBorder':         '#9CA3AF',
            'actorTextColor':      '#737373',
            'signalColor':         '#FF6B35',
            'signalTextColor':     '#737373',
            'labelBoxBkgColor':    '#FF6B351F',
            'labelBoxBorderColor': '#FF6B35',
            'noteBkgColor':        '#F5F5F5',
            'noteTextColor':       '#737373',
            'noteBorderColor':     '#9CA3AF'
          }
        }}%%
        sequenceDiagram
            participant Wallet
            participant RPC as RPC Provider
            participant Solana

            rect rgba(255, 107, 53, 0.06)
                Note left of Wallet: Local
                Wallet->>RPC: Fetch encrypted state
                RPC-->>Wallet: Encrypted state
                Note over Wallet: Decrypt locally
            end
            rect rgba(255, 107, 53, 0.06)
                Note left of Wallet: Delegated
                Wallet->>RPC: Get private balance
                Note over RPC: Decrypt and serve decrypted state
                RPC-->>Wallet: Decrypted state
            end

            Note over Wallet: Set amount and recipient
            Wallet->>RPC: Request ZK proof
            Note over RPC: Generate ZK proof
            RPC-->>Wallet: ZK proof
            Note over Wallet: Build transaction, sign

            Wallet->>RPC: Submit Transaction
            RPC->>Solana: Forward transaction
            Note over Solana: Verify signatures
            Note over Solana: CPI Solana Privacy Program
            Note over Solana: Verify ZK proof
            RPC-->>Wallet: Transaction signature
        ```
      </Tab>

      <Tab title="Benutzerdefinierter vertraulicher Ring">
        ```mermaid theme={"system"}
        %%{init: {
          'theme': 'base',
          'themeVariables': {
            'lineColor':           '#FF6B35',
            'primaryTextColor':    '#737373',
            'primaryBorderColor':  '#9CA3AF',
            'actorBkg':            '#FFFFFF',
            'actorBorder':         '#9CA3AF',
            'actorTextColor':      '#737373',
            'signalColor':         '#FF6B35',
            'signalTextColor':     '#737373',
            'labelBoxBkgColor':    '#FF6B351F',
            'labelBoxBorderColor': '#FF6B35',
            'noteBkgColor':        '#F5F5F5',
            'noteTextColor':       '#737373',
            'noteBorderColor':     '#9CA3AF'
          }
        }}%%
        sequenceDiagram
            participant Wallet
            participant RPC as RPC Provider
            participant Solana

            rect rgba(255, 107, 53, 0.06)
                Note left of Wallet: Local
                Wallet->>RPC: Fetch encrypted state
                RPC-->>Wallet: Encrypted state
                Note over Wallet: Decrypt locally
            end
            rect rgba(255, 107, 53, 0.06)
                Note left of Wallet: Delegated
                Wallet->>RPC: Get private balance
                Note over RPC: Decrypt and serve decrypted state
                RPC-->>Wallet: Decrypted state
            end

            Note over Wallet: Set amount and recipient
            Wallet->>RPC: Request ZK proof
            Note over RPC: Generate ZK proof and policy proof
            RPC-->>Wallet: ZK proof and policy proof
            Note over Wallet: Build transaction, sign

            Wallet->>RPC: Submit Transaction
            RPC->>Solana: Forward transaction
            Note over Solana: Verify signatures
            Note over Solana: CPI Custom Ring Program
            Note over Solana: Verify policy ZK proof
            Note over Solana: CPI Solana Privacy Program
            Note over Solana: Verify SPP ZK proof
            RPC-->>Wallet: Transaction signature
        ```
      </Tab>

      <Tab title="Benutzerdefinierter anonymer Ring">
        ```mermaid theme={"system"}
        %%{init: {
          'theme': 'base',
          'themeVariables': {
            'lineColor':           '#FF6B35',
            'primaryTextColor':    '#737373',
            'primaryBorderColor':  '#9CA3AF',
            'actorBkg':            '#FFFFFF',
            'actorBorder':         '#9CA3AF',
            'actorTextColor':      '#737373',
            'signalColor':         '#FF6B35',
            'signalTextColor':     '#737373',
            'labelBoxBkgColor':    '#FF6B351F',
            'labelBoxBorderColor': '#FF6B35',
            'noteBkgColor':        '#F5F5F5',
            'noteTextColor':       '#737373',
            'noteBorderColor':     '#9CA3AF'
          }
        }}%%
        sequenceDiagram
            participant Wallet
            participant RPC as RPC Provider
            participant Relayer
            participant Solana

            rect rgba(255, 107, 53, 0.06)
                Note left of Wallet: Delegated
                Wallet->>RPC: Get private balance
                Note over RPC: Decrypt and serve decrypted state
                RPC-->>Wallet: Decrypted state
            end

            Note over Wallet: Set amount and recipient, sign
            Wallet->>RPC: Request ZK proof
            Note over RPC: Generate ZK proof and policy proof
            RPC-->>Wallet: ZK proof and policy proof
            Note over Wallet: Build transaction

            Wallet->>Relayer: Submit Transaction
            Relayer->>Solana: Forward transaction
            Note over Solana: Verify signatures
            Note over Solana: CPI Custom Ring Program
            Note over Solana: Verify policy ZK proof
            Note over Solana: CPI Solana Privacy Program
            Note over Solana: Verify SPP ZK proof
            Relayer-->>Wallet: Transaction signature
        ```
      </Tab>
    </Tabs>
  </Tab>

  <Tab title="Solana-Übertragung">
    1. Der SOL- oder SPL-Saldo des Benutzers ist öffentlich On-Chain.
    2. Das Wallet liest den öffentlichen Zustand, erstellt eine Übertragung und der Besitzer unterzeichnet.
    3. Die Solana-Laufzeit überprüft die Signaturen und ruft das System-Programm oder Token-Programm auf, das den öffentlichen Saldo aktualisiert.
    4. Die App verfolgt den Status über den Solana-Transaktions-Hash.

    ```mermaid theme={"system"}
    %%{init: {
      'theme': 'base',
      'themeVariables': {
        'lineColor':           '#FF6B35',
        'primaryTextColor':    '#737373',
        'primaryBorderColor':  '#9CA3AF',
        'actorBkg':            '#FFFFFF',
        'actorBorder':         '#9CA3AF',
        'actorTextColor':      '#737373',
        'signalColor':         '#FF6B35',
        'signalTextColor':     '#737373',
        'labelBoxBkgColor':    '#FF6B351F',
        'labelBoxBorderColor': '#FF6B35',
        'noteBkgColor':        '#F5F5F5',
        'noteTextColor':       '#737373',
        'noteBorderColor':     '#9CA3AF'
      }
    }}%%
    sequenceDiagram
        participant Wallet
        participant RPC
        participant Solana

        Wallet->>RPC: Get public balance
        RPC-->>Wallet: Public state
        Note over Wallet: Build transfer, owner signs
        Wallet->>RPC: sendTransaction
        RPC->>Solana: Forward transaction
        Note over Solana: Verify signatures
        Note over Solana: CPI System / Token Program
        Note over Solana: Update balance
        RPC-->>Wallet: Transaction signature
    ```
  </Tab>
</Tabs>

## 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.

| Vergleich               | Solana-Wallet            | Private Wallet               |
| ----------------------- | ------------------------ | ---------------------------- |
| Öffentlicher Bezeichner | Solana-Adresse           | Die gleiche Solana-Adresse   |
| On-Chain-Speicherung    | Öffentliche Token-Konten | Private Token-Konten (UTXOs) |

### 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 <Tooltip tip="Die geschützte Adresse ist kein Solana-Schlüsselpaar, sie wird deterministisch aus den Signatur-, Nullifikator- und Ansichtsschlüsseln abgeleitet.">geschützten Adresse</Tooltip> 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 <Tooltip tip="regyS5rkAcw2YzDJCmTwCTHs2s246FXxbmuRZ42u2PD">[Registry-Programm](https://orbmarkets.io/address/regyS5rkAcw2YzDJCmTwCTHs2s246FXxbmuRZ42u2PD)</Tooltip> verwaltet wird, das jeder nachschlagen kann, um zu sehen, ob eine Solana-Adresse private Übertragungen empfangen kann.

<img src="https://mintcdn.com/helius/NHXFc7ysJd1NoY9P/images/privacy/wallet-shape.svg?fit=max&auto=format&n=NHXFc7ysJd1NoY9P&q=85&s=7e96783047c79ed30c4e995623f197a6" alt="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." width="1120" height="570" data-path="images/privacy/wallet-shape.svg" />

<Info>
  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.
</Info>

### Ü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.

<Info>
  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.
</Info>

```mermaid theme={"system"}
%%{init: {
  'theme': 'base',
  'themeVariables': {
    'lineColor':           '#FF6B35',
    'primaryTextColor':    '#737373',
    'primaryBorderColor':  '#9CA3AF',
    'actorBkg':            '#FFFFFF',
    'actorBorder':         '#9CA3AF',
    'actorTextColor':      '#737373',
    'signalColor':         '#FF6B35',
    'signalTextColor':     '#737373',
    'labelBoxBkgColor':    '#FF6B351F',
    'labelBoxBorderColor': '#FF6B35',
    'noteBkgColor':        '#F5F5F5',
    'noteTextColor':       '#737373',
    'noteBorderColor':     '#9CA3AF'
  }
}}%%
sequenceDiagram
    participant User
    participant Privacy API
    participant Solana

    User->>Privacy API: Initiate Private Transfer
    Privacy API->>Solana: Look up Solana address
    rect rgba(255, 107, 53, 0.06)
        Note left of User: Recipient has a Private Wallet
        Solana-->>Privacy API: Registered
        Privacy API->>User: Request Signature
        User->>Privacy API: Sign private transfer
        Privacy API-->>Solana: Send Private Transfer
    end
    rect rgba(255, 107, 53, 0.06)
        Note left of User: Recipient has no Private Wallet
        Solana-->>Privacy API: Not Registered
        Privacy API->>User: Request Signature
        User->>Privacy API: Sign to Confirm Withdrawal
        Privacy API-->>Solana: Private-to-Public Withdrawal
    end
```

### Schlüsselverwaltung

Eine Private Wallet fügt einer Solana-Wallet von Ihrem Solana-Schlüsselpaar ein geschütztes Schlüsselpaar hinzu.

| Schlüssel                 | Solana-Wallet                             | Private Wallet                                               |
| ------------------------- | ----------------------------------------- | ------------------------------------------------------------ |
| Öffentlicher Schlüssel    | Zum Empfang von Übertragungen geteilt     | Zum Empfang von Übertragungen geteilt                        |
| Privater Schlüssel        | Zum Signieren von Transaktionen verwendet | Zum Signieren von Transaktionen verwendet                    |
| Seed-Phrase               | Stellt die Wallet wieder her              | Stellt die Wallet wieder her                                 |
| Geschütztes Schlüsselpaar | N/A                                       | Bündel der Signatur-, Nullifikations- und Ansichts-Schlüssel |

Das geschützte Schlüsselpaar ist ein Bündel der Signatur-, Nullifikations- und Ansichtsschlüssel. Es ist kein Solana-Schlüsselpaar.

| Schlüssel             | Vertrauliche Ringe                    | Benutzerdefinierte anonyme Ringe      |
| --------------------- | ------------------------------------- | ------------------------------------- |
| Signaturschlüssel     | Der Ed25519 des öffentlichen Wallets  | Der P-256 des privaten Wallets        |
| Nullifikatorschlüssel | Markiert UTXOs als ausgegeben         | Markiert UTXOs als ausgegeben         |
| Ansichtsschlüssel     | Read-only P-256. Entschlüsselt Salden | Read-only P-256. Entschlüsselt Salden |

Die geschützte Adresse sind die öffentlichen Schlüssel des geschützten Schlüsselpaares. Übertragungen werden an diese verschlüsselt.

```
ShieldedAddress = (signing_pk, nullifier_pk, viewing_pk)
```

#### 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](/docs/de/privacy/integration/wallet) halten.
Mit der [Embedded Privacy Wallet](/docs/de/privacy/integration/embedded-wallet) hält ein Wallet-Anbieter das geschützte Schlüsselpaar und führt seine Schlüsseloperationen stattdessen durch.

| Schlüsselverwaltung                                                | Wer hält das geschützte Schlüsselpaar | Wo seine Operationen durchgeführt werden  |
| ------------------------------------------------------------------ | ------------------------------------- | ----------------------------------------- |
| Native [Wallet-Integration](/docs/de/privacy/integration/wallet)        | Die Wallet                            | Auf dem Gerät                             |
| [Embedded Privacy Wallet](/docs/de/privacy/integration/embedded-wallet) | Ein Wallet-Anbieter                   | In der Infrastruktur des Wallet-Anbieters |

### 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.

| Modus     | Wo die Entschlüsselung stattfindet | Wer Zugriff auf Anzeigen hat | Wallet-Tradeoff                                                                           | Wer dies verwendet                                                             |
| --------- | ---------------------------------- | ---------------------------- | ----------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------ |
| Lokal     | In der Wallet                      | Nur Wallet                   | Beste Privatsphäre, aber erfordert lokalen Zustand und Synchronisationslebenszyklus       | Vertrauliche Ringe: der Standardring und vertrauliche benutzerdefinierte Ringe |
| Delegiert | Autorisierter RPC-Anbieter         | Wallet + Anbieter            | Weniger lokale Synchronisationsarbeit, aber der Anbieter kann Salden und Verlauf einsehen | Jeder Ring; der einzige Modus in anonymen benutzerdefinierten Ringen           |

<Info>
  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.
</Info>

#### 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 <Tooltip tip="https://devnet.helius-rpc.com/?api-key=<API_KEY>">Helius RPC URL</Tooltip> 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.

<img src="https://mintcdn.com/helius/KNGZoSuCXDUVm6yU/images/privacy/utxo-set-to-wallet.svg?fit=max&auto=format&n=KNGZoSuCXDUVm6yU&q=85&s=92c14cfcf72e56cbaff498a7b95c638b" alt="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." width="700" height="276" data-path="images/privacy/utxo-set-to-wallet.svg" />

<Accordion title="Salden in UTXOs vs. Solana-Konten">
  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.

  <Tabs>
    <Tab title="Eine Eingabeschuld">
      <img src="https://mintcdn.com/helius/KNGZoSuCXDUVm6yU/images/privacy/spend-comparison.svg?fit=max&auto=format&n=KNGZoSuCXDUVm6yU&q=85&s=3d0ce046ce268daf75ab8546766bc427" alt="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." width="1016" height="240" data-path="images/privacy/spend-comparison.svg" />
    </Tab>

    <Tab title="Mehrere Eingabeschulden">
      <img src="https://mintcdn.com/helius/KNGZoSuCXDUVm6yU/images/privacy/spend-comparison-multi.svg?fit=max&auto=format&n=KNGZoSuCXDUVm6yU&q=85&s=f4502ff2086c41f41908e337f3c12f7b" alt="Alice sendet Bob 35 von ihren 50 USDC, gehalten als drei Schulden von 20, 20 und 10. Auf einem Solana Token Account ändert sich das Betrag-Feld von 50 auf 15. Mit UTXOs werden alle drei Eingabeschulden ausgegeben und zwei neue Schulden erstellt: eine 35 USDC-Schuld für Bob und eine 15 USDC-Wechselschuld für Alice." width="1016" height="240" data-path="images/privacy/spend-comparison-multi.svg" />
    </Tab>
  </Tabs>

  |              | Solana Token Account                  | Privater Solana Token Account (UTXO)                            |
  | ------------ | ------------------------------------- | --------------------------------------------------------------- |
  | Hält         | Eine Saldennummer im `amount`-Feld    | Eine Sammlung von Schulden, jede ein fester Betrag eines Assets |
  | Saldo        | Die Zahl auf dem Konto                | Die Summe aller nicht ausgegebenen UTXOs                        |
  | Ausgaben     | Subtrahiert vom `amount`-Feld im Feld | Verbraucht Eingabe-UTXOs und schreibt eine neue Wechsel-UTXO    |
  | Sichtbarkeit | Öffentlich On-Chain                   | Verschlüsselt On-Chain                                          |

  <Info>
    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.
  </Info>
</Accordion>

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

<Tabs>
  <Tab title="Diagramm">
    <img src="https://mintcdn.com/helius/KNGZoSuCXDUVm6yU/images/privacy/account-comparison-private.svg?fit=max&auto=format&n=KNGZoSuCXDUVm6yU&q=85&s=860d0d2f3894b0a0ac169b82e538a934" alt="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." width="1080" height="590" data-path="images/privacy/account-comparison-private.svg" />
  </Tab>

  <Tab title="Code">
    Der vollständige Datensatz, der für jeden privaten Solana Token Account gespeichert wird, ist ein flacher UTXO:

    ```rust Private Solana Token Account (UTXO) theme={"system"}
    struct Utxo {
        /// Constant separating UTXOs from other Poseidon-hashed records.
        domain: u16,
        /// Recipient's `owner_hash` from their Shielded Address.
        /// Senders write this value directly; the spender supplies the preimage
        /// components as proof witness.
        owner: [u8; 32],
        /// Asset mint. SOL is Address::default().
        asset: Address,
        /// Amount in the smallest unit of `asset`.
        amount: u64,
        /// Random bytes ensuring distinct UTXO hashes for equal
        /// `(owner, asset, amount)` triples.
        blinding: [u8; 31],
        /// Arbitrary program data.
        program_data: Option<Vec<u8>>,
        /// Arbitrary policy data.
        policy_data: Option<Vec<u8>>,
        /// The policy program that authorizes spends of this UTXO.
        policy_program_id: Option<Address>,
    }
    ```
  </Tab>
</Tabs>

<Accordion title="Solana Token Account ansehen">
  <Tabs>
    <Tab title="Diagramm">
      <img src="https://mintcdn.com/helius/KNGZoSuCXDUVm6yU/images/privacy/account-comparison-solana.svg?fit=max&auto=format&n=KNGZoSuCXDUVm6yU&q=85&s=89ff901091255f2038972208fcb5d538" alt="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)." width="1080" height="462" data-path="images/privacy/account-comparison-solana.svg" />
    </Tab>

    <Tab title="Code">
      ```rust Solana Token Account theme={"system"}
      pub struct Account {
          /// The mint associated with this account
          pub mint: Pubkey,
          /// The owner of this account.
          pub owner: Pubkey,
          /// The amount of tokens this account holds.
          pub amount: u64,
          /// If `delegate` is `Some` then `delegated_amount` represents
          /// the amount authorized by the delegate
          pub delegate: COption<Pubkey>,
          /// The account's state
          pub state: AccountState,
          /// If is_native.is_some, this is a native token, and the value logs the
          /// rent-exempt reserve. An Account is required to be rent-exempt, so
          /// the value is used by the Processor to ensure that wrapped SOL
          /// accounts do not drop below this threshold.
          pub is_native: COption<u64>,
          /// The amount delegated
          pub delegated_amount: u64,
          /// Optional authority to close the account.
          pub close_authority: COption<Pubkey>,
      }
      ```
    </Tab>
  </Tabs>
</Accordion>

## 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
