diff --git a/src/error/mod.rs b/src/error/mod.rs index f59d79e..24f4b57 100755 --- a/src/error/mod.rs +++ b/src/error/mod.rs @@ -80,6 +80,8 @@ pub enum ClientError { Other(String), + Anyhow(&'static str), + InvalidData(String), PumpFunBuy(String), @@ -109,6 +111,7 @@ impl std::fmt::Display for ClientError { Self::ExternalService(msg) => write!(f, "External service error: {}", msg), Self::RateLimitExceeded => write!(f, "Rate limit exceeded"), Self::OrderLimitExceeded => write!(f, "Order limit exceeded"), + Self::Anyhow(msg) => write!(f, "Anyhow error: {}", msg), Self::Solana(msg, details) => write!(f, "Solana error: {}, details: {}", msg, details), Self::Parse(msg, details) => write!(f, "Parse error: {}, details: {}", msg, details), Self::Jito(msg, details) => write!(f, "Jito error: {}, details: {}", msg, details), diff --git a/src/lib.rs b/src/lib.rs index 860ceb4..b679d45 100755 --- a/src/lib.rs +++ b/src/lib.rs @@ -658,6 +658,26 @@ impl PumpFun { let token_price_in_usdc = sol_price_in_usdc * token_amount; Ok(token_price_in_usdc) } + + pub async fn get_sol_price_in_usdc(&self) -> Result { + let url = "https://api.jup.ag/price/v2?ids=So11111111111111111111111111111111111111112"; + let response: serde_json::Value = reqwest::get(url) + .await + .map_err(|_| ClientError::Anyhow("Failed to install crypto provider"))? + .json() + .await + .map_err(|_| ClientError::Anyhow("Failed to install crypto provider"))?; + + let sol_price_str = response["data"]["So11111111111111111111111111111111111111112"]["price"] + .as_str() + .ok_or(ClientError::Anyhow("Failed to find SOL price as a string"))?; + + let sol_price_in_usdc: f64 = sol_price_str + .parse() + .map_err(|_| ClientError::Anyhow("Failed to parse SOL price as a string"))?; + + Ok(sol_price_in_usdc) + } } #[cfg(test)] diff --git a/src/main.rs b/src/main.rs index f3b520c..c03f7b9 100755 --- a/src/main.rs +++ b/src/main.rs @@ -1,5 +1,5 @@ use mai3_pumpfun_sdk::common::{ - logs_events::DexEvent, + logs_events::PumpfunEvent, logs_subscribe::{tokens_subscription, stop_subscription} }; use solana_sdk::commitment_config::CommitmentConfig; @@ -14,18 +14,18 @@ async fn main() -> Result<(), Box> { let commitment = CommitmentConfig::confirmed(); // Define callback function - let callback = |event: DexEvent| { + let callback = |event: PumpfunEvent| { match event { - DexEvent::NewToken(token_info) => { + PumpfunEvent::NewToken(token_info) => { println!("Received new token event: {:?}", token_info); }, - DexEvent::NewUserTrade(trade_info) => { + PumpfunEvent::NewUserTrade(trade_info) => { println!("Received new trade event: {:?}", trade_info); }, - DexEvent::NewBotTrade(trade_info) => { + PumpfunEvent::NewBotTrade(trade_info) => { println!("Received new bot trade event: {:?}", trade_info); }, - DexEvent::Error(err) => { + PumpfunEvent::Error(err) => { println!("Received error: {}", err); } }