Wywoływana przez autoryzowanego operatora w celu zwolnienia zablokowanych tokenów na portfel użytkownika w sieci Mainnet, po spełnieniu warunku ważnego dowodu wykluczenia Sparse Merkle Tree dla nonce wypłaty.
Program escrow jest migrowany z tego projektu opartego na Sparse Merkle Tree do bitmapowego nonce on-chain (śledzony upstream). Ta strona jest zgodna z aktualnym programem escrow i zostanie zaktualizowana po wprowadzeniu tej zmiany.
Konta
| Konto | Zapisywalne | Podpisujący | Opis |
|---|---|---|---|
payer | ✓ | ✓ | Płatnik opłat |
operator | ✓ | Podpisujący operator | |
instance | ✓ | PDA instancji escrow (root aktualizowany on-chain) | |
operator_pda | PDA operatora potwierdzający, że podpisujący jest autoryzowany | ||
mint | Mint tokena SPL | ||
allowed_mint | PDA AllowedMint – weryfikuje, czy mint jest dozwolony w tej instancji | ||
user_ata | ✓ | associated token account odbiorcy (miejsce docelowe) | |
instance_ata | ✓ | associated token account escrow (źródło) | |
token_program | SPL Token Program | ||
associated_token_program | Associated Token Program | ||
event_authority | PDA authority zdarzenia dla CPI EmitEvent | ||
private_channel_escrow_program | Program Escrow (odwołanie własne dla CPI) |
Parametry
| Parametr | Typ | Opis |
|---|---|---|
amount | u64 | Liczba tokenów do zwolnienia |
user | Pubkey | Portfel odbiorcy w sieci Mainnet |
new_withdrawal_root | [u8; 32] | Zaktualizowany root SMT po uwzględnieniu nonce tej wypłaty |
transaction_nonce | u64 | Unikalny nonce identyfikujący ten liść wypłaty w SMT |
sibling_proofs | [u8; 512] | 16 skrótów rodzeństwa (po 32 bajty każdy) dla dowodu wykluczenia SMT |
Zwraca
Zwraca obiekt TransactionBuilder, który można wykorzystać do zbudowania i wysłania
transakcji.
Przykład
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)});
Ważne uwagi
- Wywołujący musi być autoryzowanym operatorem:
operator_pdamusi istnieć (utworzony przezAddOperator); nieprawidłowy PDA zgłasza błądInvalidOperatorPda sibling_proofsma dokładnie 512 bajtów (16 × 32-bajtowe skróty, odpowiadające wysokości drzewa SMT wynoszącej 16)new_withdrawal_rootto zaktualizowany root SMT po uwzględnieniu nonce tej wypłaty. Oblicz go off-chain przed wywołaniemtransaction_noncemusi być prawidłowy dlaInstance.current_tree_index; nieprawidłowy nonce zgłasza błądInvalidTransactionNonceForCurrentTreeIndex- Program najpierw wykonuje
verify_smt_exclusion_proof, udowadniając, że nonce NIE istnieje jeszcze względem bieżącego roota, a następnie wykonuje oddzielneverify_smt_inclusion_proofudowadniające, że nonce ISTNIEJE w podanym przez wywołującegonew_withdrawal_root. Niepowodzenie któregokolwiek sprawdzenia zgłasza błądInvalidSmtProof - Dopiero po pomyślnym przejściu obu sprawdzeń
Instance.withdrawal_transactions_rootjest aktualizowany atomowo; nonce nie może być ponownie użyty - Emituje zdarzenie poprzez CPI
EmitEvent
Is this page helpful?