use {
crate::types::{Currency, CurveType, MigrationTarget},
solana_pubkey::Pubkey,
};
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[derive(Debug, Clone, borsh::BorshSerialize, borsh::BorshDeserialize, PartialEq)]
pub struct CurveAccount {
pub total_supply: u64,
pub curve_amount: u64,
pub mint: Pubkey,
pub decimals: u8,
pub collateral_currency: Currency,
pub curve_type: CurveType,
pub marketcap_threshold: u64,
pub marketcap_currency: Currency,
pub migration_fee: u64,
pub coef_b: u32,
pub bump: u8,
pub migration_target: MigrationTarget,
}
impl CurveAccount {
pub fn decode(data: &[u8]) -> Option<Self> {
if data.len() < 8 {
return None;
}
let discriminator = &data[0..8];
if discriminator != [8, 91, 83, 28, 132, 216, 248, 22] {
return None;
}
let mut data_slice = data;
data_slice = &data_slice[8..];
borsh::BorshDeserialize::deserialize(&mut data_slice).ok()
}
}