meteora_sdk/
lib.rs

1use std::{str::FromStr, sync::Arc};
2
3use solana_network_client::SolanaClient;
4use solana_sdk::pubkey::Pubkey;
5use solana_transaction::Address;
6
7use crate::{
8    dbc::{DynamicBondingCurvePool, DynamicBondingCurvePoolData},
9    liquidity::{
10        dlmmpool::{DLMMLiquidityPool, DLMMLiquidityPoolData},
11        dynpool::{DAMMLiquidityPool, DAMMLiquidityPoolData},
12        dynv2pool::{DAMMV2LiquidityPool, DAMMV2LiquidityPoolData},
13    },
14};
15
16pub mod dbc;
17pub mod liquidity;
18
19/// A client for interacting with the Meteora protocol on Solana
20/// Provides methods to fetch account data, program accounts, and SPL token accounts
21pub struct Meteora {
22    pub solana_client: Arc<SolanaClient>,
23}
24
25impl Meteora {
26    /// crreate raydium
27    /// Example
28    /// ```rust
29    /// let sol = Solana::new(solana_network_sdk::types::Mode::MAIN);
30    /// let raydium = Meteora::new(Arc::new(sol));
31    /// ```
32    pub fn new(solana_client: Arc<SolanaClient>) -> Self {
33        Self { solana_client }
34    }
35
36    /// get dynv2 meteora liquidity pool
37    /// Example
38    /// ```rust
39    /// let sol = Solana::new(solana_network_sdk::types::Mode::MAIN);
40    /// let meteora = Meteora::new(Arc::new(sol));
41    /// // 5gB4NPgFB3MHFHSeKN4sbaY6t9MB8ikCe9HyiKYid4Td SOL-USDC pool
42    /// let pool_data = meteora.get_liquidity_pool_dynv2("5gB4NPgFB3MHFHSeKN4sbaY6t9MB8ikCe9HyiKYid4Td").await;
43    /// ```
44    pub async fn get_liquidity_pool_dynv2(
45        &self,
46        address: &str,
47    ) -> Result<DAMMV2LiquidityPoolData, String> {
48        let v = self
49            .solana_client
50            .client_arc()
51            .get_account_data(
52                &Pubkey::from_str(address)
53                    .map_err(|e| format!("{:?}", e))
54                    .unwrap(),
55            )
56            .await
57            .map_err(|e| format!("{:?}", e))?;
58        let pool =
59            DAMMV2LiquidityPool::get_liquidity_pool_info(&v).map_err(|e| format!("{:?}", e))?;
60        Ok(pool)
61    }
62
63    /// get dynv2 meteora liquidity pool
64    /// Example
65    /// ```rust
66    /// let sol = Solana::new(solana_network_sdk::types::Mode::MAIN);
67    /// let meteora = Meteora::new(Arc::new(sol));
68    /// // DqAfrGV2GBxpGRsq6Xk1z9ojRncqgLeeVPaKg5bCc24Z SOL-USDC pool
69    /// let pool_data = meteora.get_liquidity_pool_dyn("DqAfrGV2GBxpGRsq6Xk1z9ojRncqgLeeVPaKg5bCc24Z").await;
70    /// ```
71    pub async fn get_liquidity_pool_dyn(
72        &self,
73        address: &str,
74    ) -> Result<DAMMLiquidityPoolData, String> {
75        let v = self
76            .solana_client
77            .client_arc()
78            .get_account_data(
79                &Pubkey::from_str(address)
80                    .map_err(|e| format!("{:?}", e))
81                    .unwrap(),
82            )
83            .await
84            .map_err(|e| format!("{:?}", e))?;
85        let pool =
86            DAMMLiquidityPool::get_liquidity_pool_info(&v).map_err(|e| format!("{:?}", e))?;
87        Ok(pool)
88    }
89
90    /// get dynv2 meteora liquidity pool
91    /// Example
92    /// ```rust
93    /// let sol = Solana::new(solana_network_sdk::types::Mode::MAIN);
94    /// let meteora = Meteora::new(Arc::new(sol));
95    /// // BjxkogRUDnb72MSBTfsyuq54yntqxyVKozK9WywMszvZ SOL-USDC pool
96    /// let pool_data = meteora.get_liquidity_pool_dlmm("BjxkogRUDnb72MSBTfsyuq54yntqxyVKozK9WywMszvZ").await;
97    /// ```
98    pub async fn get_liquidity_pool_dlmm(
99        &self,
100        address: &str,
101    ) -> Result<DLMMLiquidityPoolData, String> {
102        let v = self
103            .solana_client
104            .client_arc()
105            .get_account_data(
106                &Pubkey::from_str(address)
107                    .map_err(|e| format!("{:?}", e))
108                    .unwrap(),
109            )
110            .await
111            .map_err(|e| format!("{:?}", e))?;
112        let pool =
113            DLMMLiquidityPool::get_liquidity_pool_info(&v).map_err(|e| format!("{:?}", e))?;
114        Ok(pool)
115    }
116
117    /// get dynv2 meteora liquidity pool
118    /// Example
119    /// ```rust
120    /// let sol = Solana::new(solana_network_sdk::types::Mode::MAIN);
121    /// let meteora = Meteora::new(Arc::new(sol));
122    /// // BjxkogRUDnb72MSBTfsyuq54yntqxyVKozK9WywMszvZ SOL-USDC pool
123    /// let pool_data = meteora.get_liquidity_pool_dlmm("BjxkogRUDnb72MSBTfsyuq54yntqxyVKozK9WywMszvZ").await;
124    /// ```
125    pub async fn get_liquidity_pool_dbc(
126        &self,
127        address: &str,
128    ) -> Result<DynamicBondingCurvePoolData, String> {
129        let v = self
130            .solana_client
131            .client_arc()
132            .get_account_data(
133                &Pubkey::from_str(address)
134                    .map_err(|e| format!("{:?}", e))
135                    .unwrap(),
136            )
137            .await
138            .map_err(|e| format!("{:?}", e))?;
139        let pool =
140            DynamicBondingCurvePool::get_dbc_pool_info(&v).map_err(|e| format!("{:?}", e))?;
141        Ok(pool)
142    }
143}