Refund
Тепер ми можемо перейти до інструкції refund, яка знаходиться в refund.rs і виконає такі дії:
Закриє PDA ескроу та поверне його орендні лампорти назад мейкеру.
Перемістить повний баланс Токена А з сховища назад до мейкера, а потім закриє рахунок сховища.
Рахунки
Рахунки, необхідні в цьому контексті:
maker: користувач, який визначив умови обмінуescrow: рахунок, де зберігаються всі умови цього обмінуmint_a: токен, якийmakerвніс на депозитvault: токен-рахунок, пов'язаний зescrowтаmint_a, куди були внесені токениmaker_ata_a: токен-рахунок, пов'язаний зmakerтаmint_a, який отримає токени зvaultassociated_token_program: програма асоційованих токенів, яка використовується для створення асоційованих токен-рахунківtoken_program: токен-програма, яка використовується для CPI-переказуsystem_program: системна програма, яка використовується для створенняEscrow
Цього разу ми не допомагатимемо вам створювати Context, тож спробуйте зробити це самостійно! Будь ласка, переконайтеся, що використовуєте правильний порядок рахунків, інакше наші тести не пройдуть.
Логіка
Логіка схожа на інструкцію take, але цього разу ми просто переміщуємо токени з vault до maker_ata_a перед закриттям тепер уже порожнього сховища.
Цього разу ваша черга навчитися робити це самостійно, тому ми не розповідатимемо вам, яким є рішення.
Просто знайте, що після виконання цієї операції пропозиція стає недійсною, сховище зникає, а творець отримує свій Токен А та орендну плату назад у свій гаманець.
Entrypoint
Тепер, коли ми створили всі функції в різних інструкціях, ми нарешті можемо заповнити lib.rs усіма створеними функціями; ось так:
#[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
Тепер ви можете перевірити свою програму за допомогою наших модульних тестів і отримати свої NFT!
Почніть з компіляції вашої програми, використовуючи таку команду в терміналі
anchor buildЦе згенерувало файл .so безпосередньо у вашій папці target/deploy.
Тепер натисніть на кнопку take challenge і перетягніть туди файл!