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

# Membaca Saldo Privat

> Panduan untuk membaca saldo privat dompet dari pengindeks, lengkap dengan contoh kode.

1. Operasi baca mengambil Akun Token Solana Privat yang terenkripsi dari pengindeks menggunakan metode RPC khusus.
2. Hanya pengguna, atau siapa pun yang diberi otorisasi oleh pengguna, yang dapat mendekripsi saldo dengan kunci penayangannya.
3. Gunakan operasi ini setelah saldo privat berubah dan sebelum transfer.

```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="Compare to getBalance / getAccount">
  1. `getBalance` mengembalikan SOL publik. `getAccount` mengembalikan akun token publik.
  2. RPC mengembalikan saldo publik.

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

## Memulai

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

        <Info>
          Contoh TypeScript memerlukan Node.js 24 atau versi yang lebih baru, pnpm 11.18.0, dan Solana CLI.
        </Info>

        ```bash theme={"system"}
        pnpm add 'git+ssh://git@github.com/helius-labs/zolana.git#v0.3.0-alpha&path:/sdk-libs/ts' @solana/kit@^8.3.0
        ```

        Sumber: [sdk-libs/ts](https://github.com/helius-labs/zolana/tree/v0.3.0-alpha/sdk-libs/ts)

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

              Tambahkan [kunci API Helius](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: "https://d2xah7tnhdhcom.cloudfront.net",
                proverUrl: "https://d21ni15goiip6l.cloudfront.net",
              });
              ```

              Contoh-contoh ini menggunakan dompet CLI Solana sebagai pembayar secara default. Pembayar harus memiliki SOL devnet. Lihat [Cara Mendapatkan SOL Devnet](/docs/id/rpc/devnet-sol).
            </Tab>

            <Tab title="Localnet">
              Di localnet, SDK memulai validator pengujian lokal (`:8899`), pengindeks Photon (`:8784`), dan prover (`:3001`), lalu
              klien terhubung secara otomatis tanpa memerlukan konfigurasi endpoint.

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

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

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

      <Step>
        ### Mendapatkan Tag Penayangan

        ```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` adalah `senderAddress.confidentialViewTag()`, kunci publik Solana milik pengirim dalam ring rahasia. Pengindeks menggunakannya untuk mengembalikan output terenkripsi yang cocok.
      </Step>

      <Step>
        ### Mengambil Output Transaksi dari Pengindeks

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

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

        * `getShieldedTransactionsByTags` mengambil output terenkripsi yang terkait dengan `senderViewTag`.
        * `atSlot(depositTx.slot)` menunggu hingga pengindeks memiliki deposit pada slot tersebut.
        * Pengindeks mengembalikan data output terenkripsi. Pengindeks tidak mendekripsi saldo privat.
      </Step>

      <Step>
        ### Mendekripsi Menjadi Saldo Privat

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

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

        * `sender` menyediakan kunci penayangan milik pengirim untuk dekripsi lokal.
        * `decryptToBalances` mendekripsi output yang cocok dan mengembalikan saldo privat milik pengirim.
        * `balancesAfterDeposit.balance(SOL_MINT)` membaca saldo SOL privat.

        <Note>
          Lihat [Konsep](/docs/id/privacy/concepts) untuk mempelajari cara kerja penandaan pemilik dan Akun Token Solana Privat.
        </Note>
      </Step>
    </Steps>

    ### Contoh Kode Lengkap

    Kloning dan jalankan contoh:

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

    <Info>
      Contoh-contoh tersebut menggunakan Ring rahasia di local/devnet [di sini](https://github.com/helius-labs/zolana-examples/blob/7775438e0a290a4c28dccf919719bd640c3ec5e3/typescript-client/examples/sync_balance.ts).
    </Info>
  </Tab>

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

        <Info>
          Contoh Rust memerlukan Rust 1.98.1 dan Solana CLI v4.0.2. Lihat [panduan instalasi Solana](https://solana.com/docs/intro/installation).
        </Info>

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

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

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

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

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

              let tree = pda::tree(0);
              let client = ZolanaClient::from_urls(
                  SolanaRpc::new("https://devnet.helius-rpc.com/?api-key=YOUR_API_KEY"),
                  "https://d2xah7tnhdhcom.cloudfront.net",
                  "https://d21ni15goiip6l.cloudfront.net",
              )?;
              ```

              Contoh-contoh ini menggunakan dompet Solana CLI sebagai pembayar secara default. Pembayar harus memiliki SOL devnet. Lihat [Cara Mendapatkan SOL Devnet](/docs/id/rpc/devnet-sol).
            </Tab>

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

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

              let tree = pda::tree(0);
              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",
              )?;
              ```
            </Tab>
          </Tabs>
        </Accordion>
      </Step>

      <Step>
        ### Mendapatkan Tag Penayangan

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

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

        * `sender_tag` adalah `sender_shielded_address.confidential_view_tag()`, kunci publik Solana milik pengirim dalam ring rahasia. Pengindeks menggunakannya untuk mengembalikan output terenkripsi yang cocok.
      </Step>

      <Step>
        ### Mengambil Output Transaksi dari Pengindeks

        ```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` mengambil output terenkripsi yang terkait dengan `sender_tag`.
        * `IndexerRpcConfig::at_slot(slot)` menunggu hingga pengindeks memiliki deposit pada slot tersebut.
        * Pengindeks mengembalikan data output terenkripsi. Pengindeks tidak mendekripsi saldo privat.
      </Step>

      <Step>
        ### Mendekripsi Menjadi Saldo Privat

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

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

        * `sender` menyediakan kunci penayangan milik pengirim untuk dekripsi lokal.
        * `decrypt_spendable` mendekripsi dan memverifikasi output yang cocok. Kolom `.balances` berisi saldo milik pengirim untuk output tersebut.
        * `get_balance(SOL_MINT)` membaca saldo SOL privat.
      </Step>
    </Steps>

    ### Contoh Kode Lengkap

    Kloning dan jalankan contoh:

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

    <Info>
      Contoh-contoh tersebut menggunakan Ring rahasia di local/devnet [di sini](https://github.com/helius-labs/zolana-examples/blob/7775438e0a290a4c28dccf919719bd640c3ec5e3/rust-client/examples/sync_balance.rs).
    </Info>
  </Tab>
</Tabs>

## Panduan Terkait

<CardGroup cols={2}>
  <Card title="Create a Private Wallet" icon="wallet" href="/docs/id/privacy/integration/wallet#buat-dompet-privat" horizontal />

  <Card title="Deposit" icon="arrow-down-to-bracket" href="/docs/id/privacy/guides/deposit" horizontal />

  <Card title="Transfer" icon="arrow-right-arrow-left" href="/docs/id/privacy/guides/transfer" horizontal />

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

  <Card title="Read Private History" icon="clock-rotate-left" href="/docs/id/privacy/guides/read-history" horizontal />
</CardGroup>

## Tidak menemukan yang Anda cari?

<Callout type="info">
  Hubungi kami! [Telegram](https://t.me/tilo_light) | [Email](mailto:sales@helius.xyz) | [Kontak](https://www.helius.dev/contact)
</Callout>
