diff --git a/src/main.rs b/src/main.rs index 4db2e5c..a2acef3 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,7 +1,7 @@ pub mod bot; pub mod data; pub mod strategy; -pub mod types; +// pub mod types; use std::sync::Arc; diff --git a/src/strategy/mod.rs b/src/strategy/mod.rs index d358b70..77ad8ef 100644 --- a/src/strategy/mod.rs +++ b/src/strategy/mod.rs @@ -2,10 +2,59 @@ pub mod veloc; use std::sync::Arc; -use crate::{ - bot::Bot, - types::{NewToken, Trade}, -}; +use crate::bot::Bot; + +use serde::Deserialize; + +#[derive(Debug, Clone, Deserialize)] +pub struct NewToken { + pub mint: String, + #[serde(rename = "traderPublicKey")] + pub trader_public_key: String, + + pub name: String, + pub symbol: String, + pub uri: String, + #[serde(rename = "marketCapSol")] + pub market_cap_sol: f64, + #[serde(rename = "solAmount")] + pub sol_amount: f64, +} + +#[derive(Debug, Clone, Deserialize)] +pub enum TradeType { + #[serde(rename = "buy")] + Buy, + #[serde(rename = "sell")] + Sell, +} + +#[derive(Debug, Clone, Deserialize)] +pub struct Trade { + pub signature: String, + pub mint: String, + + #[serde(rename = "traderPublicKey")] + pub trader: String, + + #[serde(rename = "txType")] + pub tx_type: TradeType, + + #[serde(rename = "solAmount")] + pub sol_amount: f64, + + #[serde(rename = "tokenAmount")] + pub token_amount: f64, + + #[serde(rename = "marketCapSol")] + pub market_cap_sol: f64, + + #[serde(rename = "vTokensInBondingCurve")] + pub v_tokens_in_bonding_curve: f64, + + #[serde(rename = "vSolInBondingCurve")] + pub v_sol_in_bonding_curve: f64, +} #[async_trait::async_trait] pub trait Strategy: Send + Sync { diff --git a/src/strategy/veloc.rs b/src/strategy/veloc.rs index 9e29469..fe7f09f 100644 --- a/src/strategy/veloc.rs +++ b/src/strategy/veloc.rs @@ -5,10 +5,10 @@ use std::time::{Duration, Instant}; use log::{debug, info, trace, warn}; use rust_decimal::{Decimal, dec}; +use super::{NewToken, Trade}; use crate::bot::Bot; use crate::data::tradelog::{ExitReason, TradeLog}; -use crate::strategy::Strategy; -use crate::types::{NewToken, Trade, TradeType}; +use crate::strategy::{Strategy, TradeType}; const BUY_AMOUNT_SOL: Decimal = dec!(0.2); const PRIORITY: Decimal = dec!(0.0002); diff --git a/src/types.rs b/src/types.rs deleted file mode 100644 index fc2a030..0000000 --- a/src/types.rs +++ /dev/null @@ -1,115 +0,0 @@ -use serde::{Deserialize, Deserializer}; -use serde_json::Value; - -#[derive(Debug)] -pub enum PumpDevEvent { - Connected { client_id: u64, message: String }, - ConnectionStatus { connected: bool, timestamp: u64 }, - Subscribed { method: String }, - Unsubscribed { method: String, keys: Vec }, - Create(NewToken), - Trade(Trade), -} - -impl<'de> Deserialize<'de> for PumpDevEvent { - fn deserialize(deserializer: D) -> Result - where - D: Deserializer<'de>, - { - let value = Value::deserialize(deserializer)?; - if value.get("txType").is_some() && value.get("name").is_none() { - let trade: Trade = serde_json::from_value(value).map_err(serde::de::Error::custom)?; - return Ok(PumpDevEvent::Trade(trade)); - } - - if value.get("name").is_some() { - let token: NewToken = - serde_json::from_value(value).map_err(serde::de::Error::custom)?; - return Ok(PumpDevEvent::Create(token)); - } - - #[derive(Deserialize)] - #[serde(tag = "type")] - enum Tagged { - #[serde(rename = "connected")] - Connected { - #[serde(rename = "clientId")] - client_id: u64, - message: String, - }, - #[serde(rename = "connectionStatus")] - ConnectionStatus { connected: bool, timestamp: u64 }, - #[serde(rename = "subscribed")] - Subscribed { method: String }, - #[serde(rename = "unsubscribed")] - Unsubscribed { method: String, keys: Vec }, - } - - match serde_json::from_value(value).map_err(serde::de::Error::custom)? { - Tagged::Connected { client_id, message } => { - Ok(PumpDevEvent::Connected { client_id, message }) - } - Tagged::ConnectionStatus { - connected, - timestamp, - } => Ok(PumpDevEvent::ConnectionStatus { - connected, - timestamp, - }), - Tagged::Subscribed { method } => Ok(PumpDevEvent::Subscribed { method }), - Tagged::Unsubscribed { method, keys } => { - Ok(PumpDevEvent::Unsubscribed { method, keys }) - } - } - } -} - -#[derive(Debug, Clone, Deserialize)] -pub struct NewToken { - pub mint: String, - #[serde(rename = "traderPublicKey")] - pub trader_public_key: String, - - pub name: String, - pub symbol: String, - pub uri: String, - #[serde(rename = "marketCapSol")] - pub market_cap_sol: f64, - #[serde(rename = "solAmount")] - pub sol_amount: f64, -} - -#[derive(Debug, Clone, Deserialize)] -pub enum TradeType { - #[serde(rename = "buy")] - Buy, - #[serde(rename = "sell")] - Sell, -} - -#[derive(Debug, Clone, Deserialize)] -pub struct Trade { - pub signature: String, - pub mint: String, - - #[serde(rename = "traderPublicKey")] - pub trader: String, - - #[serde(rename = "txType")] - pub tx_type: TradeType, - - #[serde(rename = "solAmount")] - pub sol_amount: f64, - - #[serde(rename = "tokenAmount")] - pub token_amount: f64, - - #[serde(rename = "marketCapSol")] - pub market_cap_sol: f64, - - #[serde(rename = "vTokensInBondingCurve")] - pub v_tokens_in_bonding_curve: f64, - - #[serde(rename = "vSolInBondingCurve")] - pub v_sol_in_bonding_curve: f64, -}