- Permissionless Confidential Ring
- Custom Confidential Ring
- Custom Anonymous Ring
プライベートウォレットとユーザー
ユーザーは暗号化された残高をプライベートウォレットに保持し、既存の Solana Ed25519 キーでプライベートトランザクションに署名します。プライベートウォレットを統合すると、キー管理にシールドキーペアが追加されます。独自に統合することも、Embedded Private Walletを使用することもできます。プライベートトランザクション
プライベート転送は通常の Solana トランザクションです。Solana ランタイムが署名を検証して Solana Privacy Program を呼び出し、Solana Privacy Program は暗号化された状態を公開せずに ZK 証明を検証します。 一般的な機密転送で使用されるのは約 927 バイトで、v1 の上限である 4,096 バイトを十分に下回ります。Example Confidential Transfer
Example Confidential Transfer
仕様の 2 入力、3 出力の機密転送例に基づいています。
ソースコードを表示:仕様 · xtask/src/main.rsSolana v1 トランザクションレイアウトを参照してください。
RPC
で、Solana RPC、インデクサー、リモート証明生成サーバーを利用できます。- Solana RPC – 公開残高を返し、トランザクションを Solana ネットワークに送信します。
- インデクサー – インデクサーは、ウォレットが残高を読み取り、プライベートトランザクションを構築するために必要な暗号化された状態を提供します。また、フォールバックとして、誰でもパーミッションレスに独自のインデクサーを実行できます。
- 証明生成サーバー – ゼロ知識証明は、トランザクションとハードウェアに応じて、ローカルまたは証明生成サーバーで数ミリ秒以内に生成できます。Helius は GPU による証明生成を使用します。
プライバシーと Solana プログラム
Solana Privacy Program(SPP)は、すべてのプライベートな状態遷移を検証して実行する主要なプログラムです。カスタム Ring プログラムと ZK Solana プログラムは、コンプライアンスまたはアプリケーションロジックを追加してから、SPP を呼び出してプライベートな状態を更新します。 その他の Solana プログラムは、CPI 深度の上限である 5 など、Solana のトランザクション制限内で、同じトランザクションの CPI を通じてこれらのプログラムと連携できます。ZK Program Transaction Flow
ZK Program Transaction Flow
- Permissionless Ring
- Custom Rings
- ZK Program alone
- ZK Program and additional Solana Program
Solana Privacy Program(SPP)
Solana Privacy Program はゼロ知識証明を検証し、プライベートな状態を更新します。トークンの入金、プライベート残高の転送、公開アカウントへのトークンの出金に使用します。 他のプログラムは CPI を通じて SPP を呼び出し、プライベートな状態遷移を実行します。カスタム Ring プログラム
カスタム Ring プログラムは、Token-2022 と同様に、転送権限と追加の権限者を定義します。監査者の設定、共同署名者の必須化、または権限者による残高の凍結を可能にするために使用します。 カスタムコンプライアンスロジックを適用するために ZK 証明を検証してから、SPP を呼び出してプライベートな状態を更新します。ZK Solana プログラム
ゼロ知識(ZK)Solana プログラムにより、Solana プログラム内のプライベートエスクローで、プライベート残高に対してアプリケーションロジックを適用できます。ZK Solana プログラムを使用して、プライベートスワップ、ステーキング、レンディングなどを構築できます。たとえば、機密スワップでは、合意した数量と価格を公開せずに適用できます。 プログラムはアプリケーションロジックの ZK 証明を検証してから、直接またはカスタム Ring プログラムを通じて SPP を呼び出し、プライベートな状態を更新します。状態マークルツリーと Forester
Default Ring とすべてのカスタム Ring は、Forester ノードによって管理される状態マークルツリーアカウントにプライベートな状態を保存します。 ツリーアカウントは、プライベートな状態を個別の Solana アカウントに保存せずにコミットします。 そのため、残高とトランザクション履歴を読み取る際は、getAccountInfo のような Solana アカウントメソッドではなく、getShieldedTransactionsByTags などの専用インデクサー RPC メソッドを使用します。プライベート残高の読み取りとプライベートトランザクション履歴の読み取りを参照してください。
スループット
ツリーは、書き込み可能な 1 つの Solana アカウントに保存されます。 このアカウントに書き込むプライベート転送は、ブロックごとにアカウント単位で適用される Solana の 1,200 万 CU の書き込みロック上限を共有します。 異なる UTXO は個別に使用できますが、同じツリーに書き込むトランザクションは、Solana アカウントのロックとコンピュート上限を引き続き共有します。 機密転送は、命令ベンチマークで約 140,000 CU を消費します。 そのため、1 つのツリーでブロックあたり約 86 件のプライベート転送を処理できます。現在の Solana のブロック時間である約 400 ミリ秒では、1 秒あたり約 215 件のトランザクションに相当します。 プロトコルは、ツリーを追加してスループットを向上できます。 各ツリーは、アカウント単位の独自のコンピュート予算を持つ個別の書き込み可能アカウントです。そのため、異なるツリー上のトランザクションが同じ書き込みロック予算を奪い合うことはありません。SPL インターフェース
SPL インターフェースにより、公開状態とプライベート状態で保有されるトークン間の相互運用性が実現します。これはミントごとのエスクローであり、パーミッションレスに作成できますが、各ミントにつき一度だけ作成する必要があります。- SOL および SPL 資産をプライベート残高に入金すると、Solana Privacy Program が所有するインターフェース PDA がトークンをエスクローし、ユーザーを所有者とする UTXO を作成します。
- 公開残高に出金すると、既存の UTXO が使用済みとしてマークされ、トークンが Solana トークンアカウントに解放されます。
詳細情報
Overview
Ring、プライバシー保証、トランザクションフローについて説明します。
Private State and UTXOs
プライベート残高がどのように保存され、使用されるかを説明します。
Encryption and Privacy Guarantees
資産がどのように暗号化されるか、およびシールドキーペアの役割について説明します。
Custom Enterprise Rings
カスタム Ring の設定方法を説明します。