プロビジョニングされたオペレーターによって呼び出され、出金ノンスに対する有効なSparse Merkle Tree除外証明を条件として、エスクローされたトークンをユーザーのMainnetウォレットにリリースします。
エスクロープログラムは、このSparse Merkle Treeの設計からオンチェーンのノンスビットマップ(上流で追跡中)へ移行中です。このページは現在のエスクロープログラムに対して正確であり、変更が適用され次第、改訂される予定です。
アカウント
| アカウント | 書き込み可能 | 署名者 | 説明 |
|---|---|---|---|
payer | ✓ | ✓ | 手数料支払者 |
operator | ✓ | オペレーター署名者 | |
instance | ✓ | エスクローインスタンスPDA(ルートはオンチェーンで更新) | |
operator_pda | 署名者がプロビジョニング済みであることを証明するオペレーターPDA | ||
mint | SPLトークンミント | ||
allowed_mint | AllowedMint PDA — このインスタンスでミントが許可されていることを検証します | ||
user_ata | ✓ | 受取人のassociated token account(送金先) | |
instance_ata | ✓ | エスクローのassociated token account(送金元) | |
token_program | SPL Token Program | ||
associated_token_program | Associated Token Program | ||
event_authority | EmitEvent CPI用のイベント権限PDA | ||
private_channel_escrow_program | エスクロープログラム(CPI用の自己参照) |
パラメーター
| パラメーター | 型 | 説明 |
|---|---|---|
amount | u64 | リリースするトークンの数量 |
user | Pubkey | Mainnet上の受取人ウォレット |
new_withdrawal_root | [u8; 32] | この出金のノンスを含めた後の更新済みSMTルート |
transaction_nonce | u64 | SMT内のこの出金リーフを識別する一意のノンス |
sibling_proofs | [u8; 512] | SMT除外証明用の16個の兄弟ハッシュ(各32バイト) |
戻り値
トランザクションのビルドおよび送信に使用できる TransactionBuilder を返します。
使用例
import { getReleaseFundsInstruction } from "../private-channel-escrow-program/clients/typescript/src/generated";const releaseIx = getReleaseFundsInstruction({payer: operatorPayerSigner,operator: operatorSigner,instance: instancePda,operatorPda: operatorPdaAddress,mint: mintAddress,allowedMint: allowedMintPda,userAta: userAtaAddress,instanceAta: instanceAtaAddress,tokenProgram: TOKEN_PROGRAM_ID,associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID,eventAuthority: eventAuthorityPda,privateChannelEscrowProgram: ESCROW_PROGRAM_ID,amount: 1_000_000n,user: recipientPublicKey,newWithdrawalRoot: newSmtRoot, // [u8; 32]transactionNonce: withdrawalNonce, // u64siblingProofs: proofBytes // Uint8Array(512)});
重要な注意事項
- 呼び出し元はプロビジョニング済みのオペレーターである必要があります:
operator_pdaが存在していること(AddOperatorによって作成済み)。無効なPDAの場合はInvalidOperatorPdaがスローされます。 sibling_proofsはちょうど512バイトです(SMTのツリーの高さ16に対応する16 × 32バイトのハッシュ)。new_withdrawal_rootは、この出金のノンスを含めた後の更新済みSMTルートです。呼び出し前にオフチェーンで計算してください。transaction_nonceはInstance.current_tree_indexに対して有効である必要があります。無効なノンスの場合はInvalidTransactionNonceForCurrentTreeIndexがスローされます。- プログラムはまず
verify_smt_exclusion_proofを実行して、ノンスが現在のルートに対してまだ存在しないことを証明し、次に別途verify_smt_inclusion_proofを実行して、ノンスが呼び出し元の指定したnew_withdrawal_rootに存在することを証明します。いずれかのチェックが失敗した場合はInvalidSmtProofがスローされます。 - 両方のチェックが通過して初めて
Instance.withdrawal_transactions_rootがアトミックに更新されます。ノンスは再利用できません。 EmitEventCPIを通じてイベントを発行します。
Is this page helpful?