use solana_pubkey::Pubkey;
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[derive(Debug, Clone, borsh::BorshSerialize, borsh::BorshDeserialize, PartialEq)]
pub struct AdaptiveFeeTier {
pub whirlpools_config: Pubkey,
pub fee_tier_index: u16,
pub tick_spacing: u16,
pub initialize_pool_authority: Pubkey,
pub delegated_fee_authority: Pubkey,
pub default_base_fee_rate: u16,
pub filter_period: u16,
pub decay_period: u16,
pub reduction_factor: u16,
pub adaptive_fee_control_factor: u32,
pub max_volatility_accumulator: u32,
pub tick_group_size: u16,
pub major_swap_threshold_ticks: u16,
}
impl AdaptiveFeeTier {
pub fn decode(data: &[u8]) -> Option<Self> {
if data.len() < 8 {
return None;
}
let discriminator = &data[0..8];
if discriminator != [147, 16, 144, 116, 47, 146, 149, 46] {
return None;
}
let mut data_slice = data;
data_slice = &data_slice[8..];
borsh::BorshDeserialize::deserialize(&mut data_slice).ok()
}
}