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

# コンセプト

> Helius Privacyの動作を理解し、ユーザーフロー、転送において公開または非公開となるもの、カスタマイズ可能なポリシーを備えたリングを含む情報を提供します。

## リングの概要

Solana上のすべてのトランザクションは公開されており、アドレス、バランス、転送履歴は誰でも見ることができます。
リングはオンチェーンバランスを暗号化し、デフォルトでは常にノンカストディアルです：

* 機密リングでは、資産と金額は非公開で、送信者と受信者は見えるままです。
* 匿名リングでは、資産、金額、送信者、受信者がすべて非公開です。

<img src="https://mintcdn.com/helius/ANceN_N6YhA2y60D/images/privacy/transaction-visibility-cards.svg?fit=max&auto=format&n=ANceN_N6YhA2y60D&q=85&s=d775dd0d4ebcf7b299ef0f3ccfb025ca" alt="2つのSolana取引カードが並んでいます。機密カードは取引ハッシュ、送信者、受信者を示し、資産と金額は黒く塗りつぶされています。匿名カードは取引ハッシュのみを表示し、送信者、資産、金額、受信者はすべて黒く塗りつぶされています。トランザクションハッシュはどちらも公開されたままです。" width="2320" height="540" data-path="images/privacy/transaction-visibility-cards.svg" />

さまざまな種類のリングが存在します：

1. デフォルトリングは許可不要で機密です。資産と金額を暗号化し、誰でも使用でき、カスタムポリシーコントロールはありません。
2. カスタムリングはSolanaプログラムで、Solana上でプライバシーをプログラム可能にし、Token-2022と似た機能を持ちます。カスタムリングは、ポリシー、レポーティング、可視性のルールを持って機密または匿名状態になります。

