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§
Sourcefn pool_address(&self) -> &Pubkey
fn pool_address(&self) -> &Pubkey
Get the pool’s on-chain address
Sourcefn token_a_address(&self) -> &Pubkey
fn token_a_address(&self) -> &Pubkey
Get the address of token A
Sourcefn token_b_address(&self) -> &Pubkey
fn token_b_address(&self) -> &Pubkey
Get the address of token B
Sourcefn token_a_vault_address(&self) -> &Pubkey
fn token_a_vault_address(&self) -> &Pubkey
Get the vault address for token A
Sourcefn token_b_vault_address(&self) -> &Pubkey
fn token_b_vault_address(&self) -> &Pubkey
Get the vault address for token B
Sourcefn total_swap_fee_lp(&self, central_context: &Arc<CentralContext>) -> u64
fn total_swap_fee_lp(&self, central_context: &Arc<CentralContext>) -> u64
Get the total swap fee in lamports (10^9 lamports = 1 SOL)
Sourcefn as_any_mut(&mut self) -> &mut dyn Any
fn as_any_mut(&mut self) -> &mut dyn Any
Get a mutable reference to the pool as Any for type downcasting
Sourcefn price_a_over_b_lp(&self) -> u128
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
Sourcefn price_b_over_a_lp(&self) -> u128
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.
Sourcefn fetch_market_state_from_rpc(&mut self, central_context: &Arc<CentralContext>)
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.
Sourcefn token_a_amount_units(&self) -> u64
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.
Sourcefn token_b_amount_units(&self) -> u64
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.
Sourcefn directional_fees(
&self,
direction: SwapDirection,
central_context: &Arc<CentralContext>,
) -> (f64, f64)
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_contextwith updated current slot value - Needed for time-based fee calculations in Meteora DAMMv2 and DBC