Trait PoolTrait

Source
pub trait PoolTrait:
    Any
    + Send
    + Sync {
Show 15 methods // Required methods fn pool_address(&self) -> &Pubkey; fn token_a_address(&self) -> &Pubkey; fn token_b_address(&self) -> &Pubkey; fn token_a_vault_address(&self) -> &Pubkey; fn token_b_vault_address(&self) -> &Pubkey; fn pool_type(&self) -> &Pools; fn total_swap_fee_lp(&self, central_context: &Arc<CentralContext>) -> u64; fn as_any(&self) -> &dyn Any; fn as_any_mut(&mut self) -> &mut dyn Any; fn price_a_over_b_lp(&self) -> u128; fn price_b_over_a_lp(&self) -> u128; fn fetch_market_state_from_rpc( &mut self, central_context: &Arc<CentralContext>, ); fn token_a_amount_units(&self) -> u64; fn token_b_amount_units(&self) -> u64; fn directional_fees( &self, direction: SwapDirection, central_context: &Arc<CentralContext>, ) -> (f64, f64);
}
Expand description

Trait for all pool types, providing a unified interface for DEX pools. All pools implement this trait to provide common functionality like price queries, fee calculations, and reserve lookups.

Required Methods§

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.

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 directional_fees( &self, direction: SwapDirection, central_context: &Arc<CentralContext>, ) -> (f64, f64)

Get directional swap fees as fractions for a given swap direction

Returns (fee_a_fraction, fee_b_fraction) where each value is between 0.0 and 1.0 (e.g., 0.003 = 0.3%). The fees may differ based on swap direction for protocols with asymmetric fee structures.

  • central_context with updated current slot value - Needed for time-based fee calculations in Meteora DAMMv2 and DBC

Implementors§