<Info>
  ほとんどのアプリケーションには、許可不要で機密性があるデフォルトリングを推奨します。
  カスタムポリシーやコンプライアンスコントロールが必要な場合は、[こちら](https://www.helius.dev/contact)からご相談ください。
</Info>

<img src="https://mintcdn.com/helius/iNBk0QZ3vdaUiFW5/images/privacy/privacy-network.svg?fit=max&auto=format&n=iNBk0QZ3vdaUiFW5&q=85&s=af61b324d07f1184da1f3912d9f050fb" alt="2つのリングを保持する破線のオンチェーンゾーンとして表示されるプライベートバランス。デフォルトリングは機密性があり、セルフカストディアルで、許可不要です。カスタムリングは機密性または匿名性があり、セルフカストディアルで、カスタムポリシーとカスタムコンプライアンスを追加します。各デポジットはSolanaパブリックバランス層にデポジットおよび引き出しを行います。" width="850" height="540" data-path="images/privacy/privacy-network.svg" />

### カスタムリングはプログラム可能

カスタムリングはSolanaプログラムで、プライバシーをプログラム可能にします。Token-2022と似た特徴があります。

カスタムリングは転送および可視性/監査用に完全にカスタムルールを定義できます。

<Accordion title="カスタムリングポリシーの例">
  | ポリシー          | 例                              |
  | ------------- | ------------------------------ |
  | 許可された資産       | USDCまたは特定の発行されたステーブルコインのみ      |
  | 転送制限          | 閾値を超える場合は追加承認が必要               |
  | 共署名           | 選択された支払いにコンプライアンス承認が必要         |
  | 許可リスト         | 承認されたアカウント、商人、リングにのみ転送を許可      |
  | ブロックリスト       | 制裁対象やリスクのある目的地をブロック            |
  | フリーズ/解凍       | 調査中はバランスをフリーズ                  |
  | 永久代理人         | 設定された権威がポリシーの下で資金を移動可能         |
  | 監査人の可視性       | コンプライアンス、会計、または規制当局がリング活動を確認   |
  | クロスリングルール     | 特定のリング間の移動を許可またはブロック           |
  | 引き出しルール       | 公共の引き出しを制限または承認を要求             |
  | スマートアカウントサポート | スマートアカウントでのネイティブ使用を許可          |
  | アカウント回復       | 設定された権威またはフォールバックIDでアカウントを回復可能 |
</Accordion>

リングの権威はリング作成時に宣言され、ユーザーはリングを選ぶ前にポリシーを確認できます。
デフォルトリングは許可不要であり、カスタムの権威や監査人はありません。

<Tip>
  カスタムリングのセットアップをご希望の場合は、[こちら](https://www.helius.dev/contact)からご連絡ください。
  ご自身のコンプライアンスを持ち込むか、HeliusのKYCおよび制裁スクリーニングソリューションを利用できます。
</Tip>

## ユーザーフローとプライバシーの保証

Helius Privacyによるトランザクションはネイティブにオンチェーンで実行され、他のSolanaプログラムと組み合わせて単一のトランザクションにします。
ユーザーはリングに入る、内部でプライベートに転送する、またはリングから退出することができます：

**1. デポジットまたはオンランプ。** ユーザーはトークンをパブリックなSolana残高から、またはフィアット残高から直接プライベート残高に送信します。

**2. プライベート転送。** ユーザーは同じリング内でプライベート残高間、または別のリングにトークンを送信します。

**3. 引き出しまたはオフランプ。** ユーザーはプライベートからパブリックSolana残高、または直接フィアット残高にトークンを送信します。

<img src="https://mintcdn.com/helius/df3Lmw7POmPkuUJN/images/privacy/privacy-rings-lifecycle.svg?fit=max&auto=format&n=df3Lmw7POmPkuUJN&q=85&s=54d057b2674ad3a194575858d35db167" alt="リングのライフサイクル図。100 USDCの公開バランスがリングにデポジットされ、USD / EUR / ...のフィアットバランスが同じリングにオンランプし、プライベート転送で2つのプライベートバランス間で資金が移動し、その後パブリックバランスに引き出し、またはフィアットバランスにオフランプします。" width="1420" height="240" data-path="images/privacy/privacy-rings-lifecycle.svg" />

ユーザーはSolanaウォレットアドレスにトークンを送信します。
プライバシーAPIは、受取人が持っている場合、転送を自動的にプライベートウォレットにルーティングします。
そうでない場合、転送は受取人のパブリックアドレスへの引き出しです。

受取人のパブリックウォレットアドレスを知っているだけで、誰でもプライベートウォレットにデポジットできます。
送信者のアプリがプライバシーをサポートしていない場合、受取人は資金を公開で受け取り、次のステップで自分のプライベート残高に暗号化できます。

### プライベート残高にデポジット：何が非公開か

ユーザーは2つの方法でプライベート残高にデポジットできます：

1. フィアット残高からプライベート暗号残高へのオンランプ
2. 公開からプライベート暗号残高へのデポジット

<Tabs>
  <Tab title="On-ramp from fiat balance">
    | Field                    | Visibility                                                  | Why                                                                                                                                                                                                                                                                                                   |
    | ------------------------ | ----------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
    | Fiat balance and payment | Not onchain                                                 | The fiat payment is not onchain                                                                                                                                                                                                                                                                       |
    | Asset                    | Private                                                     | The asset is encrypted onchain                                                                                                                                                                                                                                                                        |
    | Amount                   | Private                                                     | The transferred amount is encrypted onchain                                                                                                                                                                                                                                                           |
    | Onramp Provider          | Public in a confidential Ring, private in an anonymous Ring | In a confidential Ring the wallet address of the provider is visible. An anonymous Ring uses a relayer, so the public ledger does not reveal the source private wallet.                                                                                                                               |
    | User wallet address      | Public in a confidential Ring, private in an anonymous Ring | In a confidential Ring the user wallet address is visible onchain. The user address used for the onramp cannot be linked to the user, if it is new and is not later tied to a known wallet address by a confidential transfer. In an anonymous Ring, the public ledger does not reveal the recipient. |
  </Tab>

  <Tab title="Deposit from public crypto balance">
    | Field                      | Visibility | Why                                                |
    | -------------------------- | ---------- | -------------------------------------------------- |
    | Source public wallet       | Public     | The source wallet address is visible onchain       |
    | Asset                      | Public     | The asset is visible onchain                       |
    | Amount                     | Public     | The deposited amount is visible onchain            |
    | Destination wallet address | Public     | The destination wallet address is visible onchain  |
    | Resulting private balance  | Private    | The resulting private balance is encrypted onchain |
  </Tab>
</Tabs>

### プライベート転送：何が非公開か

ユーザーは2つの方法でプライベート転送を送信できます：

1. 同じリング内での転送
2. 別のリングへの転送

<Info>
  ほとんどのアプリケーションには、許可不要で機密性があるデフォルトリングを推奨します。
  カスタムポリシーやコンプライアンスコントロールが必要な場合は、[こちら](https://www.helius.dev/contact)からご相談ください。
</Info>

<Tabs>
  <Tab title="Permissionless Confidential Ring">
    | Field                 | Visibility | Why                                                                  |
    | --------------------- | ---------- | -------------------------------------------------------------------- |
    | Asset                 | Private    | The asset is encrypted onchain                                       |
    | Amount                | Private    | The transferred amount is encrypted onchain                          |
    | Source private wallet | Public     | In a confidential Ring the source private wallet is visible onchain. |
    | Recipient             | Public     | In a confidential Ring the recipient is visible onchain.             |
  </Tab>

  <Tab title="Custom Rings">
    Transfers from and within a ring reveal the program ID of the custom Ring.

    A balance in a Custom Ring can exit to an SPL token account, to the Default Ring, or to another Ring, as long as the source Ring's policy permits it.
    The default Ring is permissionless and does not have a policy or authority.

    One transaction can combine balances from the Default Ring and one Custom Ring. A transfer between two Custom Rings routes through the Default Ring.

    | Private transfer       | Custom confidential Rings | Custom anonymous Rings                                                                                      | Default confidential to or from Custom confidential | Confidential (Default or Custom) to Custom anonymous | Custom anonymous to confidential (Default or Custom)                                                        |
    | ---------------------- | ------------------------- | ----------------------------------------------------------------------------------------------------------- | --------------------------------------------------- | ---------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- |
    | Amount                 | Private                   | Private                                                                                                     | Private                                             | Private                                              | Private                                                                                                     |
    | Asset                  | Private                   | Private                                                                                                     | Private                                             | Private                                              | Private                                                                                                     |
    | Source private wallet  | Public                    | Private. A relayer submits the transaction, so the public ledger does not reveal the source private wallet. | Public                                              | Public                                               | Private. A relayer submits the transaction, so the public ledger does not reveal the source private wallet. |
    | Recipient              | Public                    | Private                                                                                                     | Public                                              | Private                                              | Public                                                                                                      |
    | Custom Ring program ID | Public                    | Public                                                                                                      | Public                                              | Public                                               | Public                                                                                                      |
  </Tab>
</Tabs>

### プライベート残高からの引き出し：何が非公開か

ユーザーは2つの方法でプライベート残高から引き出せます：

1. プライベート暗号からフィアット残高へのオフランプ
2. プライベート暗号から公開暗号残高への引き出し

<Tabs>
  <Tab title="Off-ramp to fiat balance">
    | Field               | Visibility                                                  | Why                                                                                                                                                                                                                                                                                                        |
    | ------------------- | ----------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
    | Fiat payout         | Not onchain                                                 | The fiat payout is not onchain                                                                                                                                                                                                                                                                             |
    | Asset               | Private                                                     | The asset is encrypted onchain                                                                                                                                                                                                                                                                             |
    | Amount              | Private                                                     | The transferred amount is encrypted onchain                                                                                                                                                                                                                                                                |
    | Offramp Provider    | Public in a confidential Ring, private in an anonymous Ring | In a confidential Ring an observer can see that a user offramped with this Offramp Provider. In an anonymous Ring the public ledger does not reveal sender and recipient.                                                                                                                                  |
    | User wallet address | Public in a confidential Ring, private in an anonymous Ring | In a confidential Ring the user wallet address is visible onchain. Another wallet address cannot be linked to this address if this address is new and is not later tied to a known wallet address by a confidential transfer. In an anonymous Ring the public ledger does not reveal sender and recipient. |
  </Tab>

  <Tab title="Withdraw to public crypto balance">
    | Field                     | Visibility | Why                                                                  |
    | ------------------------- | ---------- | -------------------------------------------------------------------- |
    | Source private wallet     | Public     | In a confidential Ring the source private wallet is visible onchain. |
    | Asset                     | Public     | The asset is visible onchain                                         |
    | Amount                    | Public     | The withdrawn amount is visible onchain                              |
    | Destination public wallet | Public     | The destination wallet address is visible onchain                    |
    | Resulting public balance  | Public     | The resulting public balance is visible onchain                      |
    | Remaining private balance | Private    | The remaining balance is encrypted onchain                           |
  </Tab>
</Tabs>

## 高レベルのトランザクションフロー

プライベート転送は公開転送に似ており、単一のSolanaトランザクションで実行されます。

<Tabs>
  <Tab title="プライベート転送">
    1. ユーザーのSOLまたはSPL残高がオンチェーンで暗号化されます。
    2. 暗号化された状態を取得してローカルで復号、または委任されたプロバイダが復号して復号化された状態を提供します。
    3. ウォレットは金額と受取人を設定し、ZK証明を要求します。
    4. デフォルトでRPCプロバイダがZK証明を生成し、それを返します。カスタムリングはポリシー証明も必要です。
    5. ウォレットがSolanaトランザクションを構築します。ZK証明は暗号化された状態を明らかにせずに検証されます。呼び出されるプログラムや署名して提出するのはリングに依存します：

    |             | 無許可機密リング                          | カスタム機密リング                         | カスタム匿名リング                          |
    | ----------- | --------------------------------- | --------------------------------- | ---------------------------------- |
    | 呼び出されたプログラム | Solanaプライバシープログラム                 | カスタムリングプログラムとSolanaプライバシープログラム    | カスタムリングプログラムとSolanaプライバシープログラム     |
    | 署名者         | 送信者が署名します。ガススポンサーが手数料を支払う場合があります。 | 送信者が署名します。ガススポンサーが手数料を支払う場合があります。 | リレーイヤーがトランザクションを送信すると送信者はリンクされません。 |

    6. アプリはSolanaトランザクションハッシュを介してステータスを追跡します。

    <Tabs sync={false}>
      <Tab title="無許可機密リング">
        ```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
            participant Solana

            rect rgba(255, 107, 53, 0.06)
                Note left of Wallet: Local
                Wallet->>RPC: Fetch encrypted state
                RPC-->>Wallet: Encrypted state
                Note over Wallet: Decrypt locally
            end
            rect rgba(255, 107, 53, 0.06)
                Note left of Wallet: Delegated
                Wallet->>RPC: Get private balance
                Note over RPC: Decrypt and serve decrypted state
                RPC-->>Wallet: Decrypted state
            end

            Note over Wallet: Set amount and recipient
            Wallet->>RPC: Request ZK proof
            Note over RPC: Generate ZK proof
            RPC-->>Wallet: ZK proof
            Note over Wallet: Build transaction, sign

            Wallet->>RPC: Submit Transaction
            RPC->>Solana: Forward transaction
            Note over Solana: Verify signatures
            Note over Solana: CPI Solana Privacy Program
            Note over Solana: Verify ZK proof
            RPC-->>Wallet: Transaction signature
        ```
      </Tab>

      <Tab title="カスタム機密リング">
        ```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
            participant Solana

            rect rgba(255, 107, 53, 0.06)
                Note left of Wallet: Local
                Wallet->>RPC: Fetch encrypted state
                RPC-->>Wallet: Encrypted state
                Note over Wallet: Decrypt locally
            end
            rect rgba(255, 107, 53, 0.06)
                Note left of Wallet: Delegated
                Wallet->>RPC: Get private balance
                Note over RPC: Decrypt and serve decrypted state
                RPC-->>Wallet: Decrypted state
            end

            Note over Wallet: Set amount and recipient
            Wallet->>RPC: Request ZK proof
            Note over RPC: Generate ZK proof and policy proof
            RPC-->>Wallet: ZK proof and policy proof
            Note over Wallet: Build transaction, sign

            Wallet->>RPC: Submit Transaction
            RPC->>Solana: Forward transaction
            Note over Solana: Verify signatures
            Note over Solana: CPI Custom Ring Program
            Note over Solana: Verify policy ZK proof
            Note over Solana: CPI Solana Privacy Program
            Note over Solana: Verify SPP ZK proof
            RPC-->>Wallet: Transaction signature
        ```
      </Tab>

      <Tab title="カスタム匿名リング">
        ```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
            participant Relayer
            participant Solana

            rect rgba(255, 107, 53, 0.06)
                Note left of Wallet: Delegated
                Wallet->>RPC: Get private balance
                Note over RPC: Decrypt and serve decrypted state
                RPC-->>Wallet: Decrypted state
            end

            Note over Wallet: Set amount and recipient, sign
            Wallet->>RPC: Request ZK proof
            Note over RPC: Generate ZK proof and policy proof
            RPC-->>Wallet: ZK proof and policy proof
            Note over Wallet: Build transaction

            Wallet->>Relayer: Submit Transaction
            Relayer->>Solana: Forward transaction
            Note over Solana: Verify signatures
            Note over Solana: CPI Custom Ring Program
            Note over Solana: Verify policy ZK proof
            Note over Solana: CPI Solana Privacy Program
            Note over Solana: Verify SPP ZK proof
            Relayer-->>Wallet: Transaction signature
        ```
      </Tab>
    </Tabs>
  </Tab>

  <Tab title="Solana転送">
    1. ユーザーのSOLまたはSPL残高はオンチェーンで公開されています。
    2. ウォレットは公開状態を読み取り、転送を構築し、所有者が署名します。
    3. Solanaランタイムが署名を検証し、システムプログラムまたはトークンプログラムが呼び出され、公開バランスが更新されます。
    4. アプリはSolanaトランザクションハッシュを介してステータスを追跡します。

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

        Wallet->>RPC: Get public balance
        RPC-->>Wallet: Public state
        Note over Wallet: Build transfer, owner signs
        Wallet->>RPC: sendTransaction
        RPC->>Solana: Forward transaction
        Note over Solana: Verify signatures
        Note over Solana: CPI System / Token Program
        Note over Solana: Update balance
        RPC-->>Wallet: Transaction signature
    ```
  </Tab>
</Tabs>

## プライベートウォレット

ユーザーは暗号化された残高をプライベートウォレットに保持します。

プライベートウォレットはユーザーの公開Solanaアドレスで転送を受け取り、これは`inbox`として機能します。
このため、送信者は常に受取人のSolanaアドレスを入力します。

| 比較          | Solanaウォレット | プライベートウォレット           |
| ----------- | ----------- | --------------------- |
| 公開ID        | Solanaアドレス  | 同じSolanaアドレス          |
| オンチェーンストレージ | 公開トークンアカウント | プライベートトークンアカウント（UTXO） |

### プライベートウォレットの作成

プライベートウォレットの作成時に、Solanaアドレスがオンチェーンレジストリに登録されます。

このレジストリは1つのSolanaアドレスを1つの<Tooltip tip="シールドアドレスはSolanaキーではなく、署名、ナルリフィア、視覚化の公開キーから決定論的に導出されます。">シールドアドレス</Tooltip>にマッピングします。
転送は裏ですべてシールドアドレスに暗号化されます。
複数のSolanaアドレスが1つのシールドアドレスを共有することはできません。
各レジストリレコードは<Tooltip tip="regyS5rkAcw2YzDJCmTwCTHs2s246FXxbmuRZ42u2PD">[レジストリプログラム](https://orbmarkets.io/address/regyS5rkAcw2YzDJCmTwCTHs2s246FXxbmuRZ42u2PD)</Tooltip>によって所有されているPDAであり、誰でも調べることでSolanaアドレスがプライベート転送を受け取ることができるかどうかを確認できます。

<img src="https://mintcdn.com/helius/NHXFc7ysJd1NoY9P/images/privacy/wallet-shape.svg?fit=max&auto=format&n=NHXFc7ysJd1NoY9P&q=85&s=7e96783047c79ed30c4e995623f197a6" alt="ユーザーウォレットが2つの公開Solanaウォレットとプライベートウォレットを表示しています。受取トークンが公開ウォレットAの公開キーからプライベートウォレットのシールドアドレスに接続されています。" width="1120" height="570" data-path="images/privacy/wallet-shape.svg" />

<Info>
  ウォレットアプリでは、ユーザーが専用の"プライベートウォレット"パブリックキー用にのみプライベートウォレットを作成させるか、
  任意のパブリックキー用に作成させることができます。
</Info>

### プライベートウォレットへの転送

すべての転送で、プライバシーAPIはレジストリを参照して受取人がプライベートウォレットを持っているか確認します。
一致した場合、裏でシールドアドレスを使用して転送を暗号化します。

<Info>
  プライベート転送の受取人がプライベートウォレットを持っていない場合、プライバシーAPIは転送をプライベートからパブリックな引き出しに解決します。
</Info>

ユーザーが誤って公開バランスに引き出さないように、UIで別のユーザー署名を要求することを推奨します。

```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 User
    participant Privacy API
    participant Solana

    User->>Privacy API: Initiate Private Transfer
    Privacy API->>Solana: Look up Solana address
    rect rgba(255, 107, 53, 0.06)
        Note left of User: Recipient has a Private Wallet
        Solana-->>Privacy API: Registered
        Privacy API->>User: Request Signature
        User->>Privacy API: Sign private transfer
        Privacy API-->>Solana: Send Private Transfer
    end
    rect rgba(255, 107, 53, 0.06)
        Note left of User: Recipient has no Private Wallet
        Solana-->>Privacy API: Not Registered
        Privacy API->>User: Request Signature
        User->>Privacy API: Sign to Confirm Withdrawal
        Privacy API-->>Solana: Private-to-Public Withdrawal
    end
```

### キー管理

プライベートウォレットは、SolanaキーからシールドキーペアをSolanaウォレットに追加します。

| キー       | Solanaウォレット   | プライベートウォレット          |
| -------- | ------------- | -------------------- |
| 公開キー     | 転送の受取用に共有     | 転送の受取用に共有            |
| 秘密キー     | トランザクション署名に使用 | トランザクション署名に使用        |
| シードフレーズ  | ウォレットを再作成します  | ウォレットを再作成します         |
| シールドキーペア | 該当なし          | 署名、ナルリファイア、閲覧キーのバンドル |

シールドキーペアは署名、ナルリファイア、閲覧キーのバンドルであり、Solanaキーペアではありません。

| キー        | 機密リング                | カスタム匿名リング            |
| --------- | -------------------- | -------------------- |
| 署名キー      | メインウォレットのEd25519     | プライベートウォレットのP-256    |
| ナルリファイアキー | UTXOを使用済みとしてマーク      | UTXOを使用済みとしてマーク      |
| 観覧キー      | 読み取り専用P-256。バランスを復号。 | 読み取り専用P-256。バランスを復号。 |

シールドアドレスはシールドキーペアの公開キーであり、転送はそれに暗号化されます。

```
ShieldedAddress = (signing_pk, nullifier_pk, viewing_pk)
```

#### シールドキーペアの作成

ウォレットは2つの方法でシールドキーペアを作成できます。

1. **シードフレーズからキーを導出します。**

   * シードベースのウォレット用に推奨されるアプローチです。
   * 機密リング：署名キーはSolanaウォレットがそのシードから導出するEd25519キーと同じです。ナルリファイアキーと観覧キーは同じシードから導出される追加のキーです。
   * カスタム匿名リング：署名キーはウォレットシードから導出される追加のP-256キーです。
   * Solanaウォレットを再作成する方法と同じ方法でシールドキーペアを常に再作成できます。

2. **既存のSolanaキーで固定メッセージからキーを導出します。**

   * Solana署名は決定論的であるため、同じSolanaキーペアは常に同じシールドキーペアを生成します。アプリは秘密キーを受け取りません。
   * テストやシードフレーズを使用しないウォレットに推奨されるアプローチです。統合ウォレットは署名が第三者に露出されないことを保証する必要があります。

#### シールドキーペアの統合

ウォレットはネイティブ[ウォレット統合](/docs/ja/privacy/integration/wallet)によりシールドキーペアを自ら保持できます。
[組込みプライバシーウォレット](/docs/ja/privacy/integration/embedded-wallet)では、ウォレットプロバイダがシールドキーペアを持ち、そのキー操作を実行します。

| キー管理                                                      | シールドキーペアを保持するのは誰か | その操作の実行場所              |
| --------------------------------------------------------- | ----------------- | ---------------------- |
| ネイティブ[ウォレット統合](/docs/ja/privacy/integration/wallet)            | ウォレット             | デバイス上                  |
| [組込みプライバシーウォレット](/docs/ja/privacy/integration/embedded-wallet) | ウォレットプロバイダ        | ウォレットプロバイダのインフラストラクチャ内 |

### 復号モードとウォレットの同期

所有者のみが観覧キーでプライベートウォレットバランスを復号できます。

選択的開示のために、所有者は観覧キーを監査人と共有し、監査人が利用履歴を読み取ることができます。
カスタムリングでは、ポリシーはそのカスタムリングからすべてのバランスを復号できる監査人を宣言できます。

機密リング（デフォルトリングおよび機密カスタムリング）はローカルおよび委任された復号をサポートします。
匿名リング（カスタムリングのみ）は委任された復号のみをサポートします。

| モード  | 復号が行われる場所     | 誰が閲覧アクセスを持っているか | ウォレットのトレードオフ                    | 使用者                        |
| ---- | ------------- | --------------- | ------------------------------- | -------------------------- |
| ローカル | ウォレット内        | ウォレットのみ         | ベストプライバシーだがローカル状態と同期ライフサイクルが必要  | 機密リング：デフォルトリングおよび機密カスタムリング |
| 委任   | 認可されたRPCプロバイダ | ウォレット + プロバイダ   | ローカル同期作業が少ないがプロバイダがバランスと履歴を表示可能 | どのリングでも使用：匿名カスタムリングで唯一のモード |

<Info>
  ウォレットは、バックフィルが実行されるたびにバランスを復号して更新する必要があります：ウォレットのロック解除時、
  プライベートウォレットのオープン時、アプリの再開時、ネットワーク再接続時、ストリームギャップ時、またはウォレットの復元時。
</Info>

#### ローカル復号

ローカル復号モードでは、ウォレットはバランスと履歴をローカルで復号して同期します。
Heliusサーバーは、ニーモニック、シード、署名秘密キー、観覧秘密キー、ナーリファイアーシークレットを受け取らない。

#### 委任された復号

委任された復号モードでは、ウォレットと選択されたプロバイダは観覧キーを共有します。
これによりプロバイダはバランスと履歴を復号できますが、支払う権限はない。
ウォレットは、プロバイダが過去の活動を同期する権限を与えたとき、過去の観覧キーを共有することもある。

監査人アクセスは委任された復号とは別である。
監査人はポリシー指定されたリングの可視性を受けるが、委任されたプロバイダはウォレットのスケープの同期アクセスを受ける。

#### インデクサは暗号化された状態を提供

公開ウォレットがSolana RPCに依存するように、プライベートウォレットもインデクサに依存します。
インデクサは、ウォレットがバランスを読み取りプライベートトランザクションを構築するために必要な暗号化された状態を提供します。

既定では、インデクサは<Tooltip text="https://devnet.helius-rpc.com/?api-key=<API_KEY> / https://mainnet.helius-rpc.com/?api-key=<API_KEY>">Helius RPC URL</Tooltip>を通じてアクセス可能です。fallbackとして任意に独自のインデクサを許可なく運営することができます。

## プライベートウォレットバランス

プライベートウォレットバランスはUTXO（使用されていないトランザクションアウトプット）としてプライベートSolanaトークンアカウントにオンチェーンで保持され、Solanaトークンアカウントではありません。
デフォルトリングとすべてのカスタムリングはすべてのプライベートバランスを1つの状態マークルツリーに保存します。

プライベートウォレットバランスはプライベートウォレットによって所有されるすべてのUTXOの合計です。
Solanaプログラムは通常のSolanaアカウントと同様にUTXOを所有できます。
このドキュメントでは、プライベートSolanaトークンアカウントとUTXOを同じ意味で使用します。

<img src="https://mintcdn.com/helius/KNGZoSuCXDUVm6yU/images/privacy/utxo-set-to-wallet.svg?fit=max&auto=format&n=KNGZoSuCXDUVm6yU&q=85&s=92c14cfcf72e56cbaff498a7b95c638b" alt="複数のUTXOノートに接続されたプライベートウォレット。各ノートで1つの資産の量を保持。ウォレットバランスはノートの合計。" width="700" height="276" data-path="images/privacy/utxo-set-to-wallet.svg" />

<Accordion title="UTXOとSolanaアカウントにおけるバランス">
  ユーザーエクスペリエンスにおいて、バランスがUTXOまたはSolanaトークンアカウントで保持されているかどうかは重要ではありません。

  技術的には、公開バランスを使うことはSolanaトークンアカウントの`amount`フィールドから減少します。
  一方、プライベートバランスを使うことはUTXOの`amount`フィールドを書き換えません。
  その代わり、プライベートトランザクションは既存のUTXOをSDKで自動的に選択されたインプットとして利用し、
  インプットを消費し、受取人と送信者の残りのバランスのための新しいアウトプットを作成します。

  たとえば、アリスが50 USDCを持っていてボブに35を送信する場合:

  * Solanaトークンアカウントでは、彼女の`amount`フィールドは50から15に変わり、ボブのものは35増えます。この数値はその場で変わります。
  * UTXOでは、アリスは1つの50 USDCノートを持っていて、トランザクションはそれを使い、その後ボブのために35 USDCのノートとアリスのために15 USDCのチェンジノートを作成します。彼女の古い50ノートは今や使われました。

  <Tabs>
    <Tab title="1つのインプットノート">
      <img src="https://mintcdn.com/helius/KNGZoSuCXDUVm6yU/images/privacy/spend-comparison.svg?fit=max&auto=format&n=KNGZoSuCXDUVm6yU&q=85&s=3d0ce046ce268daf75ab8546766bc427" alt="アリスが彼女の50 USDCからボブに35を送信します。Solanaトークンアカウントでは、量フィールドがその場で変わり50から15になります。UTXOでは、アリスの50 USDCノートが使われ、ボブに35 USDCノート、アリスに15 USDCチェンジノートが作成されます。" width="1016" height="240" data-path="images/privacy/spend-comparison.svg" />
    </Tab>

    <Tab title="複数のインプットノート">
      <img src="https://mintcdn.com/helius/KNGZoSuCXDUVm6yU/images/privacy/spend-comparison-multi.svg?fit=max&auto=format&n=KNGZoSuCXDUVm6yU&q=85&s=f4502ff2086c41f41908e337f3c12f7b" alt="アリスが彼女の50 USDCからボブに35を送信しますが、それは3つのノート（20, 20, 10）として保持されています。Solanaトークンアカウントでは、量フィールドがその場で変わり50から15になります。UTXOでは、3つのインプットノートすべてが使われ、新しい35 USDCノートがボブ用に、15 USDCチェンジノートがアリス用に作成されます。" width="1016" height="240" data-path="images/privacy/spend-comparison-multi.svg" />
    </Tab>
  </Tabs>

  |      | Solanaトークンアカウント           | プライベートSolanaトークンアカウント（UTXO）    |
  | ---- | ------------------------- | ------------------------------ |
  | 保持   | 1つのバランス数を`amount`フィールドに保持 | ある資産の一定量を持つノートのセット             |
  | バランス | アカウント上の数値                 | 未使用のUTXOの合計                    |
  | 使用   | `amount`フィールドからその場で差し引く   | インプットUTXOを消費し、新しいチェンジUTXOを書き込む |
  | 可視性  | オンチェーンで公開                 | オンチェーンで暗号化                     |

  <Info>
    SOLおよびSPL資産のプライベートバランスにデポジットすると、Solana Privacy Programによって所有されるインターフェースPDAがトークンをエスクローし、ユーザーを所有者としてUTXOを作成します。
  </Info>

  パブリックバランスに引き出しとき、既存のUTXOは使用済みとしてマークされ、トークンはSolanaトークンアカウントにリリースされます。
</Accordion>

1つのプライベートウォレットが複数のリングでバランスを保持することができ、リングの数には制限がありません。
バランスがどのリングに属するかは、ウォレットの特性ではなく、それぞれのUTXOの`policy_program_id`フィールドに保存される特性です。

## プライベートSolanaトークンアカウント

プライベートSolanaトークンアカウントはUTXOであり、2つの主要な違いを持ちながらSolanaトークンアカウントと同様に機能します：

* プライベートSolanaトークンアカウントは、作成時にレンタ免除が不要であり、
* そのバランスはオンチェーンで暗号化されています。

それでもプライベートSolanaトークンアカウントは同じデータを保存します:

* **資産:** UTXOが保持する単位のミント。SOLはデフォルトのミントアドレスです。資産はSOL、SPL、またはToken-2022のいずれかです。
* **量:** ノートが保持する`asset`単位数は、その資産の最小単位です。
* **プログラムとポリシーデータ:** 設定されたリングポリシーのための追加のToken-2022のような機能

<Tabs>
  <Tab title="図">
    <img src="https://mintcdn.com/helius/KNGZoSuCXDUVm6yU/images/privacy/account-comparison-private.svg?fit=max&auto=format&n=KNGZoSuCXDUVm6yU&q=85&s=860d0d2f3894b0a0ac169b82e538a934" alt="プライベートSolanaトークンアカウント。Solana Privacy Programはプライベートトークンアカウントを所有し、それがPrivateAccountフィールド（所有者、資産、量、ポリシーデータ、ポリシープログラムID）に展開されます。" width="1080" height="590" data-path="images/privacy/account-comparison-private.svg" />
  </Tab>

  <Tab title="コード">
    各プライベートSolanaトークンアカウントに保存される完全なレコードはフラットUTXOです：

    ```rust Private Solana Token Account (UTXO) theme={"system"}
    struct Utxo {
        /// Constant separating UTXOs from other Poseidon-hashed records.
        domain: u16,
        /// Recipient's `owner_hash` from their Shielded Address.
        /// Senders write this value directly; the spender supplies the preimage
        /// components as proof witness.
        owner: [u8; 32],
        /// Asset mint. SOL is Address::default().
        asset: Address,
        /// Amount in the smallest unit of `asset`.
        amount: u64,
        /// Random bytes ensuring distinct UTXO hashes for equal
        /// `(owner, asset, amount)` triples.
        blinding: [u8; 31],
        /// Arbitrary program data.
        program_data: Option<Vec<u8>>,
        /// Arbitrary policy data.
        policy_data: Option<Vec<u8>>,
        /// The policy program that authorizes spends of this UTXO.
        policy_program_id: Option<Address>,
    }
    ```
  </Tab>
</Tabs>

<Accordion title="Solanaトークンアカウントを表示">
  <Tabs>
    <Tab title="図">
      <img src="https://mintcdn.com/helius/KNGZoSuCXDUVm6yU/images/privacy/account-comparison-solana.svg?fit=max&auto=format&n=KNGZoSuCXDUVm6yU&q=85&s=89ff901091255f2038972208fcb5d538" alt="Solanaトークンアカウント。アカウントデータ（ミント、所有者、量）で展開されたアカウント情報フィールド（データ、実行可能、ランポート、所有者）に拡張されたトークンプログラム所有のトークンアカウント。" width="1080" height="462" data-path="images/privacy/account-comparison-solana.svg" />
    </Tab>

    <Tab title="コード">
      ```rust Solana Token Account theme={"system"}
      pub struct Account {
          /// The mint associated with this account
          pub mint: Pubkey,
          /// The owner of this account.
          pub owner: Pubkey,
          /// The amount of tokens this account holds.
          pub amount: u64,
          /// If `delegate` is `Some` then `delegated_amount` represents
          /// the amount authorized by the delegate
          pub delegate: COption<Pubkey>,
          /// The account's state
          pub state: AccountState,
          /// If is_native.is_some, this is a native token, and the value logs the
          /// rent-exempt reserve. An Account is required to be rent-exempt, so
          /// the value is used by the Processor to ensure that wrapped SOL
          /// accounts do not drop below this threshold.
          pub is_native: COption<u64>,
          /// The amount delegated
          pub delegated_amount: u64,
          /// Optional authority to close the account.
          pub close_authority: COption<Pubkey>,
      }
      ```
    </Tab>
  </Tabs>
</Accordion>

## 同時実行について

ユーザーはトランザクションが最終的なものである限りプライベートバランスを使用できます。

つまり、キーアペアのバランスは複数のUTXOで分割された場合に同時に使用できます。
ウォレットがどのUTXOを使うかを選択します。

1つのマークルツリーが許可不要デフォルトリングとすべてのカスタムリングのためのプライベート状態を保存します。
このツリーは1つの書き込み可能なSolanaアカウントに保存されます。
プライベート転送はこのアカウントに書き込みを行うので、Solanaの1ブロックあたり12百万CUの同一アカウント書き込みロック制限を共有します。

1つのプライベート転送は約220,000 CUを消費します。
したがって、1つのツリーは1ブロックあたり約54回のプライベート転送をサポートし、現在のSolanaブロック時間約400ミリ秒で約130トランザクション毎秒をサポートします。

プロトコルはスループットを増やすためにより多くのツリーを追加できます。
各ツリーはそれ自身のパーアカウント計算予算を持つ個別の書き込み可能アカウントであり、異なるツリー上のトランザクションは同じ書き込みロック予算で競争しません。

## 証明生成時間について

零知識証明は現在プローバーサーバーで生成されています；通常の機密転送は数十ミリ秒で証明されます；機密リング用のローカル証明は計画されています。
証明時間はスムーズなユーザーエクスペリエンスのために積極的に最適化されています。

## 用語

| 用語                    | 意味                                                                                                                 | 別名                                                                                  |
| --------------------- | ------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------- |
| AES-GCM               | UTXOコンテンツを暗号化し改ざんを検出する対称暗号                                                                                         |                                                                                     |
| 監査人                   | カスタムリングの設定された閲覧者。リングデータを読み取るが使うことはできない。                                                                            |                                                                                     |
| カスタムリング               | カスタムルール、可視性、権限を持つ専用のエンタープライズリング                                                                                    | 以前は「ポリシーリング」                                                                        |
| 復号モード                 | リングがバランスと歴史の復号をサポートする方法：機密リング（デフォルトおよび機密カスタム）におけるローカルと委任；匿名リングでは委任のみサポート                                           |                                                                                     |
| 委任復号                  | 選択されたプロバイダーが共有観覧キーを用いてバランスと履歴を読み取る同期モード（支払い権限はない）                                                                  |                                                                                     |
| デフォルトリング              | 許可不要の機密リングでのバランスを持つプライベートウォレットのグループ；資産と金額は非公開だが送信者と受取人は公開                                                          |                                                                                     |
| デポジット                 | 公開Solanaアドレスからリングへの公開からプライベートへの転送                                                                                  | 入る、公からプライベートへのデポジット                                                                 |
| ECDH                  | 送信者と受取人がキーから共有シークレットを導出できるようにする楕円曲線ディフィー・ヘルマン                                                                      |                                                                                     |
| フリーズ権限                | ポリシーが許可する場合にバランスをフリーズまたは解凍できる設定された権限                                                                               |                                                                                     |
| HPKE                  | ハイブリッド公開鍵暗号化、受取人のキー用にUTXOを暗号化するためのECDHキー合意と対称暗号の組み合わせ                                                              |                                                                                     |
| 受信箱                   | プライベートウォレットの公開受信アドレスとして使用されたSolana公開キー                                                                             | 公開受信アドレス                                                                            |
| 所有者                   | プライベートウォレットアクションを承認するSolana公開キー、スマートアカウント、またはプレビデンス-バックド署名者                                                        |                                                                                     |
| ポリシープログラム             | カスタムリングのルールを遵守する公開オンチェーンプログラムでトランザクションが使用するカスタムリングを明示                                                              | ポリシーセット、リングポリシー                                                                     |
| プライバシーAPI             | プライベートウォレットの作成、バランス/履歴の読み取り、転送準備、証明生成、トランザクションの送信ができるHelius API                                                    | RPCプロバイダ（ドキュメントは2つを「プライバシーAPI / RPCプロバイダ」として結合します；Trust Model in enterprise.mdxも参照） |
| プライベートバランス            | リング内に保持されているユーザーの暗号化されたバランス                                                                                        | シールドバランス、非表示バランス、プライベート資金                                                           |
| プライベートSolanaトークンアカウント | 1つの資産の量を保持し、プライベートウォレットによって所有されるオンチェーンUTXO。プライベートウォレットバランスは未使用UTXOの合計です                                            | UTXO、ノート、未使用トランザクションアウトプット                                                          |
| プライベート転送              | 資産や金額を明かさずプライベートウォレット間での転送。機密公開リングでは送信者と受取人が可視なまま；匿名リングではリレーイヤーを使用し、どちらの当事者も明かしません                                 | プライベートからプライベートへの転送、リング内転送                                                           |
| プライベートウォレット           | 暗号化されたオンチェーンバランスと転送を持つ決済アカウント                                                                                      | プライベートアカウント、プライベートペイメントアカウント、管理プライベートアカウント                                          |
| プライベートウォレットバランス       | プライベートウォレットが所有する未使用UTXOの合計                                                                                         |                                                                                     |
| 公開バランス                | リング外のユーザーの通常の公開SPLトークンバランス                                                                                         | 公開アカウント、公開トークンアカウント、SPLトークンバランス                                                     |
| レジストリ                 | Solanaアドレスをそのシールドアドレスにマッピングするので送信者がアドレスをプライベートに支払うことができる。記録はアドレスがプライベート転送を受け取ることができることを示し、プライベート資金を保持していることは示しません。 |                                                                                     |
| リレーイヤー                | 匿名リングトランザクションを送信し、そのSolanaトランザクション手数料を支払うので送信者はトランザクションにリンクされません                                                   |                                                                                     |
| カスタムリング               | ポリシーに基づいて統制されるカスタムリング内でのバランスを持つプライベートウォレットのグループ                                                                    |                                                                                     |
| シールドアドレス              | ユーザのレジストリ記録に公開された署名、ナルリファイア、および閲覧キーの公開キーリンクル。オンチェーンアドレスではありません。                                                    | シールド公開鍵、シールドPubkey                                                                  |
| シールドキーペア              | プライベートウォレットの署名、ナルリファイア、および観覧キーのバンドル。ウォレットが保持するか、組み込みプライバシーウォレットのウォレットプロバイダが保持                                      | シールドキー                                                                              |
| TSPP                  | Helius Labsによって構築され維持されるオープンソースのSolana Privacy Protocolでオンチェーンの基礎的な状態遷移を強化します。                                     | Solana Privacy Protocol                                                             |
| 観覧キー                  | プライベートウォレットバランスを復号する読み取り専用のP-256キー。このキーは選択的開示のため監査人と共有可能                                                           | ビューキー                                                                               |
| ウォレットプロバイダ            | ユーザーアカウント、署名者、スマートアカウント、またはトレジャリーウォレットを管理するシステムでTurnkey、Privy、Squads、Rain、または内部カストディスタックで非エクスポート可能なプライバシーキーを保持     | ウォレット キーマネージャ、キー管理サービス、安全なキーインフラストラクチャ                                              |
| 引き出し                  | リングから公開アドレスへのプライベートからパブリックな転送                                                                                      | プライベートからパブリックへの引き出し                                                                 |

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