use anchor_spl::token::spl_token::instruction::{close_account, sync_native};
use solana_program::{instruction::Instruction, pubkey::Pubkey, system_instruction};
pub use anchor_spl::associated_token::spl_associated_token_account::instruction::create_associated_token_account_idempotent;
use crate::{constants, pda};
pub fn wrap_sol_instructions(user: &Pubkey, lamports: u64) -> [Instruction; 2] {
let user_wsol_ata = pda::associated_token(
user,
&constants::SPL_TOKEN_PROGRAM_ID,
&constants::NATIVE_MINT,
)
.0;
[
system_instruction::transfer(user, &user_wsol_ata, lamports),
sync_native(&constants::SPL_TOKEN_PROGRAM_ID, &user_wsol_ata)
.expect("sync_native: token program id is constant"),
]
}
pub fn unwrap_sol_instruction(user: &Pubkey) -> Instruction {
let user_wsol_ata = pda::associated_token(
user,
&constants::SPL_TOKEN_PROGRAM_ID,
&constants::NATIVE_MINT,
)
.0;
close_account(
&constants::SPL_TOKEN_PROGRAM_ID,
&user_wsol_ata,
user,
user,
&[],
)
.expect("close_account: token program id is constant")
}