refactor: remove solana-streamer-sdk dependency and migrate type definitions locally

This refactoring migrates protocol-related type definitions from solana-streamer-sdk to local modules:

- Add local type files: bonk_types.rs, pumpswap_types.rs, raydium_amm_v4_types.rs, raydium_cpmm_types.rs
- Add BorshDeserialize support for all types
- Refactor BondingCurveAccount to support Borsh deserialization
- Update import paths across all protocol utility modules (bonk, pumpfun, pumpswap, raydium)
- Refactor trade parameter construction methods from event objects to individual parameters for better flexibility
- Fix nonce_cache import path to use local SolanaRpcClient
This commit is contained in:
ysq
2025-10-03 17:02:37 +08:00
parent a7f673b43d
commit 30a7d570fa
27 changed files with 601 additions and 262 deletions
+12 -1
View File
@@ -149,7 +149,18 @@ async fn pumpfun_copy_trade_with_grpc(trade_info: PumpFunTradeEvent) -> AnyResul
input_token_amount: buy_sol_amount,
slippage_basis_points: slippage_basis_points,
recent_blockhash: Some(recent_blockhash),
extension_params: Box::new(PumpFunParams::from_trade(&trade_info, None)),
extension_params: Box::new(PumpFunParams::from_trade(
trade_info.bonding_curve,
trade_info.associated_bonding_curve,
trade_info.mint,
trade_info.creator,
trade_info.creator_vault,
trade_info.virtual_sol_reserves,
trade_info.virtual_sol_reserves,
trade_info.real_token_reserves,
trade_info.real_sol_reserves,
None,
)),
lookup_table_key: Some(lookup_table_key), // you still need to update the AddressLookupTableCache
wait_transaction_confirmed: true,
create_input_token_ata: false,
+28 -2
View File
@@ -142,7 +142,20 @@ async fn bonk_copy_trade_with_grpc(trade_info: BonkTradeEvent) -> AnyResult<()>
input_token_amount: buy_sol_amount,
slippage_basis_points: slippage_basis_points,
recent_blockhash: Some(recent_blockhash),
extension_params: Box::new(BonkParams::from_trade(trade_info.clone())),
extension_params: Box::new(BonkParams::from_trade(
trade_info.virtual_base,
trade_info.virtual_quote,
trade_info.real_base_after,
trade_info.real_quote_after,
trade_info.pool_state,
trade_info.base_vault,
trade_info.quote_vault,
trade_info.base_token_program,
trade_info.platform_config,
trade_info.platform_associated_account,
trade_info.creator_associated_account,
trade_info.global_config,
)),
lookup_table_key: None,
wait_transaction_confirmed: true,
create_input_token_ata: true,
@@ -171,7 +184,20 @@ async fn bonk_copy_trade_with_grpc(trade_info: BonkTradeEvent) -> AnyResult<()>
input_token_amount: amount_token,
slippage_basis_points: slippage_basis_points,
recent_blockhash: Some(recent_blockhash),
extension_params: Box::new(BonkParams::from_trade(trade_info.clone())),
extension_params: Box::new(BonkParams::from_trade(
trade_info.virtual_base,
trade_info.virtual_quote,
trade_info.real_base_after,
trade_info.real_quote_after,
trade_info.pool_state,
trade_info.base_vault,
trade_info.quote_vault,
trade_info.base_token_program,
trade_info.platform_config,
trade_info.platform_associated_account,
trade_info.creator_associated_account,
trade_info.global_config,
)),
lookup_table_key: None,
wait_transaction_confirmed: true,
open_seed_optimize: false,
+18 -6
View File
@@ -1,10 +1,5 @@
use sol_trade_sdk::common::spl_associated_token_account::get_associated_token_address;
use sol_trade_sdk::common::TradeConfig;
use solana_streamer_sdk::streaming::event_parser::common::filter::EventTypeFilter;
use solana_streamer_sdk::streaming::event_parser::common::EventType;
use solana_streamer_sdk::streaming::event_parser::protocols::bonk::BonkTradeEvent;
use solana_streamer_sdk::streaming::event_parser::{Protocol, UnifiedEvent};
use solana_streamer_sdk::{match_event, streaming::ShredStreamGrpc};
use sol_trade_sdk::{
common::AnyResult,
swqos::SwqosConfig,
@@ -14,6 +9,11 @@ use sol_trade_sdk::{
use solana_commitment_config::CommitmentConfig;
use solana_sdk::signature::Keypair;
use solana_sdk::signer::Signer;
use solana_streamer_sdk::streaming::event_parser::common::filter::EventTypeFilter;
use solana_streamer_sdk::streaming::event_parser::common::EventType;
use solana_streamer_sdk::streaming::event_parser::protocols::bonk::BonkTradeEvent;
use solana_streamer_sdk::streaming::event_parser::{Protocol, UnifiedEvent};
use solana_streamer_sdk::{match_event, streaming::ShredStreamGrpc};
use std::sync::{
atomic::{AtomicBool, Ordering},
Arc,
@@ -113,7 +113,19 @@ async fn bonk_sniper_trade_with_shreds(trade_info: BonkTradeEvent) -> AnyResult<
input_token_amount: buy_sol_amount,
slippage_basis_points: slippage_basis_points,
recent_blockhash: Some(recent_blockhash),
extension_params: Box::new(BonkParams::from_dev_trade(trade_info.clone())),
extension_params: Box::new(BonkParams::from_dev_trade(
trade_info.exact_in,
trade_info.amount_in,
trade_info.amount_out,
trade_info.pool_state,
trade_info.base_vault,
trade_info.quote_vault,
trade_info.base_token_program,
trade_info.platform_config,
trade_info.platform_associated_account,
trade_info.creator_associated_account,
trade_info.global_config,
)),
lookup_table_key: None,
wait_transaction_confirmed: true,
create_input_token_ata: true,
+12 -1
View File
@@ -136,7 +136,18 @@ async fn pumpfun_copy_trade_with_grpc(trade_info: PumpFunTradeEvent) -> AnyResul
input_token_amount: buy_sol_amount,
slippage_basis_points: slippage_basis_points,
recent_blockhash: Some(recent_blockhash),
extension_params: Box::new(PumpFunParams::from_trade(&trade_info, None)),
extension_params: Box::new(PumpFunParams::from_trade(
trade_info.bonding_curve,
trade_info.associated_bonding_curve,
trade_info.mint,
trade_info.creator,
trade_info.creator_vault,
trade_info.virtual_token_reserves,
trade_info.virtual_sol_reserves,
trade_info.real_token_reserves,
trade_info.real_sol_reserves,
None,
)),
lookup_table_key: None,
wait_transaction_confirmed: true,
create_input_token_ata: false,
+24 -2
View File
@@ -132,7 +132,18 @@ async fn pumpfun_copy_trade_with_grpc(trade_info: PumpFunTradeEvent) -> AnyResul
input_token_amount: buy_sol_amount,
slippage_basis_points: slippage_basis_points,
recent_blockhash: Some(recent_blockhash),
extension_params: Box::new(PumpFunParams::from_trade(&trade_info, None)),
extension_params: Box::new(PumpFunParams::from_trade(
trade_info.bonding_curve,
trade_info.associated_bonding_curve,
trade_info.mint,
trade_info.creator,
trade_info.creator_vault,
trade_info.virtual_token_reserves,
trade_info.virtual_sol_reserves,
trade_info.real_token_reserves,
trade_info.real_sol_reserves,
None,
)),
lookup_table_key: None,
wait_transaction_confirmed: true,
create_input_token_ata: false,
@@ -162,7 +173,18 @@ async fn pumpfun_copy_trade_with_grpc(trade_info: PumpFunTradeEvent) -> AnyResul
slippage_basis_points: slippage_basis_points,
recent_blockhash: Some(recent_blockhash),
with_tip: false,
extension_params: Box::new(PumpFunParams::from_trade(&trade_info, Some(true))),
extension_params: Box::new(PumpFunParams::from_trade(
trade_info.bonding_curve,
trade_info.associated_bonding_curve,
trade_info.mint,
trade_info.creator,
trade_info.creator_vault,
trade_info.virtual_token_reserves,
trade_info.virtual_sol_reserves,
trade_info.real_token_reserves,
trade_info.real_sol_reserves,
Some(true),
)),
lookup_table_key: None,
wait_transaction_confirmed: true,
create_output_token_ata: false,
+10 -1
View File
@@ -100,7 +100,16 @@ async fn pumpfun_sniper_trade_with_shreds(trade_info: PumpFunTradeEvent) -> AnyR
input_token_amount: buy_sol_amount,
slippage_basis_points: slippage_basis_points,
recent_blockhash: Some(recent_blockhash),
extension_params: Box::new(PumpFunParams::from_dev_trade(&trade_info, None)),
extension_params: Box::new(PumpFunParams::from_dev_trade(
trade_info.mint,
trade_info.token_amount,
trade_info.max_sol_cost,
trade_info.creator,
trade_info.bonding_curve,
trade_info.associated_bonding_curve,
trade_info.creator_vault,
None,
)),
lookup_table_key: None,
wait_transaction_confirmed: true,
create_input_token_ata: true,
+26 -2
View File
@@ -131,7 +131,19 @@ async fn create_solana_trade_client() -> AnyResult<SolanaTrade> {
}
async fn pumpswap_trade_with_grpc_buy_event(trade_info: PumpSwapBuyEvent) -> AnyResult<()> {
let params = PumpSwapParams::from_buy_trade(&trade_info);
let params = PumpSwapParams::new(
trade_info.pool,
trade_info.base_mint,
trade_info.quote_mint,
trade_info.pool_base_token_account,
trade_info.pool_quote_token_account,
trade_info.pool_base_token_reserves,
trade_info.pool_quote_token_reserves,
trade_info.coin_creator_vault_ata,
trade_info.coin_creator_vault_authority,
trade_info.base_token_program,
trade_info.quote_token_program,
);
let mint = if trade_info.base_mint == sol_trade_sdk::constants::WSOL_TOKEN_ACCOUNT {
trade_info.quote_mint
} else {
@@ -142,7 +154,19 @@ async fn pumpswap_trade_with_grpc_buy_event(trade_info: PumpSwapBuyEvent) -> Any
}
async fn pumpswap_trade_with_grpc_sell_event(trade_info: PumpSwapSellEvent) -> AnyResult<()> {
let params = PumpSwapParams::from_sell_trade(&trade_info);
let params = PumpSwapParams::new(
trade_info.pool,
trade_info.base_mint,
trade_info.quote_mint,
trade_info.pool_base_token_account,
trade_info.pool_quote_token_account,
trade_info.pool_base_token_reserves,
trade_info.pool_quote_token_reserves,
trade_info.coin_creator_vault_ata,
trade_info.coin_creator_vault_authority,
trade_info.base_token_program,
trade_info.quote_token_program,
);
let mint = if trade_info.base_mint == sol_trade_sdk::constants::WSOL_TOKEN_ACCOUNT {
trade_info.quote_mint
} else {
+5 -2
View File
@@ -130,9 +130,12 @@ async fn raydium_amm_v4_copy_trade_with_grpc(trade_info: RaydiumAmmV4SwapEvent)
} else {
amm_info.pc_mint
};
let params = RaydiumAmmV4Params::from_amm_info_and_reserves(
let params = RaydiumAmmV4Params::new(
trade_info.amm,
amm_info,
amm_info.coin_mint,
amm_info.pc_mint,
amm_info.token_coin,
amm_info.token_pc,
coin_reserve,
pc_reserve,
);