use solana_instruction::AccountMeta;
use solana_pubkey::Pubkey;
use super::info::VaultInfo;
use crate::{
pda,
util::{readonly, writable},
KVAULT_PROGRAM_ID,
};
pub(crate) fn refresh_remaining_accounts(vault: &VaultInfo) -> Vec<AccountMeta> {
let mut metas = Vec::with_capacity(vault.reserves().len() * 2);
metas.extend(vault.reserves().iter().map(|r| writable(r.reserve)));
metas.extend(vault.reserves().iter().map(|r| readonly(r.lending_market)));
metas
}
pub(crate) struct VaultPdas {
pub base_vault_authority: Pubkey,
pub token_vault: Pubkey,
pub shares_mint: Pubkey,
}
pub(crate) fn derive_vault_pdas(vault_state: &Pubkey) -> VaultPdas {
VaultPdas {
base_vault_authority: pda::base_vault_authority(&KVAULT_PROGRAM_ID, vault_state).0,
token_vault: pda::token_vault(&KVAULT_PROGRAM_ID, vault_state).0,
shares_mint: pda::shares_mint(&KVAULT_PROGRAM_ID, vault_state).0,
}
}