Αποδέσμευση Κεφαλαίων

Καλείται από έναν εκχωρημένο χειριστή για την αποδέσμευση tokens υπό μεσεγγύηση στο πορτοφόλι Mainnet ενός χρήστη, εξαρτώμενη από έγκυρη απόδειξη αποκλεισμού Sparse Merkle Tree για το nonce ανάληψης.

Το πρόγραμμα escrow μεταναστεύει από αυτόν τον σχεδιασμό Sparse Merkle Tree σε ένα on-chain nonce bitmap (παρακολουθείται upstream). Αυτή η σελίδα είναι ακριβής σε σχέση με το τρέχον πρόγραμμα escrow και θα αναθεωρηθεί μόλις εφαρμοστεί η αλλαγή αυτή.

Λογαριασμοί

ΛογαριασμόςΕγγράψιμοςΥπογράφωνΠεριγραφή
payer✓✓Πληρωτής τελών
operator✓Υπογράφων χειριστής
instance✓PDA παρουσίας escrow (η ρίζα ενημερώνεται on-chain)
operator_pdaPDA χειριστή που αποδεικνύει ότι ο υπογράφων είναι εκχωρημένος
mintSPL token mint
allowed_mintPDA AllowedMint - επαληθεύει ότι το mint επιτρέπεται σε αυτήν την παρουσία
user_ata✓associated token account παραλήπτη (προορισμός)
instance_ata✓associated token account escrow (πηγή)
token_programSPL Token Program
associated_token_programAssociated Token Program
event_authorityPDA αρχής συμβάντων για το CPI EmitEvent
private_channel_escrow_programΠρόγραμμα Escrow (αυτοαναφορά για CPI)

Παράμετροι

ΠαράμετροςΤύποςΠεριγραφή
amountu64Ποσό tokens προς αποδέσμευση
userPubkeyΠορτοφόλι παραλήπτη στο Mainnet
new_withdrawal_root[u8; 32]Ενημερωμένη ρίζα SMT μετά την ενσωμάτωση του nonce αυτής της ανάληψης
transaction_nonceu64Μοναδικό 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, // u64
siblingProofs: 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?

Πίνακας Περιεχομένων

Επεξεργασία Σελίδας
© 2026 Ίδρυμα Solana. Με επιφύλαξη παντός δικαιώματος.