pub struct MeteoraDammV2Pool {Show 27 fields
pub info: Pool,
pub cliff_fee_numerator: u64,
pub base_fee_mode: u8,
pub first_factor: u16,
pub second_factor: [u8; 8],
pub third_factor: u64,
pub protocol_fee_percent: u8,
pub referral_fee_percent: u8,
pub initialized: u8,
pub variable_fee_control: u32,
pub bin_step: u16,
pub last_update_timestamp: u64,
pub sqrt_price_reference: u128,
pub volatility_accumulator: u128,
pub volatility_reference: u128,
pub activation_point: u64,
pub activation_type: u8,
pub liquidity: u128,
pub sqrt_price: u128,
pub collect_fee_mode: u8,
pub protocol_a_fee: u64,
pub protocol_b_fee: u64,
pub partner_a_fee: u64,
pub partner_b_fee: u64,
pub sqrt_min_price: u128,
pub sqrt_max_price: u128,
pub version: u8,
}Expand description
Struct to hold data and PoolTrait implementation for Meteora Ammv2/Dammv2 pools.
Fields§
§info: Pool§cliff_fee_numerator: u64§base_fee_mode: u8§first_factor: u16§second_factor: [u8; 8]§third_factor: u64§protocol_fee_percent: u8§referral_fee_percent: u8§initialized: u8§variable_fee_control: u32§bin_step: u16§last_update_timestamp: u64§sqrt_price_reference: u128§volatility_accumulator: u128§volatility_reference: u128§activation_point: u64§activation_type: u8§liquidity: u128§sqrt_price: u128§collect_fee_mode: u8§protocol_a_fee: u64§protocol_b_fee: u64§partner_a_fee: u64§partner_b_fee: u64§sqrt_min_price: u128§sqrt_max_price: u128§version: u8Implementations§
Source§impl MeteoraDammV2Pool
impl MeteoraDammV2Pool
Sourcepub fn calculate_base_fee_numerator(
&self,
central_context: &Arc<CentralContext>,
) -> u64
pub fn calculate_base_fee_numerator( &self, central_context: &Arc<CentralContext>, ) -> u64
Calculate the base fee numerator for DAMMv2 pools with fee scheduling
Supports multiple fee modes:
- Linear decay: Fee decreases linearly over periods
- Exponential decay: Fee decreases exponentially over periods
- Rate limiter: Not yet implemented, returns cliff fee
The calculation is based on the activation point and elapsed time/slots since activation.
Source§impl MeteoraDammV2Pool
impl MeteoraDammV2Pool
Sourcepub fn calculate_dynamic_fee_numerator(&self) -> u64
pub fn calculate_dynamic_fee_numerator(&self) -> u64
Calculate the dynamic fee numerator based on volatility
The dynamic fee increases with volatility according to the formula:
((volatility_accumulator * bin_step)^2 * variable_fee_control + 99_999_999_999) / 100_000_000_000
Returns 0 if dynamic fees are not initialized or variable fee control is disabled.
Source§impl MeteoraDammV2Pool
impl MeteoraDammV2Pool
Sourcepub fn from_account_info(pubkey: Pubkey, account_buffer: &[u8]) -> Self
pub fn from_account_info(pubkey: Pubkey, account_buffer: &[u8]) -> Self
Create a Meteora DAMMv2 pool from on-chain account data
Parses the account buffer using the Meteora DAMMv2 pool IDL structure. DAMMv2 pools support dynamic fees based on volatility and time-based schedules.
Trait Implementations§
Source§impl Debug for MeteoraDammV2Pool
impl Debug for MeteoraDammV2Pool
Source§impl PoolTrait for MeteoraDammV2Pool
impl PoolTrait for MeteoraDammV2Pool
Source§fn directional_fees(
&self,
direction: SwapDirection,
central_context: &Arc<CentralContext>,
) -> (f64, f64)
fn directional_fees( &self, direction: SwapDirection, central_context: &Arc<CentralContext>, ) -> (f64, f64)
Returns the directional fees for a given swap direction as fractions. Meteora DAMMV2 charges fees on ONLY ONE token at a time:
- In BothToken mode (collect_fee_mode=0): fees are charged on the OUTPUT token. It says this in the program source code
- In OnlyB mode (collect_fee_mode=1): fees are always charged on token B (input or output)
Source§fn token_a_amount_units(&self) -> u64
fn token_a_amount_units(&self) -> u64
Source§fn token_b_amount_units(&self) -> u64
fn token_b_amount_units(&self) -> u64
token_a_amount_units
for details on why this is calculated dynamically.Source§fn pool_address(&self) -> &Pubkey
fn pool_address(&self) -> &Pubkey
Source§fn token_a_address(&self) -> &Pubkey
fn token_a_address(&self) -> &Pubkey
Source§fn token_b_address(&self) -> &Pubkey
fn token_b_address(&self) -> &Pubkey
Source§fn token_a_vault_address(&self) -> &Pubkey
fn token_a_vault_address(&self) -> &Pubkey
Source§fn token_b_vault_address(&self) -> &Pubkey
fn token_b_vault_address(&self) -> &Pubkey
Source§fn total_swap_fee_lp(&self, central_context: &Arc<CentralContext>) -> u64
fn total_swap_fee_lp(&self, central_context: &Arc<CentralContext>) -> u64
Source§fn as_any_mut(&mut self) -> &mut dyn Any
fn as_any_mut(&mut self) -> &mut dyn Any
Any for type downcastingSource§fn price_a_over_b_lp(&self) -> u128
fn price_a_over_b_lp(&self) -> u128
Source§fn price_b_over_a_lp(&self) -> u128
fn price_b_over_a_lp(&self) -> u128
price_a_over_b_lp.Source§fn fetch_market_state_from_rpc(&mut self, central_context: &Arc<CentralContext>)
fn fetch_market_state_from_rpc(&mut self, central_context: &Arc<CentralContext>)
Auto Trait Implementations§
impl Freeze for MeteoraDammV2Pool
impl RefUnwindSafe for MeteoraDammV2Pool
impl Send for MeteoraDammV2Pool
impl Sync for MeteoraDammV2Pool
impl Unpin for MeteoraDammV2Pool
impl UnwindSafe for MeteoraDammV2Pool
Blanket Implementations§
Source§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
Source§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more