diff --git a/README.md b/README.md index 0651796..3554844 100644 --- a/README.md +++ b/README.md @@ -134,7 +134,7 @@ let client = SolanaTrade::new(Arc::new(payer), trade_config).await; For detailed information about Gas Fee Strategy, see the [Gas Fee Strategy Reference](docs/GAS_FEE_STRATEGY.md). ```rust -sol_trade_sdk::common::GasFeeStrategy::init_builtin_fee_strategies(); +sol_trade_sdk::common::set_global_gas_fee_strategy(150000, 500000, 0.001, 0.001); ``` #### 3. Build Trading Parameters diff --git a/README_CN.md b/README_CN.md index cfe0c07..4e4f5bb 100755 --- a/README_CN.md +++ b/README_CN.md @@ -134,8 +134,8 @@ let client = SolanaTrade::new(Arc::new(payer), trade_config).await; 有关 Gas Fee 策略的详细信息,请参阅 [Gas Fee 策略参考手册](docs/GAS_FEE_STRATEGY_CN.md)。 ```rust -// 使用内置策略 -sol_trade_sdk::common::GasFeeStrategy::init_builtin_fee_strategies(); +// 设置全局策略 +sol_trade_sdk::common::set_global_gas_fee_strategy(150000, 500000, 0.001, 0.001); ``` #### 3. 构建交易参数 diff --git a/docs/GAS_FEE_STRATEGY.md b/docs/GAS_FEE_STRATEGY.md index 390d15c..45d6220 100644 --- a/docs/GAS_FEE_STRATEGY.md +++ b/docs/GAS_FEE_STRATEGY.md @@ -13,12 +13,17 @@ This module supports users to configure strategies for SwqosType under different Each (SwqosType, TradeType) combination can only configure one strategy. Subsequent strategy configurations will override previous ones. -### 2. Using Built-in Strategies +### 2. Set Global Strategy (can also be configured individually) ```rust -use sol_trade_sdk::common::gas_fee_strategy::GasFeeStrategy; -// Use built-in strategies (includes normal strategies for various SwqosTypes) -GasFeeStrategy::init_builtin_fee_strategies(); +use sol_trade_sdk::common::{gas_fee_strategy::GasFeeStrategy, set_global_gas_fee_strategy}; +// Set global strategy (normal strategy) +set_global_gas_fee_strategy( + 150000, // cu_limit + 500000, // cu_price + 0.001, // buy tip + 0.001 // sell tip +); ``` ### 3. Configuring Single Strategy diff --git a/docs/GAS_FEE_STRATEGY_CN.md b/docs/GAS_FEE_STRATEGY_CN.md index db70df0..73a7ffc 100644 --- a/docs/GAS_FEE_STRATEGY_CN.md +++ b/docs/GAS_FEE_STRATEGY_CN.md @@ -13,12 +13,17 @@ 每个 (SwqosType, TradeType) 的组合仅可配置一个策略。后续配置的策略会覆盖之前的策略。 -### 2. 使用内置策略 +### 2. 设置全局策略(也可以不设置,单独去配置单个策略) ```rust -use sol_trade_sdk::common::gas_fee_strategy::GasFeeStrategy; -// 使用内置策略(内置了各个 SwqosType 的 normal 策略) -GasFeeStrategy::init_builtin_fee_strategies(); +use sol_trade_sdk::common::{gas_fee_strategy::GasFeeStrategy, set_global_gas_fee_strategy}; +// 设置全局策略(normal 策略) +set_global_gas_fee_strategy( + 150000, // cu_limit + 500000, // cu_price + 0.001, // buy tip + 0.001 // sell tip +); ``` ### 3. 配置单个策略 @@ -62,4 +67,4 @@ GasFeeStrategy::clear(); ## 🔗 相关文档 -- [示例:Gas Fee 策略](../examples/gas_fee_strategy/) \ No newline at end of file +- [示例:Gas Fee 策略](../examples/gas_fee_strategy/) diff --git a/examples/address_lookup/src/main.rs b/examples/address_lookup/src/main.rs index 5ad26e4..0ffa9bf 100644 --- a/examples/address_lookup/src/main.rs +++ b/examples/address_lookup/src/main.rs @@ -124,8 +124,8 @@ async fn create_solana_trade_client() -> AnyResult { let swqos_configs: Vec = vec![SwqosConfig::Default(rpc_url.clone())]; let trade_config = TradeConfig::new(rpc_url, swqos_configs, commitment); let solana_trade = SolanaTrade::new(Arc::new(payer), trade_config).await; - // init gas fee strategy - sol_trade_sdk::common::GasFeeStrategy::init_builtin_fee_strategies(); + // set global strategy + sol_trade_sdk::common::set_global_gas_fee_strategy(150000, 500000, 0.001, 0.001); println!("✅ SolanaTrade client initialized successfully!"); Ok(solana_trade) } diff --git a/examples/bonk_copy_trading/src/main.rs b/examples/bonk_copy_trading/src/main.rs index ded06c6..6bb3bcf 100644 --- a/examples/bonk_copy_trading/src/main.rs +++ b/examples/bonk_copy_trading/src/main.rs @@ -116,8 +116,8 @@ async fn create_solana_trade_client() -> AnyResult { let swqos_configs: Vec = vec![SwqosConfig::Default(rpc_url.clone())]; let trade_config = TradeConfig::new(rpc_url, swqos_configs, commitment); let solana_trade = SolanaTrade::new(Arc::new(payer), trade_config).await; - // init gas fee strategy - sol_trade_sdk::common::GasFeeStrategy::init_builtin_fee_strategies(); + // set global strategy + sol_trade_sdk::common::set_global_gas_fee_strategy(150000, 500000, 0.001, 0.001); println!("✅ SolanaTrade client initialized successfully!"); Ok(solana_trade) } diff --git a/examples/bonk_sniper_trading/src/main.rs b/examples/bonk_sniper_trading/src/main.rs index f7be48b..6562c26 100644 --- a/examples/bonk_sniper_trading/src/main.rs +++ b/examples/bonk_sniper_trading/src/main.rs @@ -79,8 +79,8 @@ async fn create_solana_trade_client() -> AnyResult { let swqos_configs: Vec = vec![SwqosConfig::Default(rpc_url.clone())]; let trade_config = TradeConfig::new(rpc_url, swqos_configs, commitment); let solana_trade = SolanaTrade::new(Arc::new(payer), trade_config).await; - // init gas fee strategy - sol_trade_sdk::common::GasFeeStrategy::init_builtin_fee_strategies(); + // set global strategy + sol_trade_sdk::common::set_global_gas_fee_strategy(150000, 500000, 0.001, 0.001); println!("✅ SolanaTrade client initialized successfully!"); Ok(solana_trade) } diff --git a/examples/cli_trading/src/main.rs b/examples/cli_trading/src/main.rs index c03662b..5233680 100644 --- a/examples/cli_trading/src/main.rs +++ b/examples/cli_trading/src/main.rs @@ -1304,8 +1304,8 @@ async fn initialize_real_client() -> AnyResult { let swqos_configs: Vec = vec![SwqosConfig::Default(rpc_url.clone())]; let trade_config = TradeConfig::new(rpc_url, swqos_configs, commitment); let solana_trade = SolanaTrade::new(payer, trade_config).await; - // init gas fee strategy - sol_trade_sdk::common::GasFeeStrategy::init_builtin_fee_strategies(); + // set global strategy + sol_trade_sdk::common::set_global_gas_fee_strategy(150000, 500000, 0.001, 0.001); println!("✅ SolanaTrade client initialized successfully!"); Ok(solana_trade) } diff --git a/examples/gas_fee_strategy/src/main.rs b/examples/gas_fee_strategy/src/main.rs index f6b22db..746ff34 100644 --- a/examples/gas_fee_strategy/src/main.rs +++ b/examples/gas_fee_strategy/src/main.rs @@ -1,5 +1,5 @@ use sol_trade_sdk::{ - common::gas_fee_strategy::GasFeeStrategy, + common::{gas_fee_strategy::GasFeeStrategy, set_global_gas_fee_strategy}, swqos::{SwqosType, TradeType}, }; @@ -8,12 +8,12 @@ async fn main() { println!("🚀 Gas Fee Strategy Demo"); println!("========================"); - // Initialize builtin strategies - println!("1. Initialize builtin strategies"); - GasFeeStrategy::init_builtin_fee_strategies(); + // Set global strategy + println!("1. Set global strategy"); + set_global_gas_fee_strategy(150000, 500000, 0.001, 0.001); // Print all strategies - println!("\n2. Print all builtin strategies"); + println!("\n2. Print all strategies"); GasFeeStrategy::print_all_strategies(); // Clear all strategies diff --git a/examples/middleware_system/src/main.rs b/examples/middleware_system/src/main.rs index 66c0ab0..ca3d9e4 100644 --- a/examples/middleware_system/src/main.rs +++ b/examples/middleware_system/src/main.rs @@ -66,8 +66,8 @@ async fn create_solana_trade_client() -> AnyResult { let swqos_configs: Vec = vec![SwqosConfig::Default(rpc_url.clone())]; let trade_config = TradeConfig::new(rpc_url, swqos_configs, commitment); let solana_trade = SolanaTrade::new(Arc::new(payer), trade_config).await; - // init gas fee strategy - sol_trade_sdk::common::GasFeeStrategy::init_builtin_fee_strategies(); + // set global strategy + sol_trade_sdk::common::set_global_gas_fee_strategy(150000, 500000, 0.001, 0.001); println!("✅ SolanaTrade client initialized successfully!"); Ok(solana_trade) } diff --git a/examples/nonce_cache/src/main.rs b/examples/nonce_cache/src/main.rs index 22da32c..982b008 100644 --- a/examples/nonce_cache/src/main.rs +++ b/examples/nonce_cache/src/main.rs @@ -105,8 +105,8 @@ async fn create_solana_trade_client() -> AnyResult { let swqos_configs: Vec = vec![SwqosConfig::Default(rpc_url.clone())]; let trade_config = TradeConfig::new(rpc_url, swqos_configs, commitment); let solana_trade = SolanaTrade::new(Arc::new(payer), trade_config).await; - // init gas fee strategy - sol_trade_sdk::common::GasFeeStrategy::init_builtin_fee_strategies(); + // set global strategy + sol_trade_sdk::common::set_global_gas_fee_strategy(150000, 500000, 0.001, 0.001); println!("✅ SolanaTrade client initialized successfully!"); Ok(solana_trade) } diff --git a/examples/pumpfun_copy_trading/src/main.rs b/examples/pumpfun_copy_trading/src/main.rs index 0ae0391..845e930 100644 --- a/examples/pumpfun_copy_trading/src/main.rs +++ b/examples/pumpfun_copy_trading/src/main.rs @@ -104,8 +104,8 @@ async fn create_solana_trade_client() -> AnyResult { let swqos_configs: Vec = vec![SwqosConfig::Default(rpc_url.clone())]; let trade_config = TradeConfig::new(rpc_url, swqos_configs, commitment); let solana_trade = SolanaTrade::new(Arc::new(payer), trade_config).await; - // init gas fee strategy - sol_trade_sdk::common::GasFeeStrategy::init_builtin_fee_strategies(); + // set global strategy + sol_trade_sdk::common::set_global_gas_fee_strategy(150000, 500000, 0.001, 0.001); println!("✅ SolanaTrade client initialized successfully!"); Ok(solana_trade) } diff --git a/examples/pumpfun_sniper_trading/src/main.rs b/examples/pumpfun_sniper_trading/src/main.rs index 0899814..f44881f 100644 --- a/examples/pumpfun_sniper_trading/src/main.rs +++ b/examples/pumpfun_sniper_trading/src/main.rs @@ -73,8 +73,8 @@ async fn create_solana_trade_client() -> AnyResult { let swqos_configs: Vec = vec![SwqosConfig::Default(rpc_url.clone())]; let trade_config = TradeConfig::new(rpc_url, swqos_configs, commitment); let solana_trade = SolanaTrade::new(Arc::new(payer), trade_config).await; - // init gas fee strategy - sol_trade_sdk::common::GasFeeStrategy::init_builtin_fee_strategies(); + // set global strategy + sol_trade_sdk::common::set_global_gas_fee_strategy(150000, 500000, 0.001, 0.001); println!("✅ SolanaTrade client initialized successfully!"); Ok(solana_trade) } diff --git a/examples/pumpswap_direct_trading/src/main.rs b/examples/pumpswap_direct_trading/src/main.rs index 7c6e588..2356576 100644 --- a/examples/pumpswap_direct_trading/src/main.rs +++ b/examples/pumpswap_direct_trading/src/main.rs @@ -85,8 +85,8 @@ async fn create_solana_trade_client() -> AnyResult { let swqos_configs: Vec = vec![SwqosConfig::Default(rpc_url.clone())]; let trade_config = TradeConfig::new(rpc_url, swqos_configs, commitment); let solana_trade = SolanaTrade::new(Arc::new(payer), trade_config).await; - // init gas fee strategy - sol_trade_sdk::common::GasFeeStrategy::init_builtin_fee_strategies(); + // set global strategy + sol_trade_sdk::common::set_global_gas_fee_strategy(150000, 500000, 0.001, 0.001); println!("✅ SolanaTrade client initialized successfully!"); Ok(solana_trade) } diff --git a/examples/pumpswap_trading/src/main.rs b/examples/pumpswap_trading/src/main.rs index afc6d68..2b3d40c 100644 --- a/examples/pumpswap_trading/src/main.rs +++ b/examples/pumpswap_trading/src/main.rs @@ -130,8 +130,8 @@ async fn create_solana_trade_client() -> AnyResult { let swqos_configs: Vec = vec![SwqosConfig::Default(rpc_url.clone())]; let trade_config = TradeConfig::new(rpc_url, swqos_configs, commitment); let solana_trade = SolanaTrade::new(Arc::new(payer), trade_config).await; - // init gas fee strategy - sol_trade_sdk::common::GasFeeStrategy::init_builtin_fee_strategies(); + // set global strategy + sol_trade_sdk::common::set_global_gas_fee_strategy(150000, 500000, 0.001, 0.001); println!("✅ SolanaTrade client initialized successfully!"); Ok(solana_trade) } diff --git a/examples/raydium_amm_v4_trading/src/main.rs b/examples/raydium_amm_v4_trading/src/main.rs index 6ca4d42..4c34840 100644 --- a/examples/raydium_amm_v4_trading/src/main.rs +++ b/examples/raydium_amm_v4_trading/src/main.rs @@ -104,8 +104,8 @@ async fn create_solana_trade_client() -> AnyResult { let swqos_configs: Vec = vec![SwqosConfig::Default(rpc_url.clone())]; let trade_config = TradeConfig::new(rpc_url, swqos_configs, commitment); let solana_trade = SolanaTrade::new(Arc::new(payer), trade_config).await; - // init gas fee strategy - sol_trade_sdk::common::GasFeeStrategy::init_builtin_fee_strategies(); + // set global strategy + sol_trade_sdk::common::set_global_gas_fee_strategy(150000, 500000, 0.001, 0.001); println!("✅ SolanaTrade client initialized successfully!"); Ok(solana_trade) } diff --git a/examples/raydium_cpmm_trading/src/main.rs b/examples/raydium_cpmm_trading/src/main.rs index 3012ed9..611048f 100644 --- a/examples/raydium_cpmm_trading/src/main.rs +++ b/examples/raydium_cpmm_trading/src/main.rs @@ -126,8 +126,8 @@ async fn create_solana_trade_client() -> AnyResult { let swqos_configs: Vec = vec![SwqosConfig::Default(rpc_url.clone())]; let trade_config = TradeConfig::new(rpc_url, swqos_configs, commitment); let solana_trade = SolanaTrade::new(Arc::new(payer), trade_config).await; - // init gas fee strategy - sol_trade_sdk::common::GasFeeStrategy::init_builtin_fee_strategies(); + // set global strategy + sol_trade_sdk::common::set_global_gas_fee_strategy(150000, 500000, 0.001, 0.001); println!("✅ SolanaTrade client initialized successfully!"); Ok(solana_trade) } diff --git a/examples/seed_trading/src/main.rs b/examples/seed_trading/src/main.rs index c96e478..246b386 100644 --- a/examples/seed_trading/src/main.rs +++ b/examples/seed_trading/src/main.rs @@ -94,8 +94,8 @@ async fn create_solana_trade_client() -> AnyResult { let swqos_configs: Vec = vec![SwqosConfig::Default(rpc_url.clone())]; let trade_config = TradeConfig::new(rpc_url, swqos_configs, commitment); let solana_trade = SolanaTrade::new(Arc::new(payer), trade_config).await; - // init gas fee strategy - sol_trade_sdk::common::GasFeeStrategy::init_builtin_fee_strategies(); + // set global strategy + sol_trade_sdk::common::set_global_gas_fee_strategy(150000, 500000, 0.001, 0.001); println!("✅ SolanaTrade client initialized successfully!"); Ok(solana_trade) } diff --git a/examples/trading_client/src/main.rs b/examples/trading_client/src/main.rs index 55c8e9c..fc9816c 100644 --- a/examples/trading_client/src/main.rs +++ b/examples/trading_client/src/main.rs @@ -35,8 +35,8 @@ async fn create_solana_trade_client() -> AnyResult { ]; let trade_config = TradeConfig::new(rpc_url, swqos_configs, commitment); let solana_trade_client = SolanaTrade::new(Arc::new(payer), trade_config).await; - // init gas fee strategy - sol_trade_sdk::common::GasFeeStrategy::init_builtin_fee_strategies(); + // set global strategy + sol_trade_sdk::common::set_global_gas_fee_strategy(150000, 500000, 0.001, 0.001); println!("SolanaTrade client created successfully!"); Ok(solana_trade_client) } diff --git a/examples/wsol_wrapper/src/main.rs b/examples/wsol_wrapper/src/main.rs index 3ffeade..cfaf7a1 100644 --- a/examples/wsol_wrapper/src/main.rs +++ b/examples/wsol_wrapper/src/main.rs @@ -58,8 +58,8 @@ async fn create_solana_trade_client() -> Result = vec![SwqosConfig::Default(rpc_url.clone())]; let trade_config = TradeConfig::new(rpc_url, swqos_configs, commitment); let solana_trade = SolanaTrade::new(Arc::new(payer), trade_config).await; - // init gas fee strategy - sol_trade_sdk::common::GasFeeStrategy::init_builtin_fee_strategies(); + // set global strategy + sol_trade_sdk::common::set_global_gas_fee_strategy(150000, 500000, 0.001, 0.001); println!("✅ SolanaTrade client initialized successfully!"); Ok(solana_trade) } diff --git a/src/common/gas_fee_strategy.rs b/src/common/gas_fee_strategy.rs index 26d0a30..3625921 100644 --- a/src/common/gas_fee_strategy.rs +++ b/src/common/gas_fee_strategy.rs @@ -1,7 +1,3 @@ -use crate::constants::trade::trade::{ - DEFAULT_BUY_TIP_FEE, DEFAULT_RPC_UNIT_LIMIT, DEFAULT_RPC_UNIT_PRICE, DEFAULT_SELL_TIP_FEE, - DEFAULT_TIP_UNIT_LIMIT, DEFAULT_TIP_UNIT_PRICE, -}; use crate::swqos::{SwqosType, TradeType}; use arc_swap::ArcSwap; use std::collections::HashMap; @@ -33,46 +29,44 @@ static STRATEGIES: LazyLock< pub struct GasFeeStrategy; -impl GasFeeStrategy { - /// 初始化内置策略。 - /// Initialize built-in strategies - pub fn init_builtin_fee_strategies() { - GasFeeStrategy::add_normal_fee_strategies( - &SwqosType::values() - .into_iter() - .filter(|swqos_type| !swqos_type.eq(&SwqosType::Default)) - .collect::>(), - TradeType::Buy, - DEFAULT_TIP_UNIT_PRICE, - DEFAULT_BUY_TIP_FEE, - DEFAULT_TIP_UNIT_LIMIT, - ); - GasFeeStrategy::add_normal_fee_strategies( - &SwqosType::values() - .into_iter() - .filter(|swqos_type| !swqos_type.eq(&SwqosType::Default)) - .collect::>(), - TradeType::Sell, - DEFAULT_TIP_UNIT_PRICE, - DEFAULT_SELL_TIP_FEE, - DEFAULT_TIP_UNIT_LIMIT, - ); - GasFeeStrategy::add_normal_fee_strategy( - SwqosType::Default, - TradeType::Buy, - DEFAULT_RPC_UNIT_LIMIT, - DEFAULT_RPC_UNIT_PRICE, - 0.0, - ); - GasFeeStrategy::add_normal_fee_strategy( - SwqosType::Default, - TradeType::Sell, - DEFAULT_RPC_UNIT_LIMIT, - DEFAULT_RPC_UNIT_PRICE, - 0.0, - ); - } +pub fn set_global_gas_fee_strategy(cu_limit: u32, cu_price: u64, buy_tip: f64, sell_tip: f64) { + GasFeeStrategy::add_normal_fee_strategies( + &SwqosType::values() + .into_iter() + .filter(|swqos_type| !swqos_type.eq(&SwqosType::Default)) + .collect::>(), + TradeType::Buy, + cu_limit, + cu_price, + buy_tip, + ); + GasFeeStrategy::add_normal_fee_strategies( + &SwqosType::values() + .into_iter() + .filter(|swqos_type| !swqos_type.eq(&SwqosType::Default)) + .collect::>(), + TradeType::Sell, + cu_limit, + cu_price, + sell_tip, + ); + GasFeeStrategy::add_normal_fee_strategy( + SwqosType::Default, + TradeType::Buy, + cu_limit, + cu_price, + 0.0, + ); + GasFeeStrategy::add_normal_fee_strategy( + SwqosType::Default, + TradeType::Sell, + cu_limit, + cu_price, + 0.0, + ); +} +impl GasFeeStrategy { /// 为多个服务类型添加高低费率策略,会移除(SwqosType,TradeType)的默认策略。 /// Add high-low fee strategies for multiple service types, Will remove the default strategy of (SwqosType,TradeType) pub fn add_high_low_fee_strategies( @@ -140,9 +134,9 @@ impl GasFeeStrategy { pub fn add_normal_fee_strategies( swqos_types: &[SwqosType], trade_type: TradeType, + cu_limit: u32, cu_price: u64, tip: f64, - cu_limit: u32, ) { for swqos_type in swqos_types { GasFeeStrategy::remove_strategy(*swqos_type, trade_type);