Skip to main content
  1. プライベート転送は、プライベートウォレット間でトークンをリング内に移動します。
  2. プライベート転送は、1 つの Solana トランザクションで Solana ウォレットアドレスに送信されます。

転送: プライベートとは

許可不要のリングは、額や資産が暗号化されており、秘密です。 カスタムリングは、(送信者、受信者、資産、額が暗号化されている)秘密または匿名として設定できます。

転送の仕組み

プライベート転送は、パブリックなSolana転送と同様に動作します。
  1. ユーザーのSOLまたはSPLバランスはオンチェーンで暗号化されます。
  2. ユーザーはプライベート状態を復号し、ウォレットが転送を作成し、所有者が署名します。
    • 専用のRPCメソッドで暗号化された状態を取得します。状態を復号できるのはローカルでユーザーのみです。
    • ウォレットは、金額と受取人を設定し、ZK証明を要求します。デフォルトでRPCプロバイダーがZK証明を生成し、それを返します。
  3. Solanaランタイムは署名を検証し、Solana Privacy Programを呼び出して、暗号化された状態を明らかにすることなくZK証明を検証します。
  4. アプリはSolanaトランザクションハッシュを通じてステータスを追跡します。
  1. ユーザーのSOLまたはSPLバランスはオンチェーンで公開されます。
  2. ウォレットが公開状態を読み取り、転送を作成し、所有者が署名します。
  3. Solanaランタイムは署名を検証し、System ProgramまたはToken Programを呼び出して公開バランスを更新します。
  4. アプリはSolanaトランザクションハッシュを通じてステータスを追跡します。
これは、許可不要の秘密リングの高レベルトランザクションフローです。 conceptsでカスタムリングと比較してください。

はじめに

1

前提条件

TypeScript の例には Node.js 24 以降、pnpm 11.18.0、および Solana CLI が必要です。
出典: sdk-libs/ts
Helius APIキーを追加します:
.env
例ではデフォルトで支払者としてSolana CLIウォレットを使用します。支払者はdevnet SOLを保有している必要があります。Devnet SOLの取得方法を参照してください。
2

プライベートバランスへの転送

  • SDKは指示を返します。アプリがそれを署名して送信します。
  • sendAndConfirmFactoryがKitトランザクションを構築して送信し、署名とその後のスロットを返します。
  • この例では、先行するデポジットで作成されたプライベートソラナトークンアカウントを支出しています。転送は複数のUTXOを使用できます。
  • transferUtxoがそのバランスから1つのプライベートソラナトークンアカウントを選択します。
  • ProofInputUtxo.fromKeypairが選択されたUTXOを送信者のプライベートウォレットキーペアを使って証明入力として準備します。
  • キーペアは、資産と額が暗号化されたままで、使用済みとして入力UTXOをマークするnullifierを導出します。
  • senderAddress は送信者のです。転送では、このウォレットから資金を使用します。
  • [transferInput] は、送信者が選択した UTXO の一覧です。1 回の転送で複数の UTXO を使用できます。
  • senderSigner.address は、手数料支払者の Solana アドレスです。ガススポンサーが手数料を支払うこともできます。
  • recipient.shieldedAddress() は、受信者のシールドアドレスです。転送される出力は、受信者の閲覧キーで暗号化されます。
  • SOL_MINT は SOL を選択します。SPL または Token 2022 の転送では、トークンミントを渡します。
  • TRANSFER_AMOUNT は、資産の基本単位で指定します。SOL では lamports を使用します。SPL および Token 2022 資産では、トークンの基本単位を使用します。
  • transfer.sign は、状態遷移を承認し、資産と数量を暗号化して、ゼロ知識証明器への入力を生成します。
  • assets は、サポートされているプライベート資産の解決に使用する資産レジストリです。
  • senderKeys は LocalKeys.fromKeypair(sender, client.proofService) を使用し、送信者のキーによる証明を承認します。
  • client.proveTransact は、署名済み転送からゼロ知識証明を生成し、シリアル化された命令データを返します。
  • この証明は、暗号化された資産や数量を公開することなく、送信者が入力を所有し、使用できることを示します。
  • payer は、Solana トランザクションに署名し、手数料を支払います。ガススポンサーが手数料を支払うこともできます。
  • inputTree と outputTree は、使用済み UTXO を格納し、受信者への出力と送信者へのお釣りを受け取る状態 Merkle ツリーである client.tree です。
  • await transactInstruction は、nullifier アカウントのアドレスをローカルで導出し、命令を返します。nullifier アカウントは入力 UTXO を使用済みとしてマークし、プライベート残高の二重使用を防ぎます。
  • data には、前のステップで生成されたゼロ知識証明と暗号化済み出力が含まれます。
  • プライベート転送では、プライベート残高間でのみ資産を移動します。公開 Solana アカウントやトークンアカウントは渡しません。
  • sendAndConfirmが署名し、transferInstructionをソラナトランザクションとして送信します。
  • 確認は、インデクサーの取得をゲートするために使用されるスロットをもたらします。

完全なコード例

例をクローンして実行します。
例では、こちらのローカル/devnet上にある機密 Ring を使用します。
deposit_transfer_withdraw.ts

関連ガイド

デポジット

引き出し

プライベートバランスを読む

プライベート履歴を読む

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

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