From 756ec6e2634b11f4a8b6debdf3f73200823b2920 Mon Sep 17 00:00:00 2001 From: ysq Date: Thu, 10 Jul 2025 00:23:29 +0800 Subject: [PATCH] refactor: rename protocol from RaydiumLaunchpad to Bonk Comprehensive renaming of RaydiumLaunchpad-related modules, structs, event types and constants to Bonk while maintaining functional logic --- README.md | 54 +++++++++---------- README_CN.md | 54 +++++++++---------- src/{raydium_launchpad => bonk}/buy.rs | 10 ++-- src/{raydium_launchpad => bonk}/common.rs | 8 +-- src/{raydium_launchpad => bonk}/mod.rs | 0 src/{raydium_launchpad => bonk}/pool.rs | 6 +-- src/{raydium_launchpad => bonk}/sell.rs | 10 ++-- .../{raydium_launchpad => bonk}/mod.rs | 2 +- src/constants/mod.rs | 4 +- src/event_parser/common/types.rs | 15 +++--- src/event_parser/core/traits.rs | 12 ++--- src/event_parser/factory.rs | 12 ++--- .../{raydium_launchpad => bonk}/events.rs | 10 ++-- .../{raydium_launchpad => bonk}/mod.rs | 2 +- .../{raydium_launchpad => bonk}/parser.rs | 48 ++++++++--------- .../{raydium_launchpad => bonk}/types.rs | 0 src/event_parser/protocols/mod.rs | 4 +- src/grpc/shred_stream.rs | 4 +- src/grpc/yellow_stone.rs | 4 +- src/lib.rs | 30 +++++------ src/main.rs | 38 ++++++------- src/trading/core/params.rs | 6 +-- src/trading/factory.rs | 16 +++--- .../{raydium_launchpad.rs => bonk.rs} | 26 ++++----- src/trading/protocols/mod.rs | 2 +- 25 files changed, 188 insertions(+), 189 deletions(-) rename src/{raydium_launchpad => bonk}/buy.rs (90%) rename src/{raydium_launchpad => bonk}/common.rs (89%) rename src/{raydium_launchpad => bonk}/mod.rs (100%) rename src/{raydium_launchpad => bonk}/pool.rs (86%) rename src/{raydium_launchpad => bonk}/sell.rs (94%) rename src/constants/{raydium_launchpad => bonk}/mod.rs (95%) rename src/event_parser/protocols/{raydium_launchpad => bonk}/events.rs (93%) rename src/event_parser/protocols/{raydium_launchpad => bonk}/mod.rs (65%) rename src/event_parser/protocols/{raydium_launchpad => bonk}/parser.rs (91%) rename src/event_parser/protocols/{raydium_launchpad => bonk}/types.rs (100%) rename src/trading/protocols/{raydium_launchpad.rs => bonk.rs} (94%) diff --git a/README.md b/README.md index 32864ba..1f8369f 100755 --- a/README.md +++ b/README.md @@ -1,13 +1,13 @@ # Sol Trade SDK -A comprehensive Rust SDK for seamless interaction with Solana DEX trading programs. This SDK provides a robust set of tools and interfaces to integrate PumpFun, PumpSwap, and Raydium Launchpad (Bonk.fun) functionality into your applications. +A comprehensive Rust SDK for seamless interaction with Solana DEX trading programs. This SDK provides a robust set of tools and interfaces to integrate PumpFun, PumpSwap, and Bonk functionality into your applications. ## Project Features 1. **PumpFun Trading**: Support for `buy` and `sell` operations 2. **PumpSwap Trading**: Support for PumpSwap pool trading operations -3. **Raydium Trading**: Support for Raydium Launchpad (Bonk.fun) trading operations -4. **Event Subscription**: Subscribe to PumpFun, PumpSwap, and Raydium Launchpad (Bonk.fun) program trading events +3. **Bonk Trading**: Support for Bonk trading operations +4. **Event Subscription**: Subscribe to PumpFun, PumpSwap, and Bonk program trading events 5. **Yellowstone gRPC**: Subscribe to program events using Yellowstone gRPC 6. **ShredStream Support**: Subscribe to program events using ShredStream 7. **Multiple MEV Protection**: Support for Jito, Nextblock, ZeroSlot, Temporal, Bloxroute, and other services @@ -45,7 +45,7 @@ use sol_trade_sdk::{ PumpSwapBuyEvent, PumpSwapCreatePoolEvent, PumpSwapDepositEvent, PumpSwapSellEvent, PumpSwapWithdrawEvent, }, - raydium_launchpad::{RaydiumLaunchpadPoolCreateEvent, RaydiumLaunchpadTradeEvent}, + bonk::{BonkPoolCreateEvent, BonkTradeEvent}, }, Protocol, UnifiedEvent, }, @@ -65,11 +65,11 @@ async fn test_grpc() -> Result<(), Box> { // Define callback function to handle events let callback = |event: Box| { match_event!(event, { - RaydiumLaunchpadPoolCreateEvent => |e: RaydiumLaunchpadPoolCreateEvent| { - println!("RaydiumLaunchpadPoolCreateEvent: {:?}", e.base_mint_param.symbol); + BonkPoolCreateEvent => |e: BonkPoolCreateEvent| { + println!("BonkPoolCreateEvent: {:?}", e.base_mint_param.symbol); }, - RaydiumLaunchpadTradeEvent => |e: RaydiumLaunchpadTradeEvent| { - println!("RaydiumLaunchpadTradeEvent: {:?}", e); + BonkTradeEvent => |e: BonkTradeEvent| { + println!("BonkTradeEvent: {:?}", e); }, PumpFunTradeEvent => |e: PumpFunTradeEvent| { println!("PumpFunTradeEvent: {:?}", e); @@ -100,7 +100,7 @@ async fn test_grpc() -> Result<(), Box> { let protocols = vec![ Protocol::PumpFun, Protocol::PumpSwap, - Protocol::RaydiumLaunchpad, + Protocol::Bonk, ]; grpc.subscribe_events(protocols, None, None, None, callback) .await?; @@ -123,11 +123,11 @@ async fn test_shreds() -> Result<(), Box> { // Define callback function to handle events (same as above) let callback = |event: Box| { match_event!(event, { - RaydiumLaunchpadPoolCreateEvent => |e: RaydiumLaunchpadPoolCreateEvent| { - println!("RaydiumLaunchpadPoolCreateEvent: {:?}", e.base_mint_param.symbol); + BonkPoolCreateEvent => |e: BonkPoolCreateEvent| { + println!("BonkPoolCreateEvent: {:?}", e.base_mint_param.symbol); }, - RaydiumLaunchpadTradeEvent => |e: RaydiumLaunchpadTradeEvent| { - println!("RaydiumLaunchpadTradeEvent: {:?}", e); + BonkTradeEvent => |e: BonkTradeEvent| { + println!("BonkTradeEvent: {:?}", e); }, PumpFunTradeEvent => |e: PumpFunTradeEvent| { println!("PumpFunTradeEvent: {:?}", e); @@ -158,7 +158,7 @@ async fn test_shreds() -> Result<(), Box> { let protocols = vec![ Protocol::PumpFun, Protocol::PumpSwap, - Protocol::RaydiumLaunchpad, + Protocol::Bonk, ]; shred_stream .shredstream_subscribe(protocols, None, callback) @@ -376,19 +376,19 @@ async fn test_pumpswap() -> AnyResult<()> { } ``` -### 5. Raydium Launchpad Trading Operations +### 5. Bonk Trading Operations ```rust -use sol_trade_sdk::trading::core::params::RaydiumLaunchpadParams; +use sol_trade_sdk::trading::core::params::BonkParams; -async fn test_raydium_launchpad() -> Result<(), Box> { +async fn test_bonk() -> Result<(), Box> { // Basic parameter setup let amount = 100_000; // 0.0001 SOL let mint = Pubkey::from_str("xxxxxxx")?; let recent_blockhash = solana_trade_client.rpc.get_latest_blockhash().await?; - // Raydium Launchpad parameter configuration - let raydium_launchpad_params = RaydiumLaunchpadParams { + // Bonk parameter configuration + let bonk_params = BonkParams { virtual_base: None, virtual_quote: None, real_base_before: None, @@ -396,7 +396,7 @@ async fn test_raydium_launchpad() -> Result<(), Box> { auto_handle_wsol: true, }; - println!("Buying tokens from Raydium Launchpad..."); + println!("Buying tokens from letsbonk.fun..."); // Buy operation let buy_params = BuyParams { @@ -410,7 +410,7 @@ async fn test_raydium_launchpad() -> Result<(), Box> { lookup_table_key: solana_trade_client.trade_config.clone().lookup_table_key, recent_blockhash, data_size_limit: 0, - protocol_params: Box::new(raydium_launchpad_params.clone()), + protocol_params: Box::new(bonk_params.clone()), }; let buy_with_tip_params = buy_params @@ -422,7 +422,7 @@ async fn test_raydium_launchpad() -> Result<(), Box> { .await?; // Sell operation - println!("Selling tokens from Raydium Launchpad..."); + println!("Selling tokens from letsbonk.fun..."); let sell_params = SellParams { rpc: Some(solana_trade_client.rpc.clone()), @@ -434,7 +434,7 @@ async fn test_raydium_launchpad() -> Result<(), Box> { priority_fee: solana_trade_client.trade_config.clone().priority_fee, lookup_table_key: solana_trade_client.trade_config.clone().lookup_table_key, recent_blockhash, - protocol_params: Box::new(raydium_launchpad_params.clone()), + protocol_params: Box::new(bonk_params.clone()), }; solana_trade_client @@ -475,7 +475,7 @@ let trade_config = TradeConfig { - **PumpFun**: Primary meme coin trading platform - **PumpSwap**: PumpFun's swap protocol -- **Raydium Launchpad**: Raydium's token launch platform (Bonk.fun) +- **Bonk**: token launch platform (letsbonk.fun) ## MEV Protection Services @@ -491,7 +491,7 @@ let trade_config = TradeConfig { - **BuyParams**: Unified buy parameter structure - **SellParams**: Unified sell parameter structure -- **Protocol-specific Parameters**: Each protocol has its own parameter structure (PumpFunParams, PumpSwapParams, RaydiumLaunchpadParams) +- **Protocol-specific Parameters**: Each protocol has its own parameter structure (PumpFunParams, PumpSwapParams, BonkParams) ### Event Parsing System @@ -519,14 +519,14 @@ src/ │ ├── protocols/ # Protocol-specific parsers │ │ ├── pumpfun/ # PumpFun event parsing │ │ ├── pumpswap/ # PumpSwap event parsing -│ │ └── raydium_launchpad/ # Raydium Launchpad event parsing +│ │ └── bonk/ # Bonk event parsing │ └── factory.rs # Parser factory ├── grpc/ # gRPC clients ├── instruction/ # Instruction building ├── protos/ # Protocol buffer definitions ├── pumpfun/ # PumpFun trading functionality ├── pumpswap/ # PumpSwap trading functionality -├── raydium_launchpad/ # Raydium Launchpad trading functionality +├── bonk/ # Bonk trading functionality ├── swqos/ # MEV service clients ├── trading/ # Unified trading engine │ ├── common/ # Common trading tools diff --git a/README_CN.md b/README_CN.md index d815144..4efc2b7 100755 --- a/README_CN.md +++ b/README_CN.md @@ -1,13 +1,13 @@ # Sol Trade SDK -一个全面的 Rust SDK,用于与 Solana DEX 交易程序进行无缝交互。此 SDK 提供强大的工具和接口集,将 PumpFun、PumpSwap 和 Raydium Launchpad(Bonk.fun)功能集成到您的应用程序中。 +一个全面的 Rust SDK,用于与 Solana DEX 交易程序进行无缝交互。此 SDK 提供强大的工具和接口集,将 PumpFun、PumpSwap 和 Bonk 功能集成到您的应用程序中。 ## 项目特性 1. **PumpFun 交易**: 支持`购买`、`卖出`功能 2. **PumpSwap 交易**: 支持 PumpSwap 池的交易操作 -3. **Raydium 交易**: 支持 Raydium Launchpad(Bonk.fun)的交易操作 -4. **事件订阅**: 订阅 PumpFun、PumpSwap 和 Raydium Launchpad(Bonk.fun)程序的交易事件 +3. **Bonk 交易**: 支持 Bonk 的交易操作 +4. **事件订阅**: 订阅 PumpFun、PumpSwap 和 Bonk 程序的交易事件 5. **Yellowstone gRPC**: 使用 Yellowstone gRPC 订阅程序事件 6. **ShredStream 支持**: 使用 ShredStream 订阅程序事件 7. **多种 MEV 保护**: 支持 Jito、Nextblock、ZeroSlot、Temporal、Bloxroute 等服务 @@ -45,7 +45,7 @@ use sol_trade_sdk::{ PumpSwapBuyEvent, PumpSwapCreatePoolEvent, PumpSwapDepositEvent, PumpSwapSellEvent, PumpSwapWithdrawEvent, }, - raydium_launchpad::{RaydiumLaunchpadPoolCreateEvent, RaydiumLaunchpadTradeEvent}, + bonk::{BonkPoolCreateEvent, BonkTradeEvent}, }, Protocol, UnifiedEvent, }, @@ -65,11 +65,11 @@ async fn test_grpc() -> Result<(), Box> { // 定义回调函数处理事件 let callback = |event: Box| { match_event!(event, { - RaydiumLaunchpadPoolCreateEvent => |e: RaydiumLaunchpadPoolCreateEvent| { - println!("RaydiumLaunchpadPoolCreateEvent: {:?}", e.base_mint_param.symbol); + BonkPoolCreateEvent => |e: BonkPoolCreateEvent| { + println!("BonkPoolCreateEvent: {:?}", e.base_mint_param.symbol); }, - RaydiumLaunchpadTradeEvent => |e: RaydiumLaunchpadTradeEvent| { - println!("RaydiumLaunchpadTradeEvent: {:?}", e); + BonkTradeEvent => |e: BonkTradeEvent| { + println!("BonkTradeEvent: {:?}", e); }, PumpFunTradeEvent => |e: PumpFunTradeEvent| { println!("PumpFunTradeEvent: {:?}", e); @@ -100,7 +100,7 @@ async fn test_grpc() -> Result<(), Box> { let protocols = vec![ Protocol::PumpFun, Protocol::PumpSwap, - Protocol::RaydiumLaunchpad, + Protocol::Bonk, ]; grpc.subscribe_events(protocols, None, None, None, callback) .await?; @@ -123,11 +123,11 @@ async fn test_shreds() -> Result<(), Box> { // 定义回调函数处理事件(与上面相同) let callback = |event: Box| { match_event!(event, { - RaydiumLaunchpadPoolCreateEvent => |e: RaydiumLaunchpadPoolCreateEvent| { - println!("RaydiumLaunchpadPoolCreateEvent: {:?}", e.base_mint_param.symbol); + BonkPoolCreateEvent => |e: BonkPoolCreateEvent| { + println!("BonkPoolCreateEvent: {:?}", e.base_mint_param.symbol); }, - RaydiumLaunchpadTradeEvent => |e: RaydiumLaunchpadTradeEvent| { - println!("RaydiumLaunchpadTradeEvent: {:?}", e); + BonkTradeEvent => |e: BonkTradeEvent| { + println!("BonkTradeEvent: {:?}", e); }, PumpFunTradeEvent => |e: PumpFunTradeEvent| { println!("PumpFunTradeEvent: {:?}", e); @@ -158,7 +158,7 @@ async fn test_shreds() -> Result<(), Box> { let protocols = vec![ Protocol::PumpFun, Protocol::PumpSwap, - Protocol::RaydiumLaunchpad, + Protocol::Bonk, ]; shred_stream .shredstream_subscribe(protocols, None, callback) @@ -376,19 +376,19 @@ async fn test_pumpswap() -> AnyResult<()> { } ``` -### 5. Raydium Launchpad 交易操作 +### 5. Bonk 交易操作 ```rust -use sol_trade_sdk::trading::core::params::RaydiumLaunchpadParams; +use sol_trade_sdk::trading::core::params::BonkParams; -async fn test_raydium_launchpad() -> Result<(), Box> { +async fn test_bonk() -> Result<(), Box> { // 基本参数设置 let amount = 100_000; // 0.0001 SOL let mint = Pubkey::from_str("xxxxxxx")?; let recent_blockhash = solana_trade_client.rpc.get_latest_blockhash().await?; - // Raydium Launchpad参数配置 - let raydium_launchpad_params = RaydiumLaunchpadParams { + // Bonk参数配置 + let bonk_params = BonkParams { virtual_base: None, virtual_quote: None, real_base_before: None, @@ -396,7 +396,7 @@ async fn test_raydium_launchpad() -> Result<(), Box> { auto_handle_wsol: true, }; - println!("Buying tokens from Raydium Launchpad..."); + println!("Buying tokens from letsbonk.fun..."); // 购买操作 let buy_params = BuyParams { @@ -410,7 +410,7 @@ async fn test_raydium_launchpad() -> Result<(), Box> { lookup_table_key: solana_trade_client.trade_config.clone().lookup_table_key, recent_blockhash, data_size_limit: 0, - protocol_params: Box::new(raydium_launchpad_params.clone()), + protocol_params: Box::new(bonk_params.clone()), }; let buy_with_tip_params = buy_params @@ -422,7 +422,7 @@ async fn test_raydium_launchpad() -> Result<(), Box> { .await?; // 卖出操作 - println!("Selling tokens from Raydium Launchpad..."); + println!("Selling tokens from letsbonk.fun..."); let sell_params = SellParams { rpc: Some(solana_trade_client.rpc.clone()), @@ -434,7 +434,7 @@ async fn test_raydium_launchpad() -> Result<(), Box> { priority_fee: solana_trade_client.trade_config.clone().priority_fee, lookup_table_key: solana_trade_client.trade_config.clone().lookup_table_key, recent_blockhash, - protocol_params: Box::new(raydium_launchpad_params.clone()), + protocol_params: Box::new(bonk_params.clone()), }; solana_trade_client @@ -475,7 +475,7 @@ let trade_config = TradeConfig { - **PumpFun**: 主要的 meme 币交易平台 - **PumpSwap**: PumpFun 的交换协议 -- **Raydium Launchpad**: Raydium 的代币发行平台(Bonk.fun) +- **Bonk**: 代币发行平台(letsbonk.fun) ## MEV 保护服务 @@ -491,7 +491,7 @@ let trade_config = TradeConfig { - **BuyParams**: 统一的购买参数结构 - **SellParams**: 统一的卖出参数结构 -- **协议特定参数**: 每个协议都有自己的参数结构(PumpFunParams、PumpSwapParams、RaydiumLaunchpadParams) +- **协议特定参数**: 每个协议都有自己的参数结构(PumpFunParams、PumpSwapParams、BonkParams) ### 事件解析系统 @@ -519,14 +519,14 @@ src/ │ ├── protocols/ # 协议特定解析器 │ │ ├── pumpfun/ # PumpFun事件解析 │ │ ├── pumpswap/ # PumpSwap事件解析 -│ │ └── raydium_launchpad/ # Raydium Launchpad事件解析 +│ │ └── bonk/ # Bonk事件解析 │ └── factory.rs # 解析器工厂 ├── grpc/ # gRPC客户端 ├── instruction/ # 指令构建 ├── protos/ # 协议缓冲区定义 ├── pumpfun/ # PumpFun交易功能 ├── pumpswap/ # PumpSwap交易功能 -├── raydium_launchpad/ # Raydium Launchpad交易功能 +├── bonk/ # Bonk交易功能 ├── swqos/ # MEV服务客户端 ├── trading/ # 统一交易引擎 │ ├── common/ # 通用交易工具 diff --git a/src/raydium_launchpad/buy.rs b/src/bonk/buy.rs similarity index 90% rename from src/raydium_launchpad/buy.rs rename to src/bonk/buy.rs index 4dd24fb..4a992f8 100755 --- a/src/raydium_launchpad/buy.rs +++ b/src/bonk/buy.rs @@ -4,7 +4,7 @@ use std::sync::Arc; use crate::swqos::SwqosClient; use crate::trading::{ - core::params::{PumpSwapParams, RaydiumLaunchpadParams}, + core::params::{PumpSwapParams, BonkParams}, factory::Protocol, BuyParams, TradeFactory, }; @@ -31,9 +31,9 @@ pub async fn buy( auto_handle_wsol: bool, ) -> Result<(), anyhow::Error> { // 创建执行器 - let executor = TradeFactory::create_executor(Protocol::RaydiumLaunchpad); + let executor = TradeFactory::create_executor(Protocol::Bonk); // 创建协议特定参数 - let protocol_params = Box::new(RaydiumLaunchpadParams { + let protocol_params = Box::new(BonkParams { auto_handle_wsol: auto_handle_wsol, virtual_base: Some(virtual_base), virtual_quote: Some(virtual_quote), @@ -77,9 +77,9 @@ pub async fn buy_with_tip( auto_handle_wsol: bool, ) -> Result<(), anyhow::Error> { // 创建执行器 - let executor = TradeFactory::create_executor(Protocol::RaydiumLaunchpad); + let executor = TradeFactory::create_executor(Protocol::Bonk); // 创建协议特定参数 - let protocol_params = Box::new(RaydiumLaunchpadParams { + let protocol_params = Box::new(BonkParams { auto_handle_wsol: auto_handle_wsol, virtual_base: Some(virtual_base), virtual_quote: Some(virtual_quote), diff --git a/src/raydium_launchpad/common.rs b/src/bonk/common.rs similarity index 89% rename from src/raydium_launchpad/common.rs rename to src/bonk/common.rs index 256dcd6..70203d8 100755 --- a/src/raydium_launchpad/common.rs +++ b/src/bonk/common.rs @@ -38,22 +38,22 @@ pub fn get_amount_out( pub fn get_pool_pda(base_mint: &Pubkey, quote_mint: &Pubkey) -> Option { let seeds: &[&[u8]; 3] = &[ - constants::raydium_launchpad::seeds::POOL_SEED, + constants::bonk::seeds::POOL_SEED, base_mint.as_ref(), quote_mint.as_ref(), ]; - let program_id: &Pubkey = &constants::raydium_launchpad::accounts::LAUNCHPAD_PROGRAM; + let program_id: &Pubkey = &constants::bonk::accounts::BONK; let pda: Option<(Pubkey, u8)> = Pubkey::try_find_program_address(seeds, program_id); pda.map(|pubkey| pubkey.0) } pub fn get_vault_pda(pool_state: &Pubkey, mint: &Pubkey) -> Option { let seeds: &[&[u8]; 3] = &[ - constants::raydium_launchpad::seeds::POOL_VAULT_SEED, + constants::bonk::seeds::POOL_VAULT_SEED, pool_state.as_ref(), mint.as_ref(), ]; - let program_id: &Pubkey = &constants::raydium_launchpad::accounts::LAUNCHPAD_PROGRAM; + let program_id: &Pubkey = &constants::bonk::accounts::BONK; let pda: Option<(Pubkey, u8)> = Pubkey::try_find_program_address(seeds, program_id); pda.map(|pubkey| pubkey.0) } diff --git a/src/raydium_launchpad/mod.rs b/src/bonk/mod.rs similarity index 100% rename from src/raydium_launchpad/mod.rs rename to src/bonk/mod.rs diff --git a/src/raydium_launchpad/pool.rs b/src/bonk/pool.rs similarity index 86% rename from src/raydium_launchpad/pool.rs rename to src/bonk/pool.rs index 2cefaa2..57ec80c 100755 --- a/src/raydium_launchpad/pool.rs +++ b/src/bonk/pool.rs @@ -1,4 +1,4 @@ -use crate::{common::SolanaRpcClient, constants::raydium_launchpad::accounts}; +use crate::{common::SolanaRpcClient, constants::bonk::accounts}; use anyhow::anyhow; use borsh::BorshDeserialize; use solana_sdk::pubkey::Pubkey; @@ -53,8 +53,8 @@ impl Pool { ) -> Result { let account = rpc.get_account(pool_address).await?; - if account.owner != accounts::LAUNCHPAD_PROGRAM { - return Err(anyhow!("Account is not owned by RaydiumLaunchpad program")); + if account.owner != accounts::BONK { + return Err(anyhow!("Account is not owned by Bonk program")); } Self::from_bytes(&account.data) diff --git a/src/raydium_launchpad/sell.rs b/src/bonk/sell.rs similarity index 94% rename from src/raydium_launchpad/sell.rs rename to src/bonk/sell.rs index 7c30d75..33f60ab 100755 --- a/src/raydium_launchpad/sell.rs +++ b/src/bonk/sell.rs @@ -7,7 +7,7 @@ use crate::common::{PriorityFee, SolanaRpcClient}; use crate::pumpswap::common::get_token_balance; use crate::swqos::SwqosClient; use crate::trading::{ - core::params::RaydiumLaunchpadParams, factory::Protocol, SellParams, TradeFactory, + core::params::BonkParams, factory::Protocol, SellParams, TradeFactory, }; // Sell tokens to a Pumpswap pool @@ -25,9 +25,9 @@ pub async fn sell( lookup_table_key: Option, recent_blockhash: Hash, ) -> Result<(), anyhow::Error> { - let executor = TradeFactory::create_executor(Protocol::RaydiumLaunchpad); + let executor = TradeFactory::create_executor(Protocol::Bonk); // 创建PumpFun协议参数 - let protocol_params = Box::new(RaydiumLaunchpadParams { + let protocol_params = Box::new(BonkParams { virtual_base: Some(virtual_base), virtual_quote: Some(virtual_quote), real_base_before: Some(real_base_before), @@ -137,9 +137,9 @@ pub async fn sell_with_tip( lookup_table_key: Option, recent_blockhash: Hash, ) -> Result<(), anyhow::Error> { - let executor = TradeFactory::create_executor(Protocol::RaydiumLaunchpad); + let executor = TradeFactory::create_executor(Protocol::Bonk); // 创建PumpFun协议参数 - let protocol_params = Box::new(RaydiumLaunchpadParams { + let protocol_params = Box::new(BonkParams { virtual_base: Some(virtual_base), virtual_quote: Some(virtual_quote), real_base_before: Some(real_base_before), diff --git a/src/constants/raydium_launchpad/mod.rs b/src/constants/bonk/mod.rs similarity index 95% rename from src/constants/raydium_launchpad/mod.rs rename to src/constants/bonk/mod.rs index b6877e7..18306a7 100755 --- a/src/constants/raydium_launchpad/mod.rs +++ b/src/constants/bonk/mod.rs @@ -26,7 +26,7 @@ pub mod accounts { pub const TOKEN_PROGRAM: Pubkey = pubkey!("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"); pub const EVENT_AUTHORITY: Pubkey = pubkey!("2DPAtwB8L12vrMRExbLuyGnC7n2J5LNoZQSejeQGpwkr"); pub const WSOL_TOKEN_ACCOUNT: Pubkey = pubkey!("So11111111111111111111111111111111111111112"); - pub const LAUNCHPAD_PROGRAM: Pubkey = pubkey!("LanMV9sAd7wArD4vJFi2qDdfnVhFxYSUg6eADduJ3uj"); + pub const BONK: Pubkey = pubkey!("LanMV9sAd7wArD4vJFi2qDdfnVhFxYSUg6eADduJ3uj"); pub const PLATFORM_FEE_RATE: u128 = 100; // 1% pub const PROTOCOL_FEE_RATE: u128 = 25; // 0.25% diff --git a/src/constants/mod.rs b/src/constants/mod.rs index 010dfe6..393375d 100755 --- a/src/constants/mod.rs +++ b/src/constants/mod.rs @@ -1,6 +1,6 @@ pub mod pumpfun; pub mod pumpswap; -pub mod raydium_launchpad; +pub mod bonk; pub mod swqos; pub mod trade_type { @@ -13,5 +13,5 @@ pub mod trade_type { pub mod trade_platform { pub const PUMPFUN: &'static str = "pumpfun"; pub const PUMPFUN_SWAP: &'static str = "pumpswap"; - pub const RAYDIUM_LAUNCHPAD: &'static str = "raydium_launchpad"; + pub const BONK: &'static str = "bonk"; } \ No newline at end of file diff --git a/src/event_parser/common/types.rs b/src/event_parser/common/types.rs index a4b3699..5a21d3e 100644 --- a/src/event_parser/common/types.rs +++ b/src/event_parser/common/types.rs @@ -11,8 +11,7 @@ pub enum ProtocolType { #[default] PumpSwap, PumpFun, - RaydiumLaunchpad, - Raydium, + Bonk, } /// 事件类型枚举 @@ -33,12 +32,12 @@ pub enum EventType { PumpFunBuy, PumpFunSell, - // RaydiumLaunchpad 事件 - RaydiumLaunchpadBuyExactIn, - RaydiumLaunchpadBuyExactOut, - RaydiumLaunchpadSellExactIn, - RaydiumLaunchpadSellExactOut, - RaydiumLaunchpadInitialize, + // Bonk 事件 + BonkBuyExactIn, + BonkBuyExactOut, + BonkSellExactIn, + BonkSellExactOut, + BonkInitialize, // 通用事件 Unknown, diff --git a/src/event_parser/core/traits.rs b/src/event_parser/core/traits.rs index a0aa541..cf9213b 100644 --- a/src/event_parser/core/traits.rs +++ b/src/event_parser/core/traits.rs @@ -10,7 +10,7 @@ use std::fmt::Debug; use crate::{ error, - event_parser::{common::{utils::*, EventMetadata, EventType, ProtocolType}, protocols::{pumpfun::{PumpFunCreateTokenEvent, PumpFunTradeEvent}, raydium_launchpad::{RaydiumLaunchpadPoolCreateEvent, RaydiumLaunchpadTradeEvent}}}, + event_parser::{common::{utils::*, EventMetadata, EventType, ProtocolType}, protocols::{pumpfun::{PumpFunCreateTokenEvent, PumpFunTradeEvent}, bonk::{BonkPoolCreateEvent, BonkTradeEvent}}}, }; /// 统一事件接口 - 所有协议的事件都需要实现此trait @@ -178,7 +178,7 @@ pub trait EventParser: Send + Sync { fn process_events(&self, mut events: Vec>, bot_wallet: Option) -> Vec> { let mut dev_address = None; - let mut raydium_dev_address = None; + let mut bonk_dev_address = None; for event in &mut events { if let Some(token_info) = event.as_any().downcast_ref::() { dev_address = Some(token_info.user); @@ -195,14 +195,14 @@ pub trait EventParser: Send + Sync { } if let Some(pool_info) = event .as_any() - .downcast_ref::() + .downcast_ref::() { - raydium_dev_address = Some(pool_info.creator); + bonk_dev_address = Some(pool_info.creator); } else if let Some(trade_info) = event .as_any_mut() - .downcast_mut::() + .downcast_mut::() { - if Some(trade_info.payer) == raydium_dev_address { + if Some(trade_info.payer) == bonk_dev_address { trade_info.is_dev_create_token_trade = true; } else if Some(trade_info.payer) == bot_wallet { trade_info.is_bot = true; diff --git a/src/event_parser/factory.rs b/src/event_parser/factory.rs index 795a799..26939a8 100644 --- a/src/event_parser/factory.rs +++ b/src/event_parser/factory.rs @@ -3,7 +3,7 @@ use solana_sdk::pubkey::Pubkey; use std::sync::Arc; use crate::event_parser::protocols::{ - pumpfun::parser::PUMPFUN_PROGRAM_ID, pumpswap::parser::PUMPSWAP_PROGRAM_ID, raydium_launchpad::parser::RAYDIUM_LAUNCHPAD_PROGRAM_ID, RaydiumLaunchpadEventParser, + pumpfun::parser::PUMPFUN_PROGRAM_ID, pumpswap::parser::PUMPSWAP_PROGRAM_ID, bonk::parser::BONK_PROGRAM_ID, BonkEventParser, }; use super::{ @@ -16,7 +16,7 @@ use super::{ pub enum Protocol { PumpSwap, PumpFun, - RaydiumLaunchpad, + Bonk, } impl Protocol { @@ -24,7 +24,7 @@ impl Protocol { match self { Protocol::PumpSwap => vec![PUMPSWAP_PROGRAM_ID], Protocol::PumpFun => vec![PUMPFUN_PROGRAM_ID], - Protocol::RaydiumLaunchpad => vec![RAYDIUM_LAUNCHPAD_PROGRAM_ID], + Protocol::Bonk => vec![BONK_PROGRAM_ID], } } } @@ -34,7 +34,7 @@ impl std::fmt::Display for Protocol { match self { Protocol::PumpSwap => write!(f, "PumpSwap"), Protocol::PumpFun => write!(f, "PumpFun"), - Protocol::RaydiumLaunchpad => write!(f, "RaydiumLaunchpad"), + Protocol::Bonk => write!(f, "Bonk"), } } } @@ -46,7 +46,7 @@ impl std::str::FromStr for Protocol { match s.to_lowercase().as_str() { "pumpswap" => Ok(Protocol::PumpSwap), "pumpfun" => Ok(Protocol::PumpFun), - "raydiumlaunchpad" => Ok(Protocol::RaydiumLaunchpad), + "bonk" => Ok(Protocol::Bonk), _ => Err(anyhow!("Unsupported protocol: {}", s)), } } @@ -61,7 +61,7 @@ impl EventParserFactory { match protocol { Protocol::PumpSwap => Arc::new(PumpSwapEventParser::new()), Protocol::PumpFun => Arc::new(PumpFunEventParser::new()), - Protocol::RaydiumLaunchpad => Arc::new(RaydiumLaunchpadEventParser::new()), + Protocol::Bonk => Arc::new(BonkEventParser::new()), } } diff --git a/src/event_parser/protocols/raydium_launchpad/events.rs b/src/event_parser/protocols/bonk/events.rs similarity index 93% rename from src/event_parser/protocols/raydium_launchpad/events.rs rename to src/event_parser/protocols/bonk/events.rs index ece3b04..2ee82ff 100644 --- a/src/event_parser/protocols/raydium_launchpad/events.rs +++ b/src/event_parser/protocols/bonk/events.rs @@ -1,4 +1,4 @@ -use crate::event_parser::protocols::raydium_launchpad::types::{ +use crate::event_parser::protocols::bonk::types::{ CurveParams, MintParams, PoolStatus, TradeDirection, VestingParams, }; use crate::event_parser::{common::EventMetadata, core::traits::UnifiedEvent}; @@ -9,7 +9,7 @@ use solana_sdk::pubkey::Pubkey; /// 买入事件 #[derive(Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize, BorshDeserialize)] -pub struct RaydiumLaunchpadTradeEvent { +pub struct BonkTradeEvent { #[borsh(skip)] pub metadata: EventMetadata, pub pool_state: Pubkey, @@ -55,7 +55,7 @@ pub struct RaydiumLaunchpadTradeEvent { // 使用宏生成UnifiedEvent实现,指定需要合并的字段 impl_unified_event!( - RaydiumLaunchpadTradeEvent, + BonkTradeEvent, pool_state, total_base_sell, virtual_base, @@ -75,7 +75,7 @@ impl_unified_event!( /// 创建池事件 #[derive(Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize, BorshDeserialize)] -pub struct RaydiumLaunchpadPoolCreateEvent { +pub struct BonkPoolCreateEvent { #[borsh(skip)] pub metadata: EventMetadata, pub pool_state: Pubkey, @@ -102,7 +102,7 @@ pub struct RaydiumLaunchpadPoolCreateEvent { // 使用宏生成UnifiedEvent实现,指定需要合并的字段 impl_unified_event!( - RaydiumLaunchpadPoolCreateEvent, + BonkPoolCreateEvent, pool_state, creator, config, diff --git a/src/event_parser/protocols/raydium_launchpad/mod.rs b/src/event_parser/protocols/bonk/mod.rs similarity index 65% rename from src/event_parser/protocols/raydium_launchpad/mod.rs rename to src/event_parser/protocols/bonk/mod.rs index 8c412a6..8c7a629 100644 --- a/src/event_parser/protocols/raydium_launchpad/mod.rs +++ b/src/event_parser/protocols/bonk/mod.rs @@ -3,5 +3,5 @@ pub mod parser; pub mod types; pub use events::*; -pub use parser::RaydiumLaunchpadEventParser; +pub use parser::BonkEventParser; pub use types::*; \ No newline at end of file diff --git a/src/event_parser/protocols/raydium_launchpad/parser.rs b/src/event_parser/protocols/bonk/parser.rs similarity index 91% rename from src/event_parser/protocols/raydium_launchpad/parser.rs rename to src/event_parser/protocols/bonk/parser.rs index 521c6ab..568d723 100644 --- a/src/event_parser/protocols/raydium_launchpad/parser.rs +++ b/src/event_parser/protocols/bonk/parser.rs @@ -4,65 +4,65 @@ use solana_transaction_status::UiCompiledInstruction; use crate::event_parser::{ common::{utils::*, EventMetadata, EventType, ProtocolType}, core::traits::{EventParser, GenericEventParseConfig, GenericEventParser, UnifiedEvent}, - protocols::raydium_launchpad::{ + protocols::bonk::{ discriminators, ConstantCurve, CurveParams, FixedCurve, LinearCurve, MintParams, - RaydiumLaunchpadPoolCreateEvent, RaydiumLaunchpadTradeEvent, TradeDirection, VestingParams, + BonkPoolCreateEvent, BonkTradeEvent, TradeDirection, VestingParams, }, }; -/// RaydiumLaunchpad程序ID -pub const RAYDIUM_LAUNCHPAD_PROGRAM_ID: Pubkey = +/// Bonk程序ID +pub const BONK_PROGRAM_ID: Pubkey = solana_sdk::pubkey!("LanMV9sAd7wArD4vJFi2qDdfnVhFxYSUg6eADduJ3uj"); -/// RaydiumLaunchpad事件解析器 -pub struct RaydiumLaunchpadEventParser { +/// Bonk事件解析器 +pub struct BonkEventParser { inner: GenericEventParser, } -impl RaydiumLaunchpadEventParser { +impl BonkEventParser { pub fn new() -> Self { // 配置所有事件类型 let configs = vec![ GenericEventParseConfig { inner_instruction_discriminator: discriminators::TRADE_EVENT, instruction_discriminator: discriminators::BUY_EXACT_IN, - event_type: EventType::RaydiumLaunchpadBuyExactIn, + event_type: EventType::BonkBuyExactIn, inner_instruction_parser: Self::parse_trade_inner_instruction, instruction_parser: Self::parse_buy_exact_in_instruction, }, GenericEventParseConfig { inner_instruction_discriminator: discriminators::TRADE_EVENT, instruction_discriminator: discriminators::BUY_EXACT_OUT, - event_type: EventType::RaydiumLaunchpadBuyExactOut, + event_type: EventType::BonkBuyExactOut, inner_instruction_parser: Self::parse_trade_inner_instruction, instruction_parser: Self::parse_buy_exact_out_instruction, }, GenericEventParseConfig { inner_instruction_discriminator: discriminators::TRADE_EVENT, instruction_discriminator: discriminators::SELL_EXACT_IN, - event_type: EventType::RaydiumLaunchpadSellExactIn, + event_type: EventType::BonkSellExactIn, inner_instruction_parser: Self::parse_trade_inner_instruction, instruction_parser: Self::parse_sell_exact_in_instruction, }, GenericEventParseConfig { inner_instruction_discriminator: discriminators::TRADE_EVENT, instruction_discriminator: discriminators::SELL_EXACT_OUT, - event_type: EventType::RaydiumLaunchpadSellExactOut, + event_type: EventType::BonkSellExactOut, inner_instruction_parser: Self::parse_trade_inner_instruction, instruction_parser: Self::parse_sell_exact_out_instruction, }, GenericEventParseConfig { inner_instruction_discriminator: discriminators::POOL_CREATE_EVENT, instruction_discriminator: discriminators::INITIALIZE, - event_type: EventType::RaydiumLaunchpadInitialize, + event_type: EventType::BonkInitialize, inner_instruction_parser: Self::parse_pool_create_inner_instruction, instruction_parser: Self::parse_initialize_instruction, }, ]; let inner = GenericEventParser::new( - RAYDIUM_LAUNCHPAD_PROGRAM_ID, - ProtocolType::RaydiumLaunchpad, + BONK_PROGRAM_ID, + ProtocolType::Bonk, configs, ); @@ -74,10 +74,10 @@ impl RaydiumLaunchpadEventParser { data: &[u8], metadata: EventMetadata, ) -> Option> { - if let Ok(event) = borsh::from_slice::(data) { + if let Ok(event) = borsh::from_slice::(data) { let mut metadata = metadata; metadata.set_id(format!("{}", metadata.signature,)); - Some(Box::new(RaydiumLaunchpadPoolCreateEvent { + Some(Box::new(BonkPoolCreateEvent { metadata: metadata, ..event })) @@ -91,14 +91,14 @@ impl RaydiumLaunchpadEventParser { data: &[u8], metadata: EventMetadata, ) -> Option> { - if let Ok(event) = borsh::from_slice::(data) { + if let Ok(event) = borsh::from_slice::(data) { let mut metadata = metadata; metadata.set_id(format!( "{}-{}", metadata.signature, event.pool_state.to_string() )); - Some(Box::new(RaydiumLaunchpadTradeEvent { + Some(Box::new(BonkTradeEvent { metadata: metadata, ..event })) @@ -124,7 +124,7 @@ impl RaydiumLaunchpadEventParser { let mut metadata = metadata; metadata.set_id(format!("{}-{}", metadata.signature, accounts[4])); - Some(Box::new(RaydiumLaunchpadTradeEvent { + Some(Box::new(BonkTradeEvent { metadata, amount_in, minimum_amount_out, @@ -158,7 +158,7 @@ impl RaydiumLaunchpadEventParser { let mut metadata = metadata; metadata.set_id(format!("{}-{}", metadata.signature, accounts[4])); - Some(Box::new(RaydiumLaunchpadTradeEvent { + Some(Box::new(BonkTradeEvent { metadata, amount_out, maximum_amount_in, @@ -192,7 +192,7 @@ impl RaydiumLaunchpadEventParser { let mut metadata = metadata; metadata.set_id(format!("{}-{}", metadata.signature, accounts[4])); - Some(Box::new(RaydiumLaunchpadTradeEvent { + Some(Box::new(BonkTradeEvent { metadata, amount_in, minimum_amount_out, @@ -226,7 +226,7 @@ impl RaydiumLaunchpadEventParser { let mut metadata = metadata; metadata.set_id(format!("{}-{}", metadata.signature, accounts[4])); - Some(Box::new(RaydiumLaunchpadTradeEvent { + Some(Box::new(BonkTradeEvent { metadata, amount_out, maximum_amount_in, @@ -262,7 +262,7 @@ impl RaydiumLaunchpadEventParser { let mut metadata = metadata; metadata.set_id(format!("{}", metadata.signature)); - Some(Box::new(RaydiumLaunchpadPoolCreateEvent { + Some(Box::new(BonkPoolCreateEvent { metadata, payer: accounts[0], creator: accounts[1], @@ -404,7 +404,7 @@ impl RaydiumLaunchpadEventParser { } #[async_trait::async_trait] -impl EventParser for RaydiumLaunchpadEventParser { +impl EventParser for BonkEventParser { fn parse_events_from_inner_instruction( &self, inner_instruction: &UiCompiledInstruction, diff --git a/src/event_parser/protocols/raydium_launchpad/types.rs b/src/event_parser/protocols/bonk/types.rs similarity index 100% rename from src/event_parser/protocols/raydium_launchpad/types.rs rename to src/event_parser/protocols/bonk/types.rs diff --git a/src/event_parser/protocols/mod.rs b/src/event_parser/protocols/mod.rs index d3e5fae..dfe995e 100644 --- a/src/event_parser/protocols/mod.rs +++ b/src/event_parser/protocols/mod.rs @@ -1,7 +1,7 @@ pub mod pumpfun; pub mod pumpswap; -pub mod raydium_launchpad; +pub mod bonk; pub use pumpfun::PumpFunEventParser; pub use pumpswap::PumpSwapEventParser; -pub use raydium_launchpad::RaydiumLaunchpadEventParser; \ No newline at end of file +pub use bonk::BonkEventParser; \ No newline at end of file diff --git a/src/grpc/shred_stream.rs b/src/grpc/shred_stream.rs index 69e3321..27b1f8d 100755 --- a/src/grpc/shred_stream.rs +++ b/src/grpc/shred_stream.rs @@ -9,8 +9,8 @@ use solana_sdk::transaction::VersionedTransaction; use crate::common::AnyResult; use crate::event_parser::protocols::pumpfun::{PumpFunCreateTokenEvent, PumpFunTradeEvent}; -use crate::event_parser::protocols::raydium_launchpad::{ - RaydiumLaunchpadPoolCreateEvent, RaydiumLaunchpadTradeEvent, +use crate::event_parser::protocols::bonk::{ + BonkPoolCreateEvent, BonkTradeEvent, }; use crate::event_parser::{EventParserFactory, Protocol, UnifiedEvent}; diff --git a/src/grpc/yellow_stone.rs b/src/grpc/yellow_stone.rs index a642f88..0079578 100755 --- a/src/grpc/yellow_stone.rs +++ b/src/grpc/yellow_stone.rs @@ -22,8 +22,8 @@ use yellowstone_grpc_proto::geyser::{ use crate::common::AnyResult; use crate::constants::pumpfun::trade; use crate::event_parser::protocols::pumpfun::{PumpFunCreateTokenEvent, PumpFunTradeEvent}; -use crate::event_parser::protocols::raydium_launchpad::{ - RaydiumLaunchpadPoolCreateEvent, RaydiumLaunchpadTradeEvent, +use crate::event_parser::protocols::bonk::{ + BonkPoolCreateEvent, BonkTradeEvent, }; use crate::event_parser::{EventParserFactory, Protocol, UnifiedEvent}; diff --git a/src/lib.rs b/src/lib.rs index 6a41dc9..4f6fea2 100755 --- a/src/lib.rs +++ b/src/lib.rs @@ -8,7 +8,7 @@ pub mod instruction; pub mod protos; pub mod pumpfun; pub mod pumpswap; -pub mod raydium_launchpad; +pub mod bonk; pub mod swqos; pub mod trading; @@ -26,7 +26,7 @@ use swqos::SwqosClient; use common::{PriorityFee, SolanaRpcClient, TradeConfig}; use accounts::BondingCurveAccount; -use constants::trade_platform::{PUMPFUN, PUMPFUN_SWAP, RAYDIUM_LAUNCHPAD}; +use constants::trade_platform::{PUMPFUN, PUMPFUN_SWAP, BONK}; use constants::trade_type::{COPY_BUY, SNIPER_BUY}; use crate::event_parser::protocols::pumpfun::PumpFunTradeEvent; @@ -34,7 +34,7 @@ use crate::swqos::SwqosConfig; use crate::trading::core::params::PumpFunParams; use crate::trading::core::params::PumpFunSellParams; use crate::trading::core::params::PumpSwapParams; -use crate::trading::core::params::RaydiumLaunchpadParams; +use crate::trading::core::params::BonkParams; use crate::trading::BuyWithTipParams; use crate::trading::SellParams; use crate::trading::SellWithTipParams; @@ -181,9 +181,9 @@ impl SolanaTrade { } else if let Some(protocol_params) = buy_params .protocol_params .as_any() - .downcast_ref::() + .downcast_ref::() { - raydium_launchpad::buy::buy( + bonk::buy::buy( self.rpc.clone(), self.payer.clone(), mint, @@ -270,9 +270,9 @@ impl SolanaTrade { } else if let Some(protocol_params) = buy_params .protocol_params .as_any() - .downcast_ref::() + .downcast_ref::() { - raydium_launchpad::buy::buy( + bonk::buy::buy( self.rpc.clone(), self.payer.clone(), mint, @@ -345,9 +345,9 @@ impl SolanaTrade { } else if let Some(protocol_params) = sell_params .protocol_params .as_any() - .downcast_ref::() + .downcast_ref::() { - raydium_launchpad::sell::sell_by_percent( + bonk::sell::sell_by_percent( self.rpc.clone(), self.payer.clone(), mint.clone(), @@ -417,9 +417,9 @@ impl SolanaTrade { } else if let Some(protocol_params) = sell_params .protocol_params .as_any() - .downcast_ref::() + .downcast_ref::() { - raydium_launchpad::sell::sell_by_amount( + bonk::sell::sell_by_amount( self.rpc.clone(), self.payer.clone(), mint.clone(), @@ -492,9 +492,9 @@ impl SolanaTrade { } else if let Some(protocol_params) = sell_params .protocol_params .as_any() - .downcast_ref::() + .downcast_ref::() { - raydium_launchpad::sell::sell_by_percent_with_tip( + bonk::sell::sell_by_percent_with_tip( self.rpc.clone(), self.swqos_clients.clone(), self.payer.clone(), @@ -566,9 +566,9 @@ impl SolanaTrade { } else if let Some(protocol_params) = sell_params .protocol_params .as_any() - .downcast_ref::() + .downcast_ref::() { - raydium_launchpad::sell::sell_by_amount_with_tip( + bonk::sell::sell_by_amount_with_tip( self.rpc.clone(), self.swqos_clients.clone(), self.payer.clone(), diff --git a/src/main.rs b/src/main.rs index 642a161..c46e9f3 100755 --- a/src/main.rs +++ b/src/main.rs @@ -11,7 +11,7 @@ use sol_trade_sdk::{ PumpSwapBuyEvent, PumpSwapCreatePoolEvent, PumpSwapDepositEvent, PumpSwapSellEvent, PumpSwapWithdrawEvent, }, - raydium_launchpad::{RaydiumLaunchpadPoolCreateEvent, RaydiumLaunchpadTradeEvent}, + bonk::{BonkPoolCreateEvent, BonkTradeEvent}, }, Protocol, UnifiedEvent, }, @@ -20,7 +20,7 @@ use sol_trade_sdk::{ pumpfun::common::get_bonding_curve_account_v2, swqos::{SwqosConfig, SwqosRegion}, trading::{ - core::params::{PumpFunParams, PumpFunSellParams, PumpSwapParams, RaydiumLaunchpadParams}, + core::params::{PumpFunParams, PumpFunSellParams, PumpSwapParams, BonkParams}, BuyParams, SellParams, }, SolanaTrade, @@ -32,7 +32,7 @@ use solana_sdk::{commitment_config::CommitmentConfig, pubkey::Pubkey, signature: async fn main() -> Result<(), Box> { test_pumpfun().await?; // test_pumpswap().await?; - // test_raydium_launchpad().await?; + // test_bonk().await?; // test_grpc().await?; // test_shreds().await?; Ok(()) @@ -208,7 +208,7 @@ async fn test_pumpswap() -> AnyResult<()> { Ok(()) } -async fn test_raydium_launchpad() -> Result<(), Box> { +async fn test_bonk() -> Result<(), Box> { // 创建一个随机账户作为交易者 let payer = Keypair::new(); let rpc_url = "https://mainnet.helius-rpc.com/?api-key=xxxxxx".to_string(); @@ -232,14 +232,14 @@ async fn test_raydium_launchpad() -> Result<(), Box> { let amount = 100_000; // 0.0001 SOL let recent_blockhash = solana_trade_client.rpc.get_latest_blockhash().await?; let mint = Pubkey::from_str("xxxxxxx")?; - let raydium_launchpad_params = RaydiumLaunchpadParams { + let bonk_params = BonkParams { virtual_base: None, virtual_quote: None, real_base_before: None, real_quote_before: None, auto_handle_wsol: true, }; - println!("Buying tokens from Raydium Launchpad..."); + println!("Buying tokens from letsbonk.fun..."); // buy let buy_params = BuyParams { rpc: Some(solana_trade_client.rpc.clone()), @@ -252,7 +252,7 @@ async fn test_raydium_launchpad() -> Result<(), Box> { lookup_table_key: solana_trade_client.trade_config.clone().lookup_table_key, recent_blockhash, data_size_limit: 0, - protocol_params: Box::new(raydium_launchpad_params.clone()), + protocol_params: Box::new(bonk_params.clone()), }; let buy_with_tip_params = buy_params .clone() @@ -261,7 +261,7 @@ async fn test_raydium_launchpad() -> Result<(), Box> { .buy_use_buy_params(buy_with_tip_params, None) .await?; // sell - println!("Selling tokens from Raydium Launchpad..."); + println!("Selling tokens from letsbonk.fun..."); let sell_params = SellParams { rpc: Some(solana_trade_client.rpc.clone()), payer: solana_trade_client.payer.clone(), @@ -272,7 +272,7 @@ async fn test_raydium_launchpad() -> Result<(), Box> { priority_fee: solana_trade_client.trade_config.clone().priority_fee, lookup_table_key: solana_trade_client.trade_config.clone().lookup_table_key, recent_blockhash, - protocol_params: Box::new(raydium_launchpad_params.clone()), + protocol_params: Box::new(bonk_params.clone()), }; solana_trade_client .sell_by_amount_use_sell_params(sell_params) @@ -292,11 +292,11 @@ async fn test_grpc() -> Result<(), Box> { // 定义回调函数处理 PumpSwap 事件 let callback = |event: Box| { match_event!(event, { - RaydiumLaunchpadPoolCreateEvent => |e: RaydiumLaunchpadPoolCreateEvent| { - println!("RaydiumLaunchpadPoolCreateEvent: {:?}", e.base_mint_param.symbol); + BonkPoolCreateEvent => |e: BonkPoolCreateEvent| { + println!("BonkPoolCreateEvent: {:?}", e.base_mint_param.symbol); }, - RaydiumLaunchpadTradeEvent => |e: RaydiumLaunchpadTradeEvent| { - println!("RaydiumLaunchpadTradeEvent: {:?}", e); + BonkTradeEvent => |e: BonkTradeEvent| { + println!("BonkTradeEvent: {:?}", e); }, PumpFunTradeEvent => |e: PumpFunTradeEvent| { println!("PumpFunTradeEvent: {:?}", e); @@ -327,7 +327,7 @@ async fn test_grpc() -> Result<(), Box> { let protocols = vec![ Protocol::PumpFun, Protocol::PumpSwap, - Protocol::RaydiumLaunchpad, + Protocol::Bonk, ]; grpc.subscribe_events(protocols, None, None, None, callback) .await?; @@ -344,11 +344,11 @@ async fn test_shreds() -> Result<(), Box> { // 定义回调函数处理 PumpSwap 事件 let callback = |event: Box| { match_event!(event, { - RaydiumLaunchpadPoolCreateEvent => |e: RaydiumLaunchpadPoolCreateEvent| { - println!("RaydiumLaunchpadPoolCreateEvent: {:?}", e.base_mint_param.symbol); + BonkPoolCreateEvent => |e: BonkPoolCreateEvent| { + println!("BonkPoolCreateEvent: {:?}", e.base_mint_param.symbol); }, - RaydiumLaunchpadTradeEvent => |e: RaydiumLaunchpadTradeEvent| { - println!("RaydiumLaunchpadTradeEvent: {:?}", e); + BonkTradeEvent => |e: BonkTradeEvent| { + println!("BonkTradeEvent: {:?}", e); }, PumpFunTradeEvent => |e: PumpFunTradeEvent| { println!("PumpFunTradeEvent: {:?}", e); @@ -379,7 +379,7 @@ async fn test_shreds() -> Result<(), Box> { let protocols = vec![ Protocol::PumpFun, Protocol::PumpSwap, - Protocol::RaydiumLaunchpad, + Protocol::Bonk, ]; shred_stream .shredstream_subscribe(protocols, None, callback) diff --git a/src/trading/core/params.rs b/src/trading/core/params.rs index 35c0c75..201d312 100755 --- a/src/trading/core/params.rs +++ b/src/trading/core/params.rs @@ -122,9 +122,9 @@ impl ProtocolParams for PumpSwapParams { } } -/// RaydiumLaunchpad协议特定参数 +/// Bonk协议特定参数 #[derive(Clone)] -pub struct RaydiumLaunchpadParams { +pub struct BonkParams { pub virtual_base: Option, pub virtual_quote: Option, pub real_base_before: Option, @@ -132,7 +132,7 @@ pub struct RaydiumLaunchpadParams { pub auto_handle_wsol: bool, } -impl ProtocolParams for RaydiumLaunchpadParams { +impl ProtocolParams for BonkParams { fn as_any(&self) -> &dyn std::any::Any { self } diff --git a/src/trading/factory.rs b/src/trading/factory.rs index ec799be..ff0393d 100755 --- a/src/trading/factory.rs +++ b/src/trading/factory.rs @@ -1,7 +1,7 @@ use anyhow::{anyhow, Result}; use std::sync::Arc; -use crate::trading::protocols::raydium_launchpad::RaydiumLaunchpadInstructionBuilder; +use crate::trading::protocols::bonk::BonkInstructionBuilder; use super::{ core::{executor::GenericTradeExecutor, traits::TradeExecutor}, @@ -13,7 +13,7 @@ use super::{ pub enum Protocol { PumpFun, PumpSwap, - RaydiumLaunchpad, + Bonk, } impl std::fmt::Display for Protocol { @@ -21,7 +21,7 @@ impl std::fmt::Display for Protocol { match self { Protocol::PumpFun => write!(f, "PumpFun"), Protocol::PumpSwap => write!(f, "PumpSwap"), - Protocol::RaydiumLaunchpad => write!(f, "RaydiumLaunchpad"), + Protocol::Bonk => write!(f, "Bonk"), } } } @@ -33,7 +33,7 @@ impl std::str::FromStr for Protocol { match s.to_lowercase().as_str() { "pumpfun" => Ok(Protocol::PumpFun), "pumpswap" => Ok(Protocol::PumpSwap), - "raydiumlaunchpad" => Ok(Protocol::RaydiumLaunchpad), + "bonk" => Ok(Protocol::Bonk), _ => Err(anyhow!("Unsupported protocol: {}", s)), } } @@ -54,11 +54,11 @@ impl TradeFactory { let instruction_builder = Arc::new(PumpSwapInstructionBuilder); Arc::new(GenericTradeExecutor::new(instruction_builder, "PumpSwap")) } - Protocol::RaydiumLaunchpad => { - let instruction_builder = Arc::new(RaydiumLaunchpadInstructionBuilder); + Protocol::Bonk => { + let instruction_builder = Arc::new(BonkInstructionBuilder); Arc::new(GenericTradeExecutor::new( instruction_builder, - "RaydiumLaunchpad", + "Bonk", )) } } @@ -69,7 +69,7 @@ impl TradeFactory { vec![ Protocol::PumpFun, Protocol::PumpSwap, - Protocol::RaydiumLaunchpad, + Protocol::Bonk, ] } diff --git a/src/trading/protocols/raydium_launchpad.rs b/src/trading/protocols/bonk.rs similarity index 94% rename from src/trading/protocols/raydium_launchpad.rs rename to src/trading/protocols/bonk.rs index e84f632..5a9ec04 100755 --- a/src/trading/protocols/raydium_launchpad.rs +++ b/src/trading/protocols/bonk.rs @@ -3,24 +3,24 @@ use solana_sdk::{instruction::Instruction, pubkey::Pubkey, signer::Signer}; use spl_associated_token_account::instruction::create_associated_token_account_idempotent; use crate::{ - constants::raydium_launchpad::{ + constants::bonk::{ accounts, trade::DEFAULT_SLIPPAGE, BUY_EXECT_IN_DISCRIMINATOR, SELL_EXECT_IN_DISCRIMINATOR, }, - raydium_launchpad::{ + bonk::{ common::{get_amount_out, get_pool_pda, get_token_balance, get_vault_pda}, pool::Pool, }, trading::core::{ - params::{BuyParams, RaydiumLaunchpadParams, SellParams}, + params::{BuyParams, BonkParams, SellParams}, traits::InstructionBuilder, }, }; -/// RaydiumLaunchpad协议的指令构建器 -pub struct RaydiumLaunchpadInstructionBuilder; +/// Bonk协议的指令构建器 +pub struct BonkInstructionBuilder; #[async_trait::async_trait] -impl InstructionBuilder for RaydiumLaunchpadInstructionBuilder { +impl InstructionBuilder for BonkInstructionBuilder { async fn build_buy_instructions(&self, params: &BuyParams) -> Result> { if params.amount_sol == 0 { return Err(anyhow!("Amount cannot be zero")); @@ -33,7 +33,7 @@ impl InstructionBuilder for RaydiumLaunchpadInstructionBuilder { } } -impl RaydiumLaunchpadInstructionBuilder { +impl BonkInstructionBuilder { /// 使用提供的账户信息构建买入指令 async fn build_buy_instructions_with_accounts( &self, @@ -42,8 +42,8 @@ impl RaydiumLaunchpadInstructionBuilder { let protocol_params = params .protocol_params .as_any() - .downcast_ref::() - .ok_or_else(|| anyhow!("Invalid protocol params for RaydiumLaunchpad"))?; + .downcast_ref::() + .ok_or_else(|| anyhow!("Invalid protocol params for Bonk"))?; let pool_state = get_pool_pda(¶ms.mint, &accounts::WSOL_TOKEN_ACCOUNT).unwrap(); @@ -149,7 +149,7 @@ impl RaydiumLaunchpadInstructionBuilder { solana_sdk::instruction::AccountMeta::new_readonly(accounts::TOKEN_PROGRAM, false), // Base Token Program (readonly) solana_sdk::instruction::AccountMeta::new_readonly(accounts::TOKEN_PROGRAM, false), // Quote Token Program (readonly) solana_sdk::instruction::AccountMeta::new_readonly(accounts::EVENT_AUTHORITY, false), // Event Authority (readonly) - solana_sdk::instruction::AccountMeta::new_readonly(accounts::LAUNCHPAD_PROGRAM, false), // Program (readonly) + solana_sdk::instruction::AccountMeta::new_readonly(accounts::BONK, false), // Program (readonly) ]; // 创建指令数据 let mut data = vec![]; @@ -159,7 +159,7 @@ impl RaydiumLaunchpadInstructionBuilder { data.extend_from_slice(&share_fee_rate.to_le_bytes()); instructions.push(Instruction { - program_id: accounts::LAUNCHPAD_PROGRAM, + program_id: accounts::BONK, accounts, data, }); @@ -263,7 +263,7 @@ impl RaydiumLaunchpadInstructionBuilder { solana_sdk::instruction::AccountMeta::new_readonly(accounts::TOKEN_PROGRAM, false), // Base Token Program (readonly) solana_sdk::instruction::AccountMeta::new_readonly(accounts::TOKEN_PROGRAM, false), // Quote Token Program (readonly) solana_sdk::instruction::AccountMeta::new_readonly(accounts::EVENT_AUTHORITY, false), // Event Authority (readonly) - solana_sdk::instruction::AccountMeta::new_readonly(accounts::LAUNCHPAD_PROGRAM, false), // Program (readonly) + solana_sdk::instruction::AccountMeta::new_readonly(accounts::BONK, false), // Program (readonly) ]; // 创建指令数据 @@ -274,7 +274,7 @@ impl RaydiumLaunchpadInstructionBuilder { data.extend_from_slice(&share_fee_rate.to_le_bytes()); instructions.push(Instruction { - program_id: accounts::LAUNCHPAD_PROGRAM, + program_id: accounts::BONK, accounts, data, }); diff --git a/src/trading/protocols/mod.rs b/src/trading/protocols/mod.rs index c3194f2..48cf9ee 100755 --- a/src/trading/protocols/mod.rs +++ b/src/trading/protocols/mod.rs @@ -1,3 +1,3 @@ pub mod pumpfun; pub mod pumpswap; -pub mod raydium_launchpad; \ No newline at end of file +pub mod bonk; \ No newline at end of file