프로비저닝된 오퍼레이터가 호출하며, 출금 논스에 대한 유효한 Sparse Merkle Tree 제외 증명을 조건으로 에스크로에 보관된 토큰을 사용자의 메인넷 지갑으로 출금합니다.
에스크로 프로그램은 현재의 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 | 메인넷의 수신자 지갑 |
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바이트여야 합니다 (16 × 32바이트 해시, SMT 트리 높이 16에 해당)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?