use anchor_lang::prelude::*;
declare_id!("ArmN3Av2boBg8pkkeCK9UuCN9zSUVc2UQg1qR2sKwm8d");
pub const MAX_POSITIONS: usize = 5;
pub const MAX_ACTIVE_POSITIONS: usize = MAX_POSITIONS;
#[derive(Clone, Copy, Default, AnchorDeserialize, AnchorSerialize)]
#[repr(C)]
pub struct SwapCache {
pub source_status: SourceState,
pub cache_state: CacheState,
_padding1: [u8; 6],
}
#[derive(Clone, Copy, Debug, Default, AnchorDeserialize, AnchorSerialize)]
#[repr(u8)]
pub enum SourceState {
#[default]
Default,
SourceIsA,
SourceIsB,
}
#[derive(Clone, Copy, Debug, Default, AnchorDeserialize, AnchorSerialize)]
#[repr(u8)]
pub enum CacheState {
#[default]
Default,
Ready,
Consumed,
}
#[derive(Clone, Copy, Default, AnchorDeserialize, AnchorSerialize)]
#[repr(C)]
pub struct VaultPosition {
pub position_key: Pubkey,
pub lower_tick: i32,
_padding0: [u8; 12],
pub upper_tick: i32,
_padding1: [u8; 12],
_reserve: [u8; 32],
_reserve1: [u8; 32],
_reserve2: [u8; 32],
_reserve3: [u8; 32],
_reserve4: [u8; 32],
_reserve5: [u8; 32],
_reserve6: [u8; 32],
_reserve7: [u8; 32],
}
#[derive(Clone, Copy, AnchorDeserialize, AnchorSerialize)]
#[repr(u8)]
pub enum StrategyType {
PriceDiscovery,
VolatilePair,
StablePair,
StableSlowlyDiverging,
}
#[derive(Clone, Copy, AnchorDeserialize, AnchorSerialize)]
pub struct TokenRatio {
pub token_a: u64,
pub token_b: u64,
}
#[derive(Clone, Copy, AnchorDeserialize, AnchorSerialize)]
#[repr(C)]
pub struct VaultRatioCache {
pub total_token_a: u64,
pub total_token_b: u64,
pub lp_supply: u64,
pub cached_at: i64,
}
#[derive(Clone, Copy, Default, AnchorDeserialize, AnchorSerialize)]
#[repr(C)]
pub struct SwapEventCache {
pub source_before: u64,
pub dest_before: u64,
pub source_after: u64,
pub dest_after: u64
}
#[account(zero_copy)]
#[repr(C)]
pub struct ClpVault {
pub bump_seed: u8,
pub features_enabled: u8,
pub swap_cache: SwapCache,
_padding0: [u8; 6],
pub nonce: u16,
_padding1: [u8; 14],
pub clp: Pubkey,
pub lp_mint: Pubkey,
pub lp_mint_bump: u8,
_padding2: [u8; 15],
pub token_mint_a: Pubkey,
pub token_vault_a: Pubkey,
pub token_mint_b: Pubkey,
pub token_vault_b: Pubkey,
pub performance_fee: u32,
_padding3: [u8; 12],
pub withdrawal_fee: u32,
_padding4: [u8; 12],
pub market_making_fee: u32,
_padding5: [u8; 12],
pub strategy: StrategyType,
_padding6: [u8; 15],
pub market_making_key: Pubkey,
pub admin_key: Pubkey,
pub fee_owner: Pubkey,
pub num_active_positions: u8,
_padding7: [u8; 15],
pub position_bundle_token_account: Pubkey,
pub position_bundle_mint: Pubkey,
pub position_bundle: Pubkey,
pub positions: [VaultPosition; MAX_POSITIONS],
pub initial_token_ratio: TokenRatio,
pub stake_pool: Pubkey,
pub ratio_cache: VaultRatioCache,
pub swap_event_cache: SwapEventCache,
_reserved0: [u8; 416],
_reserved1: [u8; 512],
}