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

# Kiến trúc

> Tìm hiểu cách ví, RPC và các chương trình Solana tương tác với các Vòng riêng tư Solana.

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

## Ví riêng tư và người dùng

Người dùng giữ số dư được mã hóa trong Ví riêng tư và ký các giao dịch riêng tư bằng khóa Solana Ed25519 hiện có của họ. Việc tích hợp ví riêng tư sẽ thêm một cặp khóa được bảo vệ vào hệ thống quản lý khóa của bạn. Bạn có thể [tự tích hợp](/docs/vi/privacy/integration/wallet) hoặc sử dụng [Ví riêng tư nhúng](/docs/vi/privacy/integration/embedded-wallet).

## Giao dịch riêng tư

Các giao dịch chuyển tiền riêng tư là giao dịch Solana thông thường. Môi trường thực thi Solana xác minh chữ ký và gọi Chương trình quyền riêng tư Solana, chương trình này xác minh bằng chứng ZK mà không tiết lộ trạng thái được mã hóa.

Một giao dịch chuyển tiền bảo mật điển hình sử dụng khoảng 927 byte, hoàn toàn nằm trong giới hạn 4.096 byte của v1.

<Accordion title="Example Confidential Transfer">
  | Thành phần | Byte |
  | - | -: |
  | Bằng chứng Groth16 | 192 |
  | Dữ liệu lệnh quyền riêng tư khác: bản mã, cam kết, giá trị vô hiệu hóa, khóa và siêu dữ liệu | 418 |
  | Sáu địa chỉ tài khoản × 32 byte | 192 |
  | Một chữ ký Ed25519 | 64 |
  | Blockhash gần đây | 32 |
  | Phiên bản, tiêu đề thông điệp, mặt nạ cấu hình và số lượng | 10 |
  | Giới hạn đơn vị tính toán và dữ liệu tài khoản được tải | 8 |
  | Tiêu đề lệnh | 4 |
  | Bảy chỉ mục tài khoản của lệnh | 7 |
  | **Tổng cộng** | **927** |

  <Info>
    Dành cho ví dụ chuyển tiền bảo mật gồm 2 đầu vào, 3 đầu ra trong đặc tả.
    Xem mã nguồn: [Đặc tả](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)

    Xem [bố cục giao dịch Solana v1](https://solana.com/docs/core/transactions/versioned-transactions#v1-wire-layout).
  </Info>
</Accordion>

## RPC

Một <Tooltip tip="https://devnet.helius-rpc.com/?api-key=<API_KEY> or https://mainnet.helius-rpc.com/?api-key=<API_KEY>">URL RPC Helius duy nhất</Tooltip> cung cấp quyền truy cập vào RPC Solana, trình lập chỉ mục và trình tạo bằng chứng từ xa.

* **RPC Solana** – Trả về số dư công khai và gửi giao dịch lên mạng Solana.

* **Trình lập chỉ mục** – Trình lập chỉ mục cung cấp trạng thái được mã hóa mà ví cần để đọc số dư và tạo giao dịch riêng tư; bất kỳ ai cũng có thể vận hành trình lập chỉ mục riêng mà không cần cấp quyền để dùng làm phương án dự phòng.

* **Trình tạo bằng chứng** – Có thể tạo bằng chứng không tiết lộ thông tin cục bộ hoặc bằng máy chủ tạo bằng chứng trong vài mili giây, tùy thuộc vào giao dịch và phần cứng. Helius sử dụng GPU để tạo bằng chứng.

Đối với các Vòng tùy chỉnh, những tính năng không bắt buộc bao gồm một RPC Vòng tùy chọn để cung cấp số dư và lịch sử đã giải mã bằng khóa xem dùng chung hoặc khóa kiểm toán viên Vòng đã cấu hình. Ngoài ra, giao dịch ẩn danh sử dụng một bên chuyển tiếp để người dùng không xuất hiện với tư cách là người trả phí giao dịch.

## Quyền riêng tư và chương trình Solana

Chương trình quyền riêng tư Solana (SPP) là chương trình chính xác minh và thực thi mọi quá trình chuyển đổi trạng thái riêng tư. Các chương trình Vòng tùy chỉnh và chương trình Solana ZK bổ sung logic tuân thủ hoặc logic ứng dụng, sau đó gọi SPP để cập nhật trạng thái riêng tư.

Các chương trình Solana khác có thể tương tác với những chương trình này qua CPI trong cùng một giao dịch, trong phạm vi giới hạn giao dịch của Solana, chẳng hạn như giới hạn độ sâu CPI là 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>

### Chương trình quyền riêng tư Solana (SPP)

Chương trình quyền riêng tư Solana xác minh bằng chứng không tiết lộ thông tin và cập nhật trạng thái riêng tư. Sử dụng chương trình này để nạp token, chuyển số dư riêng tư và rút token về tài khoản công khai.

Các chương trình khác gọi SPP qua CPI để thực thi quá trình chuyển đổi trạng thái riêng tư.

### Chương trình Vòng tùy chỉnh

Chương trình Vòng tùy chỉnh xác định quyền chuyển tiền và mọi thẩm quyền bổ sung, tương tự như Token-2022. Sử dụng chương trình này để cấu hình kiểm toán viên, yêu cầu người đồng ký hoặc cho phép một thẩm quyền đóng băng số dư.

Chương trình xác minh bằng chứng ZK để thực thi logic tuân thủ tùy chỉnh, sau đó gọi SPP để cập nhật trạng thái riêng tư.

### Chương trình Solana ZK

Các chương trình Solana không tiết lộ thông tin (ZK) cho phép thiết lập tài khoản ký quỹ riêng tư trong chương trình Solana để thực thi logic ứng dụng đối với số dư riêng tư. Bạn có thể xây dựng các chức năng hoán đổi riêng tư, staking, cho vay và nhiều tính năng khác bằng chương trình Solana ZK. Ví dụ: một giao dịch hoán đổi bảo mật có thể thực thi số lượng và mức giá đã thỏa thuận mà không công khai chúng.

Chương trình xác minh bằng chứng ZK cho logic ứng dụng, sau đó gọi SPP trực tiếp hoặc thông qua chương trình Vòng tùy chỉnh để cập nhật trạng thái riêng tư.

## Cây Merkle trạng thái và Forester

Vòng mặc định và tất cả Vòng tùy chỉnh lưu trữ trạng thái riêng tư trong một tài khoản cây Merkle trạng thái do nút Forester duy trì.
Các tài khoản cây cam kết trạng thái riêng tư mà không lưu trữ trạng thái đó trong các tài khoản Solana riêng biệt.

Do đó, bạn đọc số dư và lịch sử giao dịch bằng các phương thức RPC chuyên dụng của trình lập chỉ mục, chẳng hạn như `getShieldedTransactionsByTags`, thay vì các phương thức tài khoản Solana như `getAccountInfo`. Xem [Đọc số dư riêng tư](/docs/vi/privacy/guides/read-balance) và [Đọc lịch sử giao dịch riêng tư](/docs/vi/privacy/guides/read-history).

### Thông lượng

Cây được lưu trữ trong một tài khoản Solana có thể ghi.
Các giao dịch chuyển tiền riêng tư ghi vào tài khoản này dùng chung giới hạn khóa ghi 12 triệu CU trên mỗi tài khoản trong mỗi khối của Solana.
Có thể chi tiêu các UTXO khác nhau một cách độc lập, nhưng những giao dịch ghi vào cùng một cây vẫn dùng chung khóa tài khoản và giới hạn tính toán của Solana.

Một giao dịch chuyển tiền bảo mật sử dụng khoảng 140.000 CU trong [điểm chuẩn lệnh](https://github.com/helius-labs/zolana/blob/a3ddedda42b40d4951ae8fcdde2500374c4f2125/program-tests/shielded-pool/CU_BENCHMARK.md#12-transfer-eddsa-2x3).
Do đó, một cây hỗ trợ khoảng 86 giao dịch chuyển tiền riêng tư trên mỗi khối, tương đương khoảng 215 giao dịch mỗi giây với thời gian tạo khối Solana hiện tại là khoảng 400 mili giây.

Giao thức có thể bổ sung thêm cây để tăng thông lượng.
Mỗi cây là một tài khoản có thể ghi riêng biệt với ngân sách tính toán trên mỗi tài khoản riêng, vì vậy các giao dịch trên những cây khác nhau không cạnh tranh cùng một ngân sách khóa ghi.

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

## Giao diện SPL

Giao diện SPL cho phép các token được nắm giữ công khai và riêng tư tương tác với nhau. Đây là một tài khoản ký quỹ cho mỗi mint, có thể được tạo mà không cần cấp quyền
nhưng chỉ cần tạo một lần cho mỗi mint.

* Khi nạp tài sản SOL và SPL vào số dư riêng tư, một PDA giao diện thuộc sở hữu của Chương trình quyền riêng tư Solana sẽ ký quỹ token và tạo UTXO với người dùng là chủ sở hữu.
* Khi rút về số dư công khai, các UTXO hiện có được đánh dấu là đã chi tiêu và token được giải phóng vào các tài khoản token Solana.

Đối với các mint chưa có PDA giao diện, lần nạp đầu tiên có thể bao gồm một lệnh để tạo PDA giao diện trong cùng giao dịch.

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

## Tìm hiểu thêm

<CardGroup cols={2}>
  <Card title="Overview" icon="book" href="/docs/vi/privacy/concepts/overview">
    Các Vòng, bảo đảm quyền riêng tư và luồng giao dịch.
  </Card>

  <Card title="Private State and UTXOs" icon="database" href="/docs/vi/privacy/concepts/utxo">
    Cách lưu trữ và chi tiêu số dư riêng tư.
  </Card>

  <Card title="Encryption and Privacy Guarantees" icon="key" href="/docs/vi/privacy/concepts/encryption">
    Cách mã hóa tài sản và vai trò của cặp khóa được bảo vệ.
  </Card>

  <Card title="Custom Enterprise Rings" icon="building" href="/docs/vi/privacy/integration/enterprise">
    Tìm hiểu cách cấu hình một Vòng tùy chỉnh.
  </Card>
</CardGroup>

## Không tìm thấy nội dung bạn đang tìm kiếm?

<Callout type="info">
  Hãy liên hệ với chúng tôi! [Telegram](https://t.me/tilo_light) | [Email](mailto:sales@helius.xyz) | [Liên hệ](https://www.helius.dev/contact)
</Callout>


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