- 自己管理のプライベートウォレットを作成
- Solanaアドレスでプライベート転送を受信
- トークンをプライベート残高に入金
- Solanaアドレスにプライベートに送信
- 任意のSolanaアドレスに出金
- プライベート残高とトランザクション履歴をローカルで復号化
- シールドキー ペア – 暗号化のためのキー管理
- プライバシーインターフェースとSDK – プライベートトランザクションを構築するため
- ユーザーフロー – ウォレットに統合するため
AIのためのコンテキスト
既存のSolanaウォレットにプライベートウォレットを追加する
1
シールドキー ペアの統合
プライベートウォレットの統合は、キー管理にシールドキー ペアを追加します。 シールドキー ペアはトランザクションの署名、暗号化、復号化を行います。シールドキー ペアは署名、ヌリファイア、およびビューイングキーのバンドルです。- 署名キー: トランザクションに署名するためのウォレットのEd25519 Solanaキー ペア。
- ビューイングキー: トランザクションを暗号化および復号化するためのP-256キー ペア。
- ヌリファイアキー:
- シードベースのウォレットの場合、シードフレーズから導き出すを選択。
- シードベースでないウォレットの場合、EdDSA署名から導き出すを選択。
- シードフレーズから導き出す
- EdDSA署名から導き出す
シードベースのウォレットは、1つのBIP-39ニーモニックとアカウントインデックス (
0, 1, …) からシールドキー ペアを導き出します。各アカウントインデックスは1つのSolanaキー ペアと1つのシールドキー ペアにマップされます。
Solanaキー ペアと同じ方法でシールドキー ペアを復元できます。例:- アカウント0: Solanaキー ペア0とシールドキー ペア0
- アカウント1: Solanaキー ペア1とシールドキー ペア1
シールド署名キーはそのアカウントのSolana Ed25519キーです。
ヌリファイアとビューイングキーは同じシードから導出された追加キーです。
実装例: TypeScript例 · Rust例
2
プライバシーインターフェースとSDKの統合
プライバシーインターフェースにより、コードはプライバシーSDKを使用してキー素材に直接アクセスせずにプライベートトランザクションを構築できます。 キー管理はプライバシーインターフェースを2つの部分で実装します。- プライバシーSDKによるトランザクション構築用の署名インターフェース。ソースを表示: TypeScript/ Rust
- 暗号化および復号化インターフェース。ソースを表示: TypeScript/ Rust
プライバシーインターフェースはステートレスであり、残高やトランザクション履歴を保存しません。
パフォーマンス向上のため、ユーザーの残高やトランザクション履歴をローカルでキャッシュすることをお勧めします。
証明生成について
ゼロ知識証明生成には、完全なユーザートランザクションデータとヌリファイアキーの平文入力が必要です。現在、サーバーでの証明生成は標準的なHelius RPC URLを通じて利用可能です。ローカルでの証明生成は近日公開予定です。 メインネットローンチ前にAWS Nitroでのエンドツーエンド暗号化サーバー証明生成を計画しています。3
ユーザーフローの統合
プライベートウォレットを作成
プライベートウォレットは、次の2つの手順で作成します。- シールドされたキーペアを導出します
- Solanaアドレスをオンチェーンレジストリに登録します。
各レジストリレコードは、が所有するPDAです。誰でもこのレコードを参照し、Solanaアドレスがプライベート送金を受け取れるかどうかを確認できます。
- TypeScript Client
- Rust Client
ownerはユーザーのSolanaアドレスであり、レジストリPDAの導出に使用されます。addressはユーザーのシールドアドレスです。buildRegistrationTransactionは、コンパイル済みの登録トランザクションまたは鍵更新トランザクションを返します。ウォレットがすでに登録されている場合は、undefinedを返します。sendTransactionは、トランザクションに署名して送信します。isWalletRegisteredは、レジストリPDAを読み取り、登録状態を確認します。
登録の完全な例:TypeScript · Rust
プライベート残高とトランザクション履歴を同期する
残高の同期では、暗号化された状態をRPCから取得し、ウォレット内で復号します。RPCは復号しません。閲覧鍵を使用してプライベート残高を復号できるのは、所有者だけです。ウォレットは、プライベートトランザクションの実行前と、バックフィルを実行する次の各タイミングで、残高を復号して更新する必要があります。ウォレットのロック解除時、プライベートウォレットを開いたとき、アプリの再開時、ネットワークへの再接続時、ストリームの欠落発生時、またはウォレットの復元時です。
Read a Private Balance
Read Private Transaction History
プライベート残高に入金する
ユーザーは、次の2つの方法でプライベート残高に入金できます。- 法定通貨残高からプライベートな暗号資産残高へオンランプする
- 公開SPLアカウントからプライベート残高へ入金する
On-/Off-Ramp
法定通貨をプライベート残高へ直接オンランプしたり、プライベート残高から直接オフランプしたりできます。
Deposit
公開されている暗号資産残高から入金します。
プライベート送金
ユーザーは、任意のSolanaウォレットアドレスにプライベート送金できます。Privacy SDKは、プライベート送金のたびにオンチェーンレジストリでウォレットアドレスを検索し、受取人がプライベートウォレットを持っているかどうかを確認します。受取人がプライベートウォレットを持っていない場合、Privacy SDKはプライベート送金をプライベート残高から公開残高への出金として処理できます。ユーザーが誤って公開残高へ出金しないように、UIではこのトランザクションを出金として明示することを推奨します。
Private Transfer
プライベート残高へ非公開で送金します。
公開残高へ出金する
出金は、次の2つの方法で使用できます。- プライベートウォレットを持たない受取人へのプライベート送金のフォールバックとして使用する、または
- 公開SPLトークンアカウントへ直接出金する。
Withdraw
公開されている暗号資産残高へ出金します。