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

# Architektur

> Erfahre, wie Wallets, RPCs und Solana-Programme mit Solana Privacy Rings interagieren.

<a id="architecture" />

<Tabs sync={false}>
  <Tab title="Permissionless Confidential Ring">
    ```mermaid theme={"system"}
    %%{init: {
      'theme': 'base',
      'themeVariables': {
        'primaryColor': '#FFFFFF',
        'primaryTextColor': '#737373',
        'primaryBorderColor': '#9CA3AF',
        'lineColor': '#FF6B35',
        'secondaryColor': '#F5F5F5',
        'tertiaryColor': '#FFFFFF',
        'clusterBkg': '#FF6B350A',
        'clusterBorder': '#9CA3AF',
        'edgeLabelBackground': '#FFFFFF'
      }
    }}%%
    flowchart LR
        Users["Users"]

        subgraph RPC["RPC"]
            direction TB
            Indexer["Photon Indexer"]
            Prover["Prover"]
            TransactionRPC["Transaction RPC"]
        end

        subgraph Solana["Solana"]
            direction LR
            Swap["ZK Swap Program"]
            subgraph State[" "]
                direction TB
                SPP["SPP<br/>Solana Privacy Program"]
                Pools["SPL interface"]
                Trees["State Merkle tree account"]
            end
            Swap -->|CPI| SPP
        end

        Forester["Forester"]

        Users <-.->|Fetch encrypted UTXOs| Indexer
        Users <-.->|Fetch proofs| Prover
        Users -->|Send transaction| TransactionRPC
        TransactionRPC -->|Confidential transfer| SPP
        TransactionRPC --> Swap
        Forester --> Trees

        style State fill:none,stroke:none
    ```
  </Tab>

  <Tab title="Custom Confidential Ring">
    ```mermaid theme={"system"}
    %%{init: {
      'theme': 'base',
      'themeVariables': {
        'primaryColor': '#FFFFFF',
        'primaryTextColor': '#737373',
        'primaryBorderColor': '#9CA3AF',
        'lineColor': '#FF6B35',
        'secondaryColor': '#F5F5F5',
        'tertiaryColor': '#FFFFFF',
        'clusterBkg': '#FF6B350A',
        'clusterBorder': '#9CA3AF',
        'edgeLabelBackground': '#FFFFFF'
      }
    }}%%
    flowchart LR
        Users["Users"]

        subgraph RPC["RPC"]
            direction TB
            Indexer["Photon Indexer"]
            RingRPC["Ring RPC with auditor · optional"]
            Prover["Prover"]
            TransactionRPC["Transaction RPC"]
        end

        subgraph Solana["Solana"]
            direction LR
            Swap["ZK Swap Program"]
            Ring1["Custom Ring Program 1"]
            RingN["Custom Ring Program N"]
            subgraph State[" "]
                direction TB
                SPP["SPP<br/>Solana Privacy Program"]
                Pools["SPL interface"]
                Trees["State Merkle tree account"]
            end
            Swap -->|CPI| Ring1
            Ring1 -->|CPI| SPP
            RingN -->|CPI| SPP
        end

        Forester["Forester"]

        Users <-.->|Fetch encrypted UTXOs| Indexer
        Users <-.->|Fetch decrypted UTXOs| RingRPC
        Users <-.->|Fetch proofs| Prover
        Users -->|Send transaction| TransactionRPC
        TransactionRPC -->|Confidential transfer| Ring1
        TransactionRPC --> RingN
        TransactionRPC --> Swap
        Forester --> Trees

        style State fill:none,stroke:none
    ```
  </Tab>

  <Tab title="Custom Anonymous Ring">
    ```mermaid theme={"system"}
    %%{init: {
      'theme': 'base',
      'themeVariables': {
        'primaryColor': '#FFFFFF',
        'primaryTextColor': '#737373',
        'primaryBorderColor': '#9CA3AF',
        'lineColor': '#FF6B35',
        'secondaryColor': '#F5F5F5',
        'tertiaryColor': '#FFFFFF',
        'clusterBkg': '#FF6B350A',
        'clusterBorder': '#9CA3AF',
        'edgeLabelBackground': '#FFFFFF'
      }
    }}%%
    flowchart LR
        Users["Users"]

        subgraph RPC["RPC"]
            direction TB
            RingRPC["Ring RPC with auditor"]
            Prover["Prover"]
            TransactionRPC["Transaction RPC<br/>Relayer for anonymous transactions"]
        end

        subgraph Solana["Solana"]
            direction LR
            Swap["ZK Swap Program"]
            Ring1["Custom Ring Program 1"]
            RingN["Custom Ring Program N"]
            subgraph State[" "]
                direction TB
                SPP["SPP<br/>Solana Privacy Program"]
                Pools["SPL interface"]
                Trees["State Merkle tree account"]
            end
            Swap -->|CPI| Ring1
            Ring1 -->|CPI| SPP
            RingN -->|CPI| SPP
        end

        Forester["Forester"]

        Users <-.->|Fetch decrypted UTXOs| RingRPC
        Users <-.->|Fetch proofs| Prover
        Users -->|Send transaction| TransactionRPC
        TransactionRPC -->|Relayed anonymous transaction| Ring1
        TransactionRPC --> RingN
        TransactionRPC --> Swap
        Forester --> Trees

        style State fill:none,stroke:none
    ```
  </Tab>
</Tabs>

## Private Wallet und Benutzer

Benutzer verwahren ihr verschlüsseltes Guthaben in einer privaten Wallet und signieren private Transaktionen mit ihrem bestehenden Solana-Ed25519-Schlüssel. Eine Integration der privaten Wallet ergänzt deine Schlüsselverwaltung um ein abgeschirmtes Schlüsselpaar. Du kannst [die Integration selbst vornehmen](/docs/de/privacy/integration/wallet) oder die [eingebettete private Wallet](/docs/de/privacy/integration/embedded-wallet) verwenden.

## Private Transaktionen

Private Übertragungen sind normale Solana-Transaktionen. Die Solana-Laufzeitumgebung prüft die Signaturen und ruft das Solana Privacy Program auf. Dieses verifiziert den ZK-Beweis, ohne den verschlüsselten Zustand offenzulegen.

Eine typische vertrauliche Übertragung benötigt etwa 927 Byte und liegt damit deutlich unter dem Limit von 4.096 Byte in v1.

<Accordion title="Example Confidential Transfer">
  | Komponente | Byte |
  | - | -: |
  | Groth16-Beweis | 192 |
  | Sonstige Datenschutz-Anweisungsdaten: Chiffretexte, Commitments, Nullifier, Schlüssel und Metadaten | 418 |
  | Sechs Account-Adressen × 32 Byte | 192 |
  | Eine Ed25519-Signatur | 64 |
  | Aktueller Blockhash | 32 |
  | Version, Nachrichten-Header, Konfigurationsmaske und Anzahlen | 10 |
  | Limits für Compute Units und geladene Account-Daten | 8 |
  | Anweisungs-Header | 4 |
  | Sieben Account-Indizes der Anweisung | 7 |
  | **Gesamt** | **927** |

  <Info>
    Für das Beispiel einer vertraulichen Übertragung mit 2 Eingaben und 3 Ausgaben aus der Spezifikation.
    Quellcode ansehen: [Spezifikation](https://github.com/helius-labs/zolana/blob/680667f27cf9ba4203a0b69284f4c304b874092f/docs/spec.md#transact) · [xtask/src/main.rs](https://github.com/helius-labs/zolana/blob/680667f27cf9ba4203a0b69284f4c304b874092f/xtask/src/main.rs#L412)

    Sieh dir das [Transaktionslayout von Solana v1](https://solana.com/docs/core/transactions/versioned-transactions#v1-wire-layout) an.
  </Info>
</Accordion>

## RPC

Eine <Tooltip tip="https://devnet.helius-rpc.com/?api-key=<API_KEY> or https://mainnet.helius-rpc.com/?api-key=<API_KEY>">einzige Helius-RPC-URL</Tooltip> stellt Solana RPC, den Indexer und einen Remote-Prover bereit.

* **Solana RPC** – Gibt das öffentliche Guthaben zurück und übermittelt Transaktionen an das Solana-Netzwerk.

* **Indexer** – Der Indexer stellt den verschlüsselten Zustand bereit, den eine Wallet zum Lesen von Guthaben und Erstellen privater Transaktionen benötigt. Als Fallback kann jeder ohne Genehmigung einen eigenen Indexer betreiben.

* **Prover** – Zero-Knowledge-Beweise können je nach Transaktion und Hardware innerhalb von Millisekunden lokal oder von einem Prover-Server erzeugt werden. Helius nutzt GPUs zur Beweiserzeugung.

Für benutzerdefinierte Rings ist optional ein Ring RPC verfügbar. Er stellt mithilfe eines gemeinsamen Anzeigeschlüssels oder eines konfigurierten Ring-Prüferschlüssels entschlüsselte Guthaben und den Verlauf bereit. Anonyme Transaktionen verwenden außerdem einen Relayer, damit der Benutzer nicht als Gebührenzahler der Transaktion erscheint.

## Datenschutz und Solana-Programme

Das Solana Privacy Program (SPP) ist das Hauptprogramm, das alle privaten Zustandsübergänge verifiziert und ausführt. Programme für benutzerdefinierte Rings und ZK-Solana-Programme ergänzen Compliance- oder Anwendungslogik und rufen anschließend SPP auf, um den privaten Zustand zu aktualisieren.

Andere Solana-Programme können innerhalb derselben Transaktion über CPI mit diesen Programmen interagieren. Dabei gelten die Transaktionslimits von Solana, etwa das CPI-Tiefenlimit von 5.

<Accordion title="ZK Program Transaction Flow">
  <Tabs sync={false}>
    <Tab title="Permissionless Ring">
      <Tabs sync={false}>
        <Tab title="ZK Program alone">
          ```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
              box Offchain
              participant Client
              end
              box Onchain
              participant Runtime as Solana Runtime
              participant ZK as ZK Solana Program
              participant SPP as Solana Privacy Program
              end

              Client->>Runtime: Sign and send transaction
              Note over Runtime: Check signatures
              Runtime->>ZK: invoke
              Note over ZK: Verify proof for ZK program logic
              ZK->>SPP: CPI
              Note over SPP: Verify proof for private state transition
              Note over SPP: Update private state<br/>(nullify input UTXOs, create output UTXOs)
              Note over ZK: Update Solana accounts (optional)

          ```
        </Tab>

        <Tab title="ZK Program and additional Solana Program">
          ```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
              box Offchain
              participant Client
              end
              box Onchain
              participant Runtime as Solana Runtime
              participant ZK as ZK Solana Program
              participant SPP as Solana Privacy Program
              participant Program as Solana Program
              end

              Client->>Runtime: Sign and send transaction
              Note over Runtime: Check signatures
              Runtime->>ZK: invoke
              Note over ZK: Verify proof for ZK program logic
              ZK->>SPP: CPI
              Note over SPP: Verify proof for private state transition
              Note over SPP: Update private state<br/>(nullify input UTXOs, create output UTXOs)
              ZK->>Program: CPI
              Note over Program: Update Solana accounts

          ```
        </Tab>
      </Tabs>
    </Tab>

    <Tab title="Custom Rings">
      <Tabs sync={false}>
        <Tab title="ZK Program alone">
          ```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
              box Offchain
              participant Client
              end
              box Onchain
              participant Runtime as Solana Runtime
              participant ZK as ZK Solana Program
              participant Ring as Custom Ring Program
              participant SPP as Solana Privacy Program
              end

              Client->>Runtime: Sign and send transaction
              Note over Runtime: Check signatures
              Runtime->>ZK: invoke
              Note over ZK: Verify proof for ZK program logic
              ZK->>Ring: CPI
              Note over Ring: Verify proof for custom compliance logic
              Ring->>SPP: CPI
              Note over SPP: Verify proof for private state transition
              Note over SPP: Update private state<br/>(nullify input UTXOs, create output UTXOs)
              Note over ZK: Update Solana accounts (optional)

          ```
        </Tab>

        <Tab title="ZK Program and additional Solana Program">
          ```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
              box Offchain
              participant Client
              end
              box Onchain
              participant Runtime as Solana Runtime
              participant ZK as ZK Solana Program
              participant Ring as Custom Ring Program
              participant SPP as Solana Privacy Program
              participant Program as Solana Program
              end

              Client->>Runtime: Sign and send transaction
              Note over Runtime: Check signatures
              Runtime->>ZK: invoke
              Note over ZK: Verify proof for ZK program logic
              ZK->>Ring: CPI
              Note over Ring: Verify proof for custom compliance logic
              Ring->>SPP: CPI
              Note over SPP: Verify proof for private state transition
              Note over SPP: Update private state<br/>(nullify input UTXOs, create output UTXOs)
              ZK->>Program: CPI
              Note over Program: Update Solana accounts

          ```
        </Tab>
      </Tabs>
    </Tab>
  </Tabs>
</Accordion>

### Solana Privacy Program (SPP)

Das Solana Privacy Program verifiziert Zero-Knowledge-Beweise und aktualisiert den privaten Zustand. Verwende es, um Token einzuzahlen, private Guthaben zu übertragen und Token auf öffentliche Accounts auszuzahlen.

Andere Programme rufen SPP über CPI auf, um private Zustandsübergänge auszuführen.

### Programm für benutzerdefinierte Rings

Ein Programm für einen benutzerdefinierten Ring definiert Übertragungsberechtigungen und zusätzliche Autoritäten, ähnlich wie Token-2022. Verwende es, um Prüfer zu konfigurieren, einen Mitunterzeichner zu verlangen oder einer Autorität das Einfrieren von Guthaben zu erlauben.

Es verifiziert einen ZK-Beweis, um seine benutzerdefinierte Compliance-Logik durchzusetzen, und ruft anschließend SPP auf, um den privaten Zustand zu aktualisieren.

### ZK-Solana-Programm

Zero-Knowledge-Solana-Programme (ZK) ermöglichen private Treuhandkonten in Solana-Programmen, um Anwendungslogik auf private Guthaben anzuwenden. Mit ZK-Solana-Programmen kannst du private Swaps, Staking, Kreditvergabe und weitere Anwendungen entwickeln. Ein vertraulicher Swap kann beispielsweise die vereinbarten Beträge und den Preis durchsetzen, ohne sie öffentlich zu machen.

Das Programm verifiziert einen ZK-Beweis seiner Anwendungslogik und ruft anschließend direkt oder über ein Programm für einen benutzerdefinierten Ring SPP auf, um den privaten Zustand zu aktualisieren.

## Zustands-Merkle-Baum und Forester

Der Standard-Ring und alle benutzerdefinierten Rings speichern den privaten Zustand in einem Account für einen Zustands-Merkle-Baum, der von einem Forester node verwaltet wird.
Baum-Accounts binden den privaten Zustand, ohne ihn in separaten Solana-Accounts zu speichern.

Lies Guthaben und den Transaktionsverlauf daher mit speziellen Indexer-RPC-Methoden wie `getShieldedTransactionsByTags` statt mit Solana-Account-Methoden wie `getAccountInfo`. Sieh dir [Privates Guthaben lesen](/docs/de/privacy/guides/read-balance) und [Privaten Transaktionsverlauf lesen](/docs/de/privacy/guides/read-history) an.

### Durchsatz

Der Baum wird in einem beschreibbaren Solana-Account gespeichert.
Private Übertragungen, die in diesen Account schreiben, teilen sich das Solana-Limit von 12 Millionen CU pro Block für den Write-Lock eines Accounts.
Verschiedene UTXOs können unabhängig voneinander ausgegeben werden. Transaktionen, die in denselben Baum schreiben, teilen sich jedoch weiterhin die Account-Sperren und Compute-Limits von Solana.

Eine vertrauliche Übertragung verbraucht im [Anweisungs-Benchmark](https://github.com/helius-labs/zolana/blob/a3ddedda42b40d4951ae8fcdde2500374c4f2125/program-tests/shielded-pool/CU_BENCHMARK.md#12-transfer-eddsa-2x3) etwa 140.000 CU.
Ein Baum unterstützt daher ungefähr 86 private Übertragungen pro Block oder bei den aktuellen Solana-Blockzeiten von etwa 400 Millisekunden ungefähr 215 Transaktionen pro Sekunde.

Das Protokoll kann weitere Bäume hinzufügen, um den Durchsatz zu erhöhen.
Jeder Baum ist ein separater beschreibbarer Account mit eigenem Compute-Budget pro Account. Deshalb konkurrieren Transaktionen auf verschiedenen Bäumen nicht um dasselbe Write-Lock-Budget.

<a id="interface-pda-account" />

## SPL-Schnittstelle

Die SPL-Schnittstelle ermöglicht die Interoperabilität zwischen öffentlich und privat gehaltenen Token. Sie ist ein Treuhandkonto pro Mint, das ohne Genehmigung erstellt werden kann,
aber pro Mint nur einmal erstellt werden muss.

* Bei der Einzahlung von SOL- und SPL-Assets in ein privates Guthaben verwahrt eine Schnittstellen-PDA, die dem Solana Privacy Program gehört, die Token treuhänderisch und erstellt UTXOs mit dem Benutzer als Eigentümer.
* Bei der Auszahlung auf ein öffentliches Guthaben werden vorhandene UTXOs als ausgegeben markiert und Token an die Solana-Token-Accounts freigegeben.

Bei Mints, die noch keine Schnittstellen-PDA besitzen, kann die erste Einzahlung eine Anweisung enthalten, die Schnittstellen-PDA in derselben Transaktion zu erstellen.

```mermaid theme={"system"}
%%{init: {
  'theme': 'base',
  'themeVariables': {
    'primaryColor': '#FFFFFF',
    'primaryTextColor': '#737373',
    'primaryBorderColor': '#9CA3AF',
    'lineColor': '#FF6B35',
    'edgeLabelBackground': '#FFFFFF'
  }
}}%%
flowchart LR
    GetAccount["Get account"] --> Exists{"Interface PDA exists?"}
    Exists -->|Yes| Deposit["Deposit to private balance"]
    Exists -->|No| Create["Create interface PDA<br/>and token account"]
    Create --> Deposit
```

<span id="creation-of-a-private-wallet" />

<span id="decryption-modes-and-wallet-sync" />

<span id="delegated-decryption" />

<span id="encryption-and-shielded-keypair" />

<span id="integrating-a-shielded-keypair" />

<span id="latency-and-concurrency" />

<span id="local-decryption" />

<span id="on-concurrency" />

<span id="private-solana-token-accounts" />

<span id="private-solana-token-accounts-are-utxos" />

<span id="private-wallet" />

<span id="private-wallet-balance" />

<span id="shielded-keypair" />

<span id="spending-a-utxo" />

## Mehr erfahren

<CardGroup cols={2}>
  <Card title="Overview" icon="book" href="/docs/de/privacy/concepts/overview">
    Rings, Datenschutzgarantien und Transaktionsablauf.
  </Card>

  <Card title="Private State and UTXOs" icon="database" href="/docs/de/privacy/concepts/utxo">
    So werden private Guthaben gespeichert und ausgegeben.
  </Card>

  <Card title="Encryption and Privacy Guarantees" icon="key" href="/docs/de/privacy/concepts/encryption">
    So werden Assets verschlüsselt und diese Rolle übernimmt das abgeschirmte Schlüsselpaar.
  </Card>

  <Card title="Custom Enterprise Rings" icon="building" href="/docs/de/privacy/integration/enterprise">
    Erfahre, wie du einen benutzerdefinierten Ring konfigurierst.
  </Card>
</CardGroup>

## Nicht gefunden, wonach du gesucht hast?

<Callout type="info">
  Melde dich! [Telegram](https://t.me/tilo_light) | [E-Mail](mailto:sales@helius.xyz) | [Kontakt](https://www.helius.dev/contact)
</Callout>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.