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}