Struct MeteoraDammV2Pool

Source
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: u8

Implementations§

Source§

impl MeteoraDammV2Pool

Source

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

Source

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

Source

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

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl PoolTrait for MeteoraDammV2Pool

Source§

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

Get the actual amount of token A in the pool, in token units. This is calculated dynamically because some protocols (like Meteora) derive real token balances from LP token balances rather than storing them directly in the pool account, and other protocols require excluding collected fees from raw reserves.
Source§

fn token_b_amount_units(&self) -> u64

Get the actual amount of token B in the pool, in token units. See token_a_amount_units for details on why this is calculated dynamically.
Source§

fn pool_address(&self) -> &Pubkey

Get the pool’s on-chain address
Source§

fn token_a_address(&self) -> &Pubkey

Get the address of token A
Source§

fn token_b_address(&self) -> &Pubkey

Get the address of token B
Source§

fn token_a_vault_address(&self) -> &Pubkey

Get the vault address for token A
Source§

fn token_b_vault_address(&self) -> &Pubkey

Get the vault address for token B
Source§

fn pool_type(&self) -> &Pools

Get the pool type enum variant
Source§

fn total_swap_fee_lp(&self, central_context: &Arc<CentralContext>) -> u64

Get the total swap fee in lamports (10^9 lamports = 1 SOL)
Source§

fn as_any(&self) -> &dyn Any

Get a reference to the pool as Any for type downcasting
Source§

fn as_any_mut(&mut self) -> &mut dyn Any

Get a mutable reference to the pool as Any for type downcasting
Source§

fn price_a_over_b_lp(&self) -> u128

Calculate the price of token A in terms of token B. Fx ticker equivalent: B/A. Returns how many units of token A are needed to buy 1 unit of token B, in lamports. For AMMs, typically calculated as: (A reserves * LAMPORTS_PER_SOL) / B reserves
Source§

fn price_b_over_a_lp(&self) -> u128

Calculate the price of token B in terms of token A. Fx ticker equivalent: A/B. Returns how many units of token A are needed to buy 1 unit of token B, in lamports. For AMMs, typically calculated as: (B reserves * LAMPORTS_PER_SOL) / A reserves. Inverse of price_a_over_b_lp.
Source§

fn fetch_market_state_from_rpc(&mut self, central_context: &Arc<CentralContext>)

Fetch and update pool state from JSON RPC and immediately overrides the in-memory pool state. Should not be used in production in favor of using gRPC streams.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<'a, T, E> AsTaggedExplicit<'a, E> for T
where T: 'a,

Source§

fn explicit(self, class: Class, tag: u32) -> TaggedParser<'a, Explicit, Self, E>

Source§

impl<'a, T, E> AsTaggedImplicit<'a, E> for T
where T: 'a,

Source§

fn implicit( self, class: Class, constructed: bool, tag: u32, ) -> TaggedParser<'a, Implicit, Self, E>

Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more