use solana_instruction::Instruction;
use solana_pubkey::Pubkey;
use super::common::{derive_vault_pdas, refresh_remaining_accounts};
use super::info::VaultInfo;
use crate::instructions;
use crate::{KLEND_PROGRAM_ID, TOKEN_PROGRAM_ID};
pub fn deposit(
vault: &VaultInfo,
user: Pubkey,
user_token_ata: Pubkey,
user_shares_ata: Pubkey,
max_amount: u64,
) -> Instruction {
let pdas = derive_vault_pdas(&vault.address);
let remaining = refresh_remaining_accounts(vault);
instructions::deposit::deposit(
instructions::deposit::DepositAccounts {
user,
vault_state: vault.address,
token_vault: pdas.token_vault,
token_mint: vault.token_mint,
base_vault_authority: pdas.base_vault_authority,
shares_mint: pdas.shares_mint,
user_token_ata,
user_shares_ata,
klend_program: KLEND_PROGRAM_ID,
token_program: vault.token_program,
shares_token_program: TOKEN_PROGRAM_ID,
},
max_amount,
remaining,
)
}
pub fn buy(
vault: &VaultInfo,
user: Pubkey,
user_token_ata: Pubkey,
user_shares_ata: Pubkey,
max_amount: u64,
) -> Instruction {
let pdas = derive_vault_pdas(&vault.address);
let remaining = refresh_remaining_accounts(vault);
instructions::deposit::buy(
instructions::deposit::DepositAccounts {
user,
vault_state: vault.address,
token_vault: pdas.token_vault,
token_mint: vault.token_mint,
base_vault_authority: pdas.base_vault_authority,
shares_mint: pdas.shares_mint,
user_token_ata,
user_shares_ata,
klend_program: KLEND_PROGRAM_ID,
token_program: vault.token_program,
shares_token_program: TOKEN_PROGRAM_ID,
},
max_amount,
remaining,
)
}