Aangeroepen door een geprovisioneerde operator om tokens in escrow vrij te geven naar de Mainnet-wallet van een gebruiker, afhankelijk van een geldig Sparse Merkle Tree-uitsluitingsbewijs voor de opname-nonce.
Het escrow-programma migreert van dit Sparse Merkle Tree-ontwerp naar een on-chain nonce-bitmap (bijgehouden upstream). Deze pagina is accuraat ten opzichte van het huidige escrow-programma en wordt herzien zodra die wijziging wordt doorgevoerd.
Accounts
| Account | Schrijfbaar | Ondertekenaar | Beschrijving |
|---|---|---|---|
payer | ✓ | ✓ | Betaler van transactiekosten |
operator | ✓ | Operator-ondertekenaar | |
instance | ✓ | Escrow-instantie PDA (root on-chain bijgewerkt) | |
operator_pda | Operator PDA die bewijst dat de ondertekenaar geprovisioneerd is | ||
mint | SPL-token mint | ||
allowed_mint | AllowedMint PDA – valideert dat de mint toegestaan is op deze instantie | ||
user_ata | ✓ | associated token account van de ontvanger (bestemming) | |
instance_ata | ✓ | associated token account van de escrow (bron) | |
token_program | SPL Token Program | ||
associated_token_program | Associated Token Program | ||
event_authority | Event authority PDA voor EmitEvent CPI | ||
private_channel_escrow_program | Escrow-programma (zelfverwijzing voor CPI) |
Parameters
| Parameter | Type | Beschrijving |
|---|---|---|
amount | u64 | Hoeveelheid tokens om vrij te geven |
user | Pubkey | Ontvangersportefeuille op Mainnet |
new_withdrawal_root | [u8; 32] | Bijgewerkte SMT-root na opname van de nonce van deze opname |
transaction_nonce | u64 | Unieke nonce die dit opname-leaf in de SMT identificeert |
sibling_proofs | [u8; 512] | 16 sibling-hashes (elk 32 bytes) voor het SMT-uitsluitingsbewijs |
Geeft terug
Geeft een TransactionBuilder terug die gebruikt kan worden om de transactie
te bouwen en te verzenden.
Voorbeeld
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)});
Belangrijke opmerkingen
- De aanroeper moet een geprovisioneerde operator zijn:
operator_pdamoet bestaan (aangemaakt doorAddOperator); een ongeldige PDA gooitInvalidOperatorPda sibling_proofsis exact 512 bytes (16 × 32-byte hashes, overeenkomend met de SMT- boomhoogte van 16)new_withdrawal_rootis de bijgewerkte SMT-root na opname van de nonce van deze opname. Bereken dit off-chain vóór de aanroeptransaction_noncemoet geldig zijn voorInstance.current_tree_index; een ongeldige nonce gooitInvalidTransactionNonceForCurrentTreeIndex- Het programma voert eerst
verify_smt_exclusion_proofuit, waarmee wordt bewezen dat de nonce NOG NIET bestaat ten opzichte van de huidige root, en voert vervolgens een afzonderlijkeverify_smt_inclusion_proofuit die bewijst dat de nonce WEL bestaat in de door de aanroeper geleverdenew_withdrawal_root. Als een van beide controles mislukt, wordtInvalidSmtProofgegooid - Pas nadat beide controles zijn geslaagd, wordt
Instance.withdrawal_transactions_rootatomair bijgewerkt; de nonce kan niet opnieuw worden gebruikt - Verstuurt een event via
EmitEventCPI
Is this page helpful?