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

# Arsitektur

> Pelajari cara dompet, RPC, dan program Solana berinteraksi dengan Solana Privacy Rings.

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

## Dompet Privat dan Pengguna

Pengguna menyimpan saldo terenkripsi dalam Dompet Privat dan menandatangani transaksi privat dengan kunci Solana Ed25519 yang sudah mereka miliki. Integrasi dompet privat menambahkan pasangan kunci terlindung ke pengelolaan kunci Anda. Anda dapat [mengintegrasikannya sendiri](/docs/id/privacy/integration/wallet) atau menggunakan [Dompet Privat Tersemat](/docs/id/privacy/integration/embedded-wallet).

## Transaksi Privat

Transfer privat adalah transaksi Solana biasa. Runtime Solana memverifikasi tanda tangan dan memanggil Solana Privacy Program, yang memverifikasi bukti ZK tanpa mengungkapkan status terenkripsi.

Transfer rahasia pada umumnya menggunakan sekitar 927 byte, masih jauh di bawah batas 4.096 byte pada v1.

<Accordion title="Example Confidential Transfer">
  | Komponen | Byte |
  | - | -: |
  | Bukti Groth16 | 192 |
  | Data instruksi privasi lainnya: ciphertext, komitmen, nullifier, kunci, dan metadata | 418 |
  | Enam alamat akun × 32 byte | 192 |
  | Satu tanda tangan Ed25519 | 64 |
  | Blockhash terbaru | 32 |
  | Versi, header pesan, mask konfigurasi, dan jumlah | 10 |
  | Batas unit komputasi dan data akun yang dimuat | 8 |
  | Header instruksi | 4 |
  | Tujuh indeks akun instruksi | 7 |
  | **Total** | **927** |

  <Info>
    Untuk contoh transfer rahasia dengan 2 input dan 3 output dalam spesifikasi.
    Lihat kode sumber: [Spesifikasi](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)

    Lihat [tata letak transaksi Solana v1](https://solana.com/docs/core/transactions/versioned-transactions#v1-wire-layout).
  </Info>
</Accordion>

## RPC

Satu <Tooltip tip="https://devnet.helius-rpc.com/?api-key=<API_KEY> or https://mainnet.helius-rpc.com/?api-key=<API_KEY>">URL RPC Helius</Tooltip> menyediakan RPC Solana, pengindeks, dan pembukti jarak jauh.

* **RPC Solana** – Mengembalikan saldo publik dan mengirimkan transaksi ke jaringan Solana.

* **Pengindeks** – Pengindeks menyediakan status terenkripsi yang diperlukan dompet untuk membaca saldo dan membuat transaksi privat; siapa pun juga dapat menjalankan pengindeks mereka sendiri tanpa izin sebagai cadangan.

* **Pembukti** – Bukti zero-knowledge dapat dibuat secara lokal atau oleh server pembukti dalam hitungan milidetik, tergantung pada transaksi dan perangkat keras. Helius menggunakan pembuktian berbasis GPU.

Untuk Ring kustom, fitur opsional mencakup RPC Ring opsional untuk menyediakan saldo dan riwayat yang telah didekripsi menggunakan kunci tampilan bersama atau kunci auditor Ring yang dikonfigurasi. Selain itu, transaksi anonim menggunakan relayer agar pengguna tidak muncul sebagai pembayar biaya transaksi.

## Privasi dan Program Solana

Solana Privacy Program (SPP) adalah program utama yang memverifikasi dan mengeksekusi semua transisi status privat. Program Ring kustom dan program ZK Solana menambahkan logika kepatuhan atau aplikasi, lalu memanggil SPP untuk memperbarui status privat.

Program Solana lainnya dapat berinteraksi dengan program-program ini melalui CPI dalam transaksi yang sama, sesuai batas transaksi Solana, seperti batas kedalaman CPI sebesar 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)

Solana Privacy Program memverifikasi bukti zero-knowledge dan memperbarui status privat. Gunakan program ini untuk menyetor token, mentransfer saldo privat, dan menarik token ke akun publik.

Program lain memanggil SPP melalui CPI untuk mengeksekusi transisi status privat.

### Program Ring Kustom

Program Ring Kustom menetapkan izin transfer dan otoritas tambahan apa pun, serupa dengan Token-2022. Gunakan program ini untuk mengonfigurasi auditor, mewajibkan penanda tangan bersama, atau mengizinkan otoritas membekukan saldo.

Program ini memverifikasi bukti ZK untuk menerapkan logika kepatuhan kustomnya, lalu memanggil SPP untuk memperbarui status privat.

### Program ZK Solana

Program zero-knowledge (ZK) Solana memungkinkan escrow privat dalam program Solana untuk menerapkan logika aplikasi pada saldo privat. Anda dapat membuat swap privat, staking, pinjaman, dan lainnya dengan program ZK Solana. Sebagai contoh, swap rahasia dapat menerapkan jumlah dan harga yang telah disepakati tanpa menjadikannya publik.

Program ini memverifikasi bukti ZK dari logika aplikasinya, lalu memanggil SPP secara langsung atau melalui program Ring Kustom untuk memperbarui status privat.

## Pohon Merkle Status dan Forester

Default Ring dan semua Custom Ring menyimpan status privat dalam akun pohon Merkle status yang dikelola oleh node Forester.
Akun pohon membuat komitmen terhadap status privat tanpa menyimpannya dalam akun Solana terpisah.

Oleh karena itu, Anda membaca saldo dan riwayat transaksi dengan metode RPC pengindeks khusus, seperti `getShieldedTransactionsByTags`, bukan dengan metode akun Solana seperti `getAccountInfo`. Lihat [Membaca Saldo Privat](/docs/id/privacy/guides/read-balance) dan [Membaca Riwayat Transaksi Privat](/docs/id/privacy/guides/read-history).

### Throughput

Pohon disimpan dalam satu akun Solana yang dapat ditulis.
Transfer privat yang menulis ke akun ini berbagi batas kunci tulis per akun sebesar 12 juta CU per blok di Solana.
UTXO yang berbeda dapat dibelanjakan secara independen, tetapi transaksi yang menulis ke pohon yang sama tetap berbagi kunci akun dan batas komputasi Solana.

Transfer rahasia menggunakan sekitar 140.000 CU dalam [tolok ukur instruksi](https://github.com/helius-labs/zolana/blob/a3ddedda42b40d4951ae8fcdde2500374c4f2125/program-tests/shielded-pool/CU_BENCHMARK.md#12-transfer-eddsa-2x3).
Dengan demikian, satu pohon mendukung sekitar 86 transfer privat per blok, atau sekitar 215 transaksi per detik dengan waktu blok Solana saat ini sekitar 400 milidetik.

Protokol dapat menambahkan lebih banyak pohon untuk meningkatkan throughput.
Setiap pohon merupakan akun terpisah yang dapat ditulis dengan anggaran komputasi per akunnya sendiri, sehingga transaksi pada pohon yang berbeda tidak bersaing untuk mendapatkan anggaran kunci tulis yang sama.

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

## Antarmuka SPL

Antarmuka SPL memungkinkan interoperabilitas antara token yang disimpan secara publik dan privat. Antarmuka ini merupakan escrow per mint yang dapat dibuat tanpa izin,
tetapi hanya boleh dibuat satu kali per mint.

* Saat menyetor aset SOL dan SPL ke saldo privat, PDA antarmuka yang dimiliki oleh Solana Privacy Program menyimpan token dalam escrow dan membuat UTXO dengan pengguna sebagai pemilik.
* Saat menarik ke saldo publik, UTXO yang ada ditandai sebagai telah dibelanjakan dan token dilepaskan ke akun token Solana.

Untuk mint yang belum memiliki PDA antarmuka, setoran pertama dapat menyertakan instruksi untuk membuat PDA antarmuka dalam transaksi yang sama.

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

## Pelajari Lebih Lanjut

<CardGroup cols={2}>
  <Card title="Overview" icon="book" href="/docs/id/privacy/concepts/overview">
    Ring, jaminan privasi, dan alur transaksi.
  </Card>

  <Card title="Private State and UTXOs" icon="database" href="/docs/id/privacy/concepts/utxo">
    Cara saldo privat disimpan dan dibelanjakan.
  </Card>

  <Card title="Encryption and Privacy Guarantees" icon="key" href="/docs/id/privacy/concepts/encryption">
    Cara aset dienkripsi dan peran pasangan kunci terlindung.
  </Card>

  <Card title="Custom Enterprise Rings" icon="building" href="/docs/id/privacy/integration/enterprise">
    Pelajari cara mengonfigurasi Ring kustom.
  </Card>
</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>


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