Refund
Sekarang kita dapat beralih ke instruksi refund, yang berada di refund.rs dan akan melakukan tindakan-tindakan berikut:
Menutup escrow PDA dan mengirimkan lamports sewanya kembali ke pembuat.
Memindahkan seluruh saldo Token A keluar dari vault dan kembali ke pembuat, kemudian menutup akun vault.
Akun
Akun-akun yang dibutuhkan dalam konteks ini adalah:
maker: pengguna yang menentukan persyaratan pertukaranescrow: akun tempat semua persyaratan pertukaran ini beradamint_a: token yang telah disimpan olehmakervault: akun token yang terkait denganescrowdanmint_atempat token-token telah disimpanmaker_ata_a: akun token yang terkait denganmakerdanmint_ayang akan menerima token darivaultassociated_token_program: program token terkait yang digunakan untuk membuat akun token terkaittoken_program: program token yang digunakan untuk CPI transfersystem_program: program sistem yang digunakan untuk membuatEscrow
Kali ini kami tidak akan membantu Anda dengan membuat Context, jadi cobalah melakukannya sendiri! Pastikan untuk menggunakan urutan akun yang benar atau tes kami akan gagal.
Logika
Logikanya mirip dengan instruksi take tetapi kali ini kita hanya memindahkan token dari vault ke maker_ata_a sebelum menutup vault yang sekarang kosong.
Kali ini giliran Anda untuk belajar melakukannya sendiri, jadi kami tidak akan memberitahu Anda apa solusinya.
Ketahuilah bahwa setelah ini dieksekusi, penawaran menjadi tidak berlaku, vault hilang, dan pembuat mendapatkan Token A mereka beserta biaya sewa kembali ke dompet mereka.
Entrypoint
Sekarang setelah kita membuat semua fungsi di berbagai instruksi, akhirnya kita dapat mengisi lib.rs dengan semua fungsi yang telah kita buat; seperti ini:
#[program]
pub mod blueshift_anchor_escrow {
use super::*;
pub fn make(ctx: Context<Make>, seed: u64, receive: u64, amount: u64) -> Result<()> {
instructions::make::handler(ctx, seed, receive, amount)
}
pub fn take(ctx: Context<Take>) -> Result<()> {
instructions::take::handler(ctx)
}
pub fn refund(ctx: Context<Refund>) -> Result<()> {
instructions::refund::handler(ctx)
}
}Conclusion
Sekarang Anda dapat menguji program Anda dengan unit test kami dan mengklaim NFT Anda!
Mulailah dengan membangun program Anda menggunakan perintah berikut di terminal Anda
anchor buildIni akan menghasilkan file .so langsung di folder target/deploy Anda.
Sekarang klik tombol take challenge dan letakkan file tersebut di sana!