Викликається підготовленим оператором для звільнення токенів з ескроу до гаманця користувача в Mainnet, за умови наявності дійсного доказу виключення Sparse Merkle Tree для нонсу виведення.
Програма ескроу мігрує з цього дизайну на основі Sparse Merkle Tree до побітової карти нонсів на ланцюжку (відстежується вище за потоком). Ця сторінка відповідає поточній програмі ескроу і буде оновлена після внесення цих змін.
Акаунти
| Акаунт | Записуваний | Підписувач | Опис |
|---|---|---|---|
payer | ✓ | ✓ | Платник комісії |
operator | ✓ | Підписувач-оператор | |
instance | ✓ | PDA екземпляра ескроу (корінь оновлюється на ланцюжку) | |
operator_pda | PDA оператора, що підтверджує підготовленість підписувача | ||
mint | Mint SPL-токена | ||
allowed_mint | PDA AllowedMint — перевіряє, що mint дозволено в цьому екземплярі | ||
user_ata | ✓ | associated token account одержувача (призначення) | |
instance_ata | ✓ | associated token account ескроу (джерело) | |
token_program | SPL Token Program | ||
associated_token_program | Associated Token Program | ||
event_authority | PDA авторитету подій для CPI EmitEvent | ||
private_channel_escrow_program | Програма ескроу (самопосилання для CPI) |
Параметри
| Параметр | Тип | Опис |
|---|---|---|
amount | u64 | Кількість токенів для звільнення |
user | Pubkey | Гаманець одержувача в Mainnet |
new_withdrawal_root | [u8; 32] | Оновлений корінь SMT після включення нонсу цього виведення |
transaction_nonce | u64 | Унікальний нонс, що ідентифікує листок цього виведення в SMT |
sibling_proofs | [u8; 512] | 16 хешів сусідніх вузлів (по 32 байти кожен) для доказу виключення SMT |
Повертає
Повертає 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оновлюється атомарно; нонс не може бути повторно використаний - Генерує подію через CPI
EmitEvent
Is this page helpful?