pub async fn fetch_whirlpools_by_token_pair(
rpc: &RpcClient,
token_1: Pubkey,
token_2: Pubkey,
) -> Result<Vec<PoolInfo>, Box<dyn Error>>
Expand description
Fetches all possible liquidity pools between two token mints in Orca Whirlpools.
This function retrieves information about all pools between the specified token mints, including both initialized and uninitialized pools. If a pool does not exist, it creates a placeholder account for the uninitialized pool with default configuration details.
§Arguments
rpc
- A reference to the Solana RPC client.token_1
- The public key of the first token mint in the pool.token_2
- The public key of the second token mint in the pool.
§Returns
A Result
containing a Vec<PoolInfo>
:
PoolInfo::Initialized
for initialized pools, including pool state and price.PoolInfo::Uninitialized
for uninitialized pools, including configuration details.
§Errors
This function will return an error if:
- Any required account or mint information cannot be fetched.
- The pool or its configuration details are invalid.
§Example
use orca_whirlpools::{
fetch_whirlpools_by_token_pair, set_whirlpools_config_address, PoolInfo, WhirlpoolsConfigInput,
};
use solana_client::nonblocking::rpc_client::RpcClient;
use solana_sdk::pubkey::Pubkey;
use std::str::FromStr;
#[tokio::main]
async fn main() {
set_whirlpools_config_address(WhirlpoolsConfigInput::SolanaDevnet).unwrap();
let rpc = RpcClient::new("https://api.devnet.solana.com".to_string());
let token_a = Pubkey::from_str("So11111111111111111111111111111111111111112").unwrap();
let token_b = Pubkey::from_str("BRjpCHtyQLNCo8gqRUr8jtdAj5AjPYQaoqbvcZiHok1k").unwrap(); // devUSDC
let pool_infos = fetch_whirlpools_by_token_pair(&rpc, token_a, token_b)
.await
.unwrap();
for pool_info in pool_infos {
match pool_info {
PoolInfo::Initialized(pool) => println!("Pool is initialized: {:?}", pool),
PoolInfo::Uninitialized(pool) => println!("Pool is not initialized: {:?}", pool),
}
}
}