Skip to main content
  1. 出金はトークンをプライベートバランスからパブリックSolanaバランスに移動させます。
  2. 出金は、単一のSolanaトランザクションでSolanaウォレットアドレスに送信されます。

出金: プライベートとは何か

パーミッションレスのリングは暗号化された金額および資産で機密性があります。 カスタムリングは、機密または匿名(送信者、受信者、資産、および金額を暗号化)として構成できます。

出金の仕組み

出金は、パブリックなSolana転送と同様に動作します:
  1. ユーザーのSOLまたはSPLバランスはオンチェーンで暗号化されます。
  2. ユーザーはプライベートステートを復号し、ウォレットが出金を構築し、所有者が署名します。
    • 専用のRPCメソッドで暗号化された状態を取得します。ユーザーだけがローカルでバランスを復号できます。
    • ウォレットは金額と受取人を設定し、ZK証明を要求します。RPCプロバイダーはデフォルトでZK証明を生成し、それを返します。
  3. Solanaランタイムは署名を検証し、Solanaプライバシープログラムを起動して、暗号化された状態を開示せずにZK証明を検証します。
  4. アプリはSolanaトランザクションハッシュを介してステータスを追跡します。
  1. ユーザーのSOLまたはSPLバランスはオンチェーンで公開されています。
  2. ウォレットはパブリックステートを読み取り、転送を構築し、所有者が署名します。
  3. Solanaランタイムは署名を検証し、システムプログラムまたはトークンプログラムを呼び出し、公開バランスを更新します。
  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 はキットトランザクションを構築し、それを提出し、署名とランディングスロットを返します。
  • この例では、前の転送後に残ったプライベートSolanaトークンアカウントを使って支出します。出金は複数のUTXOを支出できます。
  • withdrawalUtxo はそのバランスから1つのプライベートSolanaトークンアカウントを選択します。
  • ProofInputUtxo.fromKeypair 選択されたUTXOを送信者のプライベートウォレットキーペアで証明入力として準備します。
  • キーペアは、入力UTXOを支出済みとしてマークするナリファイアを導き出しますが、入力資産と金額は暗号化されたままです。
  • senderAddress は送信者のです。引き出しでは、このウォレットから資産を使用します。
  • [withdrawalInput] は、送信者が選択した UTXO の一覧です。1 回の引き出しで複数の UTXO を使用できます。
  • senderSigner.address は、手数料支払者の Solana アドレスです。ガススポンサーが手数料を支払うこともできます。
  • WithdrawalTarget.sol は、公開 Solana 受取人です。受取人には所有者または第三者を指定できます。
  • SOL_MINT は SOL を選択します。SPL または Token 2022 の引き出しでは、トークンミントを渡します。
  • WITHDRAW_AMOUNT は、資産の基本単位で指定します。SOL では lamports を使用します。SPL および Token 2022 資産では、トークンの基本単位を使用します。
  • withdrawal.sign は、状態遷移を承認し、残りの非公開のお釣りを暗号化して、ゼロ知識証明器への入力を生成します。
  • assets は、サポートされている非公開資産の解決に使用する資産レジストリです。
  • senderKeys は LocalKeys.fromKeypair(sender, client.proofService) を使用し、送信者のキーで証明の生成を承認します。
  • client.proveTransact は、署名済みの引き出しからゼロ知識証明を生成し、シリアライズされた命令データを返します。
  • この証明は、送信者が入力を所有し、使用できることを示します。引き出す資産と金額は公開されます。入力金額とお釣りは暗号化されたままです。
  • payer は、Solana トランザクションに署名し、その手数料を支払います。ガススポンサーが手数料を支払うこともできます。
  • inputTree と outputTree は、使用済み UTXO を格納し、送信者の非公開のお釣りを受け取る状態 Merkle ツリーである client.tree です。
  • withdrawal は、公開 Solana 受取人アカウントである TransactWithdrawal.sol です。
  • await transactInstruction は、nullifier アカウントのアドレスをローカルで導出し、命令を返します。nullifier アカウントは入力 UTXO を使用済みとして記録し、非公開残高の二重使用を防ぎます。
  • data には、前のステップで生成されたゼロ知識証明と暗号化されたお釣りが含まれます。
  • 引き出しでは、資産を非公開残高から公開 Solana アカウントに移動します。公開受取人アカウントを渡します。
  • sendAndConfirm は署名し、withdrawalInstruction をSolanaトランザクションとして送信します。
  • 確認はインデクサ取得をゲートするのに使用されるランディングスロットをもたらします。

完全なコード例

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

関連ガイド

入金

転送

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

プライベート履歴を読む

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

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