Skip to main content
プライベートウォレットは署名用のSolanaキー ペア、ヌリファイアキー、および暗号化用のビューイングキーで構成されています。これらのキーがシールドキー ペアを形成します。 キー管理はシールドキー ペアを保持します。 ウォレットコードはプライバシーインターフェースとSDKを使用してプライベートトランザクションを作成します。 キー管理とプライバシーSDKはプライバシーインターフェースを通じて接続します。プライバシーSDKはプライバシーAPIを呼び出します。プライバシーAPIはトランザクションをSolanaに送信します。 この統合により、ユーザーは次のことができます:
  1. 自己管理のプライベートウォレットを作成
  2. Solanaアドレスでプライベート転送を受信
  3. トークンをプライベート残高に入金
  4. Solanaアドレスにプライベートに送信
  5. 任意のSolanaアドレスに出金
  6. プライベート残高とトランザクション履歴をローカルで復号化
統合には次のものが含まれます:
  1. シールドキー ペア – 暗号化のためのキー管理
  2. プライバシーインターフェースとSDK – プライベートトランザクションを構築するため
  3. ユーザーフロー – ウォレットに統合するため

AIのためのコンテキスト

既存のSolanaウォレットにプライベートウォレットを追加する

Cursorで開く
1

シールドキー ペアの統合

プライベートウォレットの統合は、キー管理にシールドキー ペアを追加します。 シールドキー ペアはトランザクションの署名、暗号化、復号化を行います。シールドキー ペアは署名、ヌリファイア、およびビューイングキーのバンドルです。
  • 署名キー: トランザクションに署名するためのウォレットのEd25519 Solanaキー ペア。
  • ビューイングキー: トランザクションを暗号化および復号化するためのP-256キー ペア。
  • ヌリファイアキー:
ウォレットはシールドキー ペアを2つの方法で作成できます:
  1. シードベースのウォレットの場合、シードフレーズから導き出すを選択。
  2. シードベースでないウォレットの場合、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つの部分で実装します。
  1. プライバシーSDKによるトランザクション構築用の署名インターフェース。ソースを表示: TypeScript/ Rust
  2. 暗号化および復号化インターフェース。ソースを表示: TypeScript/ Rust
プライバシーインターフェースはステートレスであり、残高やトランザクション履歴を保存しません。 パフォーマンス向上のため、ユーザーの残高やトランザクション履歴をローカルでキャッシュすることをお勧めします。

証明生成について

ゼロ知識証明生成には、完全なユーザートランザクションデータとヌリファイアキーの平文入力が必要です。現在、サーバーでの証明生成は標準的なHelius RPC URLを通じて利用可能です。ローカルでの証明生成は近日公開予定です。 メインネットローンチ前にAWS Nitroでのエンドツーエンド暗号化サーバー証明生成を計画しています。
3

ユーザーフローの統合

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

プライベートウォレットは、次の2つの手順で作成します。
  1. シールドされたキーペアを導出します
  2. Solanaアドレスをオンチェーンレジストリに登録します。
プライベートウォレットの作成時に、プライベート残高へ入金する必要はありません。レジストリは、署名公開鍵をナリファイア公開鍵および閲覧公開鍵に関連付けます。これらの公開鍵を組み合わせたものが、シールドアドレスです。
各レジストリレコードは、が所有するPDAです。誰でもこのレコードを参照し、Solanaアドレスがプライベート送金を受け取れるかどうかを確認できます。
  • ownerはユーザーのSolanaアドレスであり、レジストリPDAの導出に使用されます。
  • addressはユーザーのシールドアドレスです。
  • buildRegistrationTransactionは、コンパイル済みの登録トランザクションまたは鍵更新トランザクションを返します。ウォレットがすでに登録されている場合は、undefinedを返します。
  • sendTransactionは、トランザクションに署名して送信します。
  • isWalletRegisteredは、レジストリPDAを読み取り、登録状態を確認します。
登録の完全な例:TypeScript · Rust

プライベート残高とトランザクション履歴を同期する

残高の同期では、暗号化された状態をRPCから取得し、ウォレット内で復号します。RPCは復号しません。閲覧鍵を使用してプライベート残高を復号できるのは、所有者だけです。
ウォレットは、プライベートトランザクションの実行前と、バックフィルを実行する次の各タイミングで、残高を復号して更新する必要があります。ウォレットのロック解除時、プライベートウォレットを開いたとき、アプリの再開時、ネットワークへの再接続時、ストリームの欠落発生時、またはウォレットの復元時です。

Read a Private Balance

Read Private Transaction History

プライベート残高に入金する

ユーザーは、次の2つの方法でプライベート残高に入金できます。
  1. 法定通貨残高からプライベートな暗号資産残高へオンランプする
  2. 公開SPLアカウントからプライベート残高へ入金する
オンランプと入金では、プライバシー保証が異なります。 プライバシーを強化するため、入金よりもオンランプの使用を推奨します。

On-/Off-Ramp

法定通貨をプライベート残高へ直接オンランプしたり、プライベート残高から直接オフランプしたりできます。

Deposit

公開されている暗号資産残高から入金します。

プライベート送金

ユーザーは、任意のSolanaウォレットアドレスにプライベート送金できます。Privacy SDKは、プライベート送金のたびにオンチェーンレジストリでウォレットアドレスを検索し、受取人がプライベートウォレットを持っているかどうかを確認します。受取人がプライベートウォレットを持っていない場合、Privacy SDKはプライベート送金をプライベート残高から公開残高への出金として処理できます。
ユーザーが誤って公開残高へ出金しないように、UIではこのトランザクションを出金として明示することを推奨します。

Private Transfer

プライベート残高へ非公開で送金します。

公開残高へ出金する

出金は、次の2つの方法で使用できます。
  1. プライベートウォレットを持たない受取人へのプライベート送金のフォールバックとして使用する、または
  2. 公開SPLトークンアカウントへ直接出金する。
出金時には、シードフレーズや秘密鍵をエクスポートする場合と同様に、ユーザーがプライベート残高から離れることを明示するよう推奨します。

Withdraw

公開されている暗号資産残高へ出金します。

お探しの情報が見つかりませんでしたか?

ぜひご連絡ください!Telegram | E-Mail | Typeform