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

# Ein privates Guthaben lesen

> Leitfaden zum Lesen eines privaten Wallet-Guthabens aus dem Indexer mit einem vollständigen Codebeispiel.

1. 'Read' ruft verschlüsselte Private Solana Token Accounts aus dem Indexer mit speziellen RPC-Methoden ab.
2. Nur der Benutzer oder jede Person, der der Benutzer Zugriff gewährt, kann Guthaben mit ihrem Viewing Key entschlüsseln.
3. Verwenden Sie es, nachdem sich ein privates Guthaben geändert hat und vor einer Übertragung.

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

    Wallet->>RPC: getShieldedTransactionsByTags
    RPC-->>Wallet: Encrypted transactions
    Note over Wallet: Decrypt
    Note over Wallet: Sum to private balances
```

<Accordion title="Vergleich zu getBalance / getAccount">
  1. `getBalance` gibt öffentliches SOL zurück. `getAccount` gibt ein öffentliches Token-Konto zurück.
  2. Der RPC gibt das öffentliche Guthaben zurück.

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

      Wallet->>RPC: getBalance / getAccount
      RPC-->>Wallet: Public SOL or token account
  ```
</Accordion>

## Erste Schritte

<Tabs>
  <Tab title="TypeScript Client">
    <Steps>
      <Step>
        ### Voraussetzungen

        <Info>
          The TypeScript examples require Node.js 24 or later, pnpm 11.18.0, and the Solana CLI.
        </Info>

        ```bash theme={"system"}
        pnpm add @heliuslabs/zolana @solana/kit
        ```

        Source: [sdk-libs/ts](https://github.com/helius-labs/zolana/tree/main/sdk-libs/ts)

        <Accordion title="Connect to Endpoints">
          <Tabs>
            <Tab title="Devnet">
              ```bash theme={"system"}
              pnpm install
              cp .env.example .env
              ```

              Add a [Helius API key](https://dashboard.helius.dev/):

              ```bash .env theme={"system"}
              API_KEY=YOUR_API_KEY
              ZOLANA_PAYER_KEYPAIR=~/.config/solana/id.json
              ```

              ```ts theme={"system"}
              import { createZolanaClient } from "@heliuslabs/zolana";

              const client = await createZolanaClient({
                solanaRpcUrl: "https://devnet.helius-rpc.com/?api-key=YOUR_API_KEY",
                indexerUrl: "http://zolnet-devnet-1779374825.eu-north-1.elb.amazonaws.com",
                proverUrl: "http://zolnet-devnet-1779374825.eu-north-1.elb.amazonaws.com:3001",
                allowInsecureHttp: true,
              });
              ```

              The examples use the Solana CLI wallet as the payer by default. The payer must hold devnet SOL. See [How to Get Devnet SOL](/docs/rpc/devnet-sol).
            </Tab>

            <Tab title="Localnet">
              On localnet the SDK starts the local test validator (`:8899`), Photon indexer (`:8784`), and prover (`:3001`), and the
              client connects to them automatically without needing endpoint configuration.

              ```bash theme={"system"}
              cargo install --git https://github.com/helius-labs/zolana --tag v0.1.0-alpha zolana-cli
              zolana dev start
              ```

              ```ts theme={"system"}
              import { createZolanaClient } from "@heliuslabs/zolana";

              const client = await createZolanaClient({});
              ```
            </Tab>
          </Tabs>
        </Accordion>
      </Step>

      <Step>
        ### Den View Tag ableiten

        ```typescript theme={"system"}
        import { createZolanaClient } from "@heliuslabs/zolana";

        // The view tag is the sender's Solana public key in confidential rings.
        // Used by the indexer to fetch the sender's UTXOs.
        const senderViewTag =
          senderAddress.confidentialViewTag();
        ```

        * `senderViewTag` ist `senderAddress.confidentialViewTag()`, der öffentliche Solana-Schlüssel des Absenders in vertraulichen Ringen. Der Indexer verwendet ihn, um passende verschlüsselte Ausgaben zurückzugeben.
      </Step>

      <Step>
        ### Transaktionsausgaben vom Indexer abrufen

        ```typescript theme={"system"}
        import { atSlot } from "@heliuslabs/zolana/client";

        const depositResponse =
          await client.getShieldedTransactionsByTags(
            { tags: [senderViewTag] },
            atSlot(depositTx.slot),
          );
        ```

        * `getShieldedTransactionsByTags` ruft die verschlüsselten Ausgaben ab, die mit `senderViewTag` verknüpft sind.
        * `atSlot(depositTx.slot)` wartet, bis der Indexer die Einzahlung in diesem Slot hat.
        * Der Indexer gibt verschlüsselte Ausgabedaten zurück. Er entschlüsselt das private Guthaben nicht.
      </Step>

      <Step>
        ### Zu einem privaten Guthaben entschlüsseln

        ```typescript theme={"system"}
        import { SOL_MINT } from "@heliuslabs/zolana";
        import { decryptToBalances } from "@heliuslabs/zolana/transaction";

        const balancesAfterDeposit =
          await decryptToBalances({
            keypair: senderKeypair,
            registry: assets,
            transactions: depositResponse.transactions,
          });
        const depositBalance =
          balancesAfterDeposit.balance(SOL_MINT);
        ```

        * `senderKeypair` liefert den Viewing Key des Absenders für die lokale Entschlüsselung.
        * `decryptToBalances` entschlüsselt passende Ausgaben und gibt die privaten Guthaben des Absenders zurück.
        * `balancesAfterDeposit.balance(SOL_MINT)` liest das private SOL-Guthaben.

        <Note>
          Siehe [Konzeptionen](/docs/de/privacy/concepts) für Informationen, wie Eigentümer-Tagging und Private Solana Token Accounts funktionieren.
        </Note>
      </Step>
    </Steps>

    ### Vollständiges Codebeispiel

    Beispiel klonen und ausführen:

    ```bash theme={"system"}
    git clone https://github.com/helius-labs/zolana-examples.git
    cd zolana-examples/typescript-client
    pnpm install
    pnpm example examples/deposit_transfer_withdraw.ts
    ```

    <Info>
      Die Beispiele verwenden einen vertraulichen Ring auf local/devnet [hier](https://github.com/helius-labs/zolana-examples/blob/main/typescript-client/examples/deposit_transfer_withdraw.ts).
    </Info>
  </Tab>

  <Tab title="Rust Client">
    <Steps>
      <Step>
        ### Voraussetzungen

        <Info>
          The Rust examples require the latest stable Rust toolchain and the Solana CLI v4.0.2. See the [Solana installation guide](https://solana.com/docs/intro/installation).
        </Info>

        ```toml Cargo.toml theme={"system"}
        [dependencies]
        zolana-client = { git = "https://github.com/helius-labs/zolana", tag = "v0.1.0-alpha", features = ["indexer-api", "solana-rpc"] }
        zolana-interface = { git = "https://github.com/helius-labs/zolana", tag = "v0.1.0-alpha", features = ["solana"] }
        zolana-keypair = { git = "https://github.com/helius-labs/zolana", tag = "v0.1.0-alpha" }
        zolana-transaction = { git = "https://github.com/helius-labs/zolana", tag = "v0.1.0-alpha" }
        ```

        Source: [sdk-libs/client](https://github.com/helius-labs/zolana/tree/v0.1.0-alpha/sdk-libs/client)

        <Accordion title="Connect to Endpoints">
          <Tabs>
            <Tab title="Devnet">
              Add a [Helius API key](https://dashboard.helius.dev/):

              ```bash .env theme={"system"}
              API_KEY=YOUR_API_KEY
              ZOLANA_PAYER_KEYPAIR=~/.config/solana/id.json
              ```

              ```rust theme={"system"}
              use solana_address::Address;
              use zolana_client::{SolanaRpc, ZolanaClient};
              use zolana_interface::DEFAULT_TREE_ADDRESS;

              let tree: Address = DEFAULT_TREE_ADDRESS.parse()?;
              let client = ZolanaClient::from_urls_allowing_insecure_http(
                  SolanaRpc::new("https://devnet.helius-rpc.com/?api-key=YOUR_API_KEY"),
                  "http://zolnet-devnet-1779374825.eu-north-1.elb.amazonaws.com",
                  "http://zolnet-devnet-1779374825.eu-north-1.elb.amazonaws.com:3001",
                  tree,
              );
              ```

              The examples use the Solana CLI wallet as the payer by default. The payer must hold devnet SOL. See [How to Get Devnet SOL](/docs/rpc/devnet-sol).
            </Tab>

            <Tab title="Localnet">
              ```bash theme={"system"}
              cargo install --git https://github.com/helius-labs/zolana --tag v0.1.0-alpha zolana-cli
              zolana dev start
              ```

              ```rust theme={"system"}
              use solana_address::Address;
              use zolana_client::{SolanaRpc, ZolanaClient};
              use zolana_interface::DEFAULT_TREE_ADDRESS;

              let tree: Address = DEFAULT_TREE_ADDRESS.parse()?;
              let client = ZolanaClient::from_urls(
                  SolanaRpc::new("http://127.0.0.1:8899"),
                  "http://127.0.0.1:8784",
                  "http://127.0.0.1:3001",
                  tree,
              )?;
              ```
            </Tab>
          </Tabs>
        </Accordion>
      </Step>

      <Step>
        ### Den View Tag ableiten

        ```rust theme={"system"}
        use zolana_client::Rpc;

        let sender_tag = sender_shielded_address.confidential_view_tag()?;
        ```

        * `sender_tag` ist `sender_shielded_address.confidential_view_tag()`, der öffentliche Solana-Schlüssel des Absenders in vertraulichen Ringen. Der Indexer verwendet ihn, um passende verschlüsselte Ausgaben zurückzugeben.
      </Step>

      <Step>
        ### Transaktionsausgaben vom Indexer abrufen

        ```rust theme={"system"}
        use zolana_client::{IndexerRpcConfig, Rpc};

        let response = client.get_shielded_transactions_by_tags(
            vec![sender_tag],
            None,
            Some(50),
            Some(IndexerRpcConfig::at_slot(slot)),
        )?;
        ```

        * `get_shielded_transactions_by_tags` ruft die verschlüsselten Ausgaben ab, die mit `sender_tag` verknüpft sind.
        * `IndexerRpcConfig::at_slot(slot)` wartet, bis der Indexer die Einzahlung in diesem Slot hat.
        * Der Indexer gibt verschlüsselte Ausgabedaten zurück. Er entschlüsselt das private Guthaben nicht.
      </Step>

      <Step>
        ### Zu einem privaten Guthaben entschlüsseln

        ```rust theme={"system"}
        use anyhow::anyhow;
        use zolana_transaction::{decrypt_transactions, SOL_MINT};

        let balances = decrypt_transactions(&sender, &response.transactions, &assets)
            .map_err(|e| anyhow!("decrypt sender transactions: {e:?}"))?;
        let sender_balance = balances.get_balance(SOL_MINT);
        ```

        * `sender` liefert den Viewing Key des Absenders für die lokale Entschlüsselung.
        * `decrypt_transactions` entschlüsselt passende Ausgaben und gibt die privaten Guthaben des Absenders zurück.
        * `get_balance(SOL_MINT)` liest das private SOL-Guthaben.
      </Step>
    </Steps>

    ### Vollständiges Codebeispiel

    Beispiel klonen und ausführen:

    ```bash theme={"system"}
    git clone https://github.com/helius-labs/zolana-examples.git
    cd zolana-examples/rust-client
    cargo run -p rust-client-example --example deposit_transfer_withdraw
    ```

    <Info>
      Die Beispiele verwenden einen vertraulichen Ring auf local/devnet [hier](https://github.com/helius-labs/zolana-examples/blob/main/rust-client/examples/deposit_transfer_withdraw.rs).
    </Info>
  </Tab>
</Tabs>

## Verwandte Anleitungen

<CardGroup cols={2}>
  <Card title="Einzahlung" icon="arrow-down-to-bracket" href="/docs/de/privacy/guides/deposit" horizontal />

  <Card title="Übertragung" icon="arrow-right-arrow-left" href="/docs/de/privacy/guides/transfer" horizontal />

  <Card title="Abhebung" icon="arrow-up-from-bracket" href="/docs/de/privacy/guides/withdraw" horizontal />

  <Card title="Privaten Verlauf lesen" icon="clock-rotate-left" href="/docs/de/privacy/guides/read-history" horizontal />
</CardGroup>

## Didn't find what you were looking for?

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