Emanete alınmış token'ları kullanıcının Mainnet cüzdanına serbest bırakmak için sağlanmış bir operatör tarafından çağrılır; işlemin geçerliliği, çekim nonce'u için geçerli bir Seyrek Merkle Ağacı dışlama kanıtına bağlıdır.
Emanet programı, bu Seyrek Merkle Ağacı tasarımından zincir üstü bir nonce bitmap yapısına geçiş yapmaktadır (upstream'de takip edilmektedir). Bu sayfa mevcut emanet programını doğru biçimde yansıtmakta olup söz konusu değişiklik uygulandığında güncellenecektir.
Hesaplar
| Hesap | Yazılabilir | İmzalayan | Açıklama |
|---|---|---|---|
payer | ✓ | ✓ | Ücret ödeyici |
operator | ✓ | Operatör imzalayan | |
instance | ✓ | Emanet örneği PDA'sı (kök zincir üstünde güncellenir) | |
operator_pda | İmzalayanın sağlandığını kanıtlayan Operatör PDA'sı | ||
mint | SPL token mint'i | ||
allowed_mint | AllowedMint PDA'sı - mint'in bu örnekte izinli olduğunu doğrular | ||
user_ata | ✓ | Alıcının associated token account'u (hedef) | |
instance_ata | ✓ | Emanet associated token account'u (kaynak) | |
token_program | SPL Token Program | ||
associated_token_program | Associated Token Program | ||
event_authority | EmitEvent CPI için olay yetkisi PDA'sı | ||
private_channel_escrow_program | Emanet Programı (CPI için öz-referans) |
Parametreler
| Parametre | Tür | Açıklama |
|---|---|---|
amount | u64 | Serbest bırakılacak token miktarı |
user | Pubkey | Mainnet'teki alıcı cüzdanı |
new_withdrawal_root | [u8; 32] | Bu çekimin nonce'u dahil edildikten sonra güncellenen SMT kökü |
transaction_nonce | u64 | SMT'deki bu çekim yaprağını tanımlayan benzersiz nonce |
sibling_proofs | [u8; 512] | SMT dışlama kanıtı için 16 kardeş hash (her biri 32 bayt) |
Dönüş Değeri
İşlemi oluşturmak ve göndermek için kullanılabilecek bir TransactionBuilder döndürür.
Örnek
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)});
Önemli Notlar
- Çağıran tarafın sağlanmış bir operatör olması gerekir:
operator_pdamevcut olmalıdır (AddOperatortarafından oluşturulmuş); geçersiz PDAInvalidOperatorPdahatasını fırlatır sibling_proofstam olarak 512 bayttır (16 × 32 baytlık hash, SMT ağaç yüksekliği olan 16 ile eşleşir)new_withdrawal_root, bu çekimin nonce'u dahil edildikten sonra güncellenen SMT köküdür. Çağırmadan önce zincir dışında hesaplayıntransaction_nonce,Instance.current_tree_indexiçin geçerli olmalıdır; geçersiz bir nonceInvalidTransactionNonceForCurrentTreeIndexhatasını fırlatır- Program önce
verify_smt_exclusion_proofçalıştırarak nonce'un mevcut köke karşı henüz VAR OLMADIĞINI kanıtlar, ardından ayrı birverify_smt_inclusion_proofçalıştırarak nonce'un çağıran tarafından sağlanannew_withdrawal_rootiçinde VAR OLDUĞUNU kanıtlar. Her iki kontrolden birinin başarısız olmasıInvalidSmtProofhatasını fırlatır - Yalnızca her iki kontrol de geçildikten sonra
Instance.withdrawal_transactions_rootatomik olarak güncellenir; nonce yeniden kullanılamaz EmitEventCPI aracılığıyla bir olay yayınlar
Is this page helpful?