Wird von einem bereitgestellten Operator aufgerufen, um hinterlegte Token an die Mainnet-Wallet eines Benutzers freizugeben, vorausgesetzt ein gültiger Sparse-Merkle-Tree-Ausschlussbeweis für den Auszahlungs-Nonce liegt vor.
Das Treuhandprogramm wird von diesem Sparse-Merkle-Tree-Design auf eine On-Chain-Nonce-Bitmap migriert (upstream verfolgt). Diese Seite ist korrekt bezüglich des aktuellen Treuhandprogramms und wird überarbeitet, sobald diese Änderung in Kraft tritt.
Konten
| Konten | Beschreibbar | Signer | Beschreibung |
|---|---|---|---|
payer | ✓ | ✓ | Gebührenzahler |
operator | ✓ | Operator-Signer | |
instance | ✓ | Treuhand-Instanz-PDA (Root wird On-Chain aktualisiert) | |
operator_pda | Operator-PDA, der bestätigt, dass der Signer bereitgestellt ist | ||
mint | SPL-Token-Mint | ||
allowed_mint | AllowedMint-PDA – prüft, ob der Mint für diese Instanz zulässig ist | ||
user_ata | ✓ | associated token account des Empfängers (Ziel) | |
instance_ata | ✓ | associated token account des Treuhandkontos (Quelle) | |
token_program | SPL Token Program | ||
associated_token_program | Associated Token Program | ||
event_authority | Event-Authority-PDA für EmitEvent-CPI | ||
private_channel_escrow_program | Treuhandprogramm (Selbstreferenz für CPI) |
Parameter
| Parameter | Typ | Beschreibung |
|---|---|---|
amount | u64 | Anzahl der freizugebenden Token |
user | Pubkey | Empfänger-Wallet auf dem Mainnet |
new_withdrawal_root | [u8; 32] | Aktualisierter SMT-Root nach Aufnahme des Nonce dieser Auszahlung |
transaction_nonce | u64 | Eindeutiger Nonce zur Identifikation dieses Auszahlungs-Blatts im SMT |
sibling_proofs | [u8; 512] | 16 Geschwister-Hashes (je 32 Bytes) für den SMT-Ausschlussbeweis |
Rückgabewerte
Gibt einen TransactionBuilder zurück, der zum Erstellen und Senden der
Transaktion verwendet werden kann.
Beispiel
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)});
Wichtige Hinweise
- Der Aufrufer muss ein bereitgestellter Operator sein:
operator_pdamuss existieren (erstellt durchAddOperator); ein ungültiger PDA löstInvalidOperatorPdaaus sibling_proofsumfasst genau 512 Bytes (16 × 32-Byte-Hashes, entsprechend der SMT-Baumhöhe von 16)new_withdrawal_rootist der aktualisierte SMT-Root nach Aufnahme des Nonce dieser Auszahlung. Berechnen Sie ihn Off-Chain, bevor Sie die Funktion aufrufentransaction_noncemuss fürInstance.current_tree_indexgültig sein; ein ungültiger Nonce löstInvalidTransactionNonceForCurrentTreeIndexaus- Das Programm führt zunächst
verify_smt_exclusion_proofaus und beweist, dass der Nonce gegenüber dem aktuellen Root noch NICHT existiert, und führt dann separatverify_smt_inclusion_proofaus, um zu beweisen, dass der Nonce im vom Aufrufer bereitgestelltennew_withdrawal_rootVORHANDEN ist. Schlägt eine der Prüfungen fehl, wirdInvalidSmtProofausgelöst - Erst nachdem beide Prüfungen bestanden wurden, wird
Instance.withdrawal_transactions_rootatomar aktualisiert; der Nonce kann nicht wiederverwendet werden - Löst ein Ereignis über
EmitEvent-CPI aus
Is this page helpful?