This commit is contained in:
2026-08-07 09:30:43 +02:00
parent c1f591b940
commit 2f084bab24
4 changed files with 56 additions and 122 deletions
+1 -1
View File
@@ -1,7 +1,7 @@
pub mod bot;
pub mod data;
pub mod strategy;
pub mod types;
// pub mod types;
use std::sync::Arc;
+53 -4
View File
@@ -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 {
+2 -2
View File
@@ -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);
-115
View File
@@ -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<String> },
Create(NewToken),
Trade(Trade),
}
impl<'de> Deserialize<'de> for PumpDevEvent {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
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<String> },
}
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,
}