Καλείται από έναν εκχωρημένο χειριστή για την αποδέσμευση tokens υπό μεσεγγύηση στο πορτοφόλι Mainnet ενός χρήστη, εξαρτώμενη από έγκυρη απόδειξη αποκλεισμού Sparse Merkle Tree για το nonce ανάληψης.
Το πρόγραμμα escrow μεταναστεύει από αυτόν τον σχεδιασμό Sparse Merkle Tree σε ένα on-chain nonce bitmap (παρακολουθείται upstream). Αυτή η σελίδα είναι ακριβής σε σχέση με το τρέχον πρόγραμμα escrow και θα αναθεωρηθεί μόλις εφαρμοστεί η αλλαγή αυτή.
Λογαριασμοί
| Λογαριασμός | Εγγράψιμος | Υπογράφων | Περιγραφή |
|---|---|---|---|
payer | ✓ | ✓ | Πληρωτής τελών |
operator | ✓ | Υπογράφων χειριστής | |
instance | ✓ | PDA παρουσίας escrow (η ρίζα ενημερώνεται on-chain) | |
operator_pda | PDA χειριστή που αποδεικνύει ότι ο υπογράφων είναι εκχωρημένος | ||
mint | SPL token mint | ||
allowed_mint | PDA AllowedMint - επαληθεύει ότι το mint επιτρέπεται σε αυτήν την παρουσία | ||
user_ata | ✓ | associated token account παραλήπτη (προορισμός) | |
instance_ata | ✓ | associated token account escrow (πηγή) | |
token_program | SPL Token Program | ||
associated_token_program | Associated Token Program | ||
event_authority | PDA αρχής συμβάντων για το CPI EmitEvent | ||
private_channel_escrow_program | Πρόγραμμα Escrow (αυτοαναφορά για CPI) |
Παράμετροι
| Παράμετρος | Τύπος | Περιγραφή |
|---|---|---|
amount | u64 | Ποσό tokens προς αποδέσμευση |
user | Pubkey | Πορτοφόλι παραλήπτη στο Mainnet |
new_withdrawal_root | [u8; 32] | Ενημερωμένη ρίζα SMT μετά την ενσωμάτωση του nonce αυτής της ανάληψης |
transaction_nonce | u64 | Μοναδικό nonce που προσδιορίζει αυτό το φύλλο ανάληψης στο SMT |
sibling_proofs | [u8; 512] | 16 sibling hashes (32 bytes έκαστο) για την απόδειξη αποκλεισμού 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 bytes (16 × 32-byte hashes, που αντιστοιχούν στο ύψος δέντρου SMT 16) - Το
new_withdrawal_rootείναι η ενημερωμένη ρίζα SMT μετά την ενσωμάτωση του nonce αυτής της ανάληψης. Υπολογίστε το off-chain πριν από την κλήση - Το
transaction_nonceπρέπει να είναι έγκυρο για τοInstance.current_tree_index· ένα μη έγκυρο nonce εκπέμπειInvalidTransactionNonceForCurrentTreeIndex - Το πρόγραμμα εκτελεί πρώτα το
verify_smt_exclusion_proof, αποδεικνύοντας ότι το nonce ΔΕΝ υπάρχει ήδη έναντι της τρέχουσας ρίζας, και στη συνέχεια εκτελεί ξεχωριστά τοverify_smt_inclusion_proofαποδεικνύοντας ότι το nonce ΥΠΑΡΧΕΙ στηnew_withdrawal_rootπου παρέχει ο καλών. Αποτυχία οποιουδήποτε ελέγχου εκπέμπειInvalidSmtProof - Μόνο αφού περάσουν και οι δύο έλεγχοι ενημερώνεται ατομικά το
Instance.withdrawal_transactions_root· το nonce δεν μπορεί να επαναχρησιμοποιηθεί - Εκπέμπει ένα συμβάν μέσω CPI
EmitEvent
Is this page helpful?