use std::ops::Add;
use crate::programs::vaults::ID;
use anchor_lang::prelude::Pubkey;
use super::ticks::MAX_TICK;
pub fn get_vault_state(vault_id: u16) -> Pubkey {
Pubkey::find_program_address(&[b"vault_state", &vault_id.to_le_bytes()], &ID).0
}
pub fn get_vault_config(vault_id: u16) -> Pubkey {
Pubkey::find_program_address(&[b"vault_config", &vault_id.to_le_bytes()], &ID).0
}
pub fn get_vault_metadata(vault_id: u16) -> Pubkey {
Pubkey::find_program_address(&[b"vault_metadata", &vault_id.to_le_bytes()], &ID).0
}
pub fn get_vault_admin() -> Pubkey {
Pubkey::find_program_address(&[b"vault_admin"], &ID).0
}
pub fn get_tick(vault_id: u16, tick: i32) -> Pubkey {
Pubkey::find_program_address(
&[
b"tick",
&vault_id.to_le_bytes(),
&tick.add(MAX_TICK).to_le_bytes(),
],
&ID,
)
.0
}
pub fn get_branch(vault_id: u16, branch_id: u32) -> Pubkey {
Pubkey::find_program_address(
&[b"branch", &vault_id.to_le_bytes(), &branch_id.to_le_bytes()],
&ID,
)
.0
}
pub fn get_tick_has_debt(vault_id: u16, index: u8) -> Pubkey {
Pubkey::find_program_address(
&[
b"tick_has_debt",
&vault_id.to_le_bytes(),
&index.to_le_bytes(),
],
&ID,
)
.0
}