update gas fee strategy support data size limit settings
This commit is contained in:
@@ -21,6 +21,7 @@ pub struct GasFeeStrategyValue {
|
||||
pub cu_limit: u32,
|
||||
pub cu_price: u64,
|
||||
pub tip: f64,
|
||||
pub data_size_limit: u32,
|
||||
}
|
||||
|
||||
#[derive(Clone)]
|
||||
@@ -42,6 +43,8 @@ impl GasFeeStrategy {
|
||||
cu_price: u64,
|
||||
buy_tip: f64,
|
||||
sell_tip: f64,
|
||||
buy_data_size_limit: u32,
|
||||
sell_data_size_limit: u32,
|
||||
) {
|
||||
for swqos_type in SwqosType::values() {
|
||||
if swqos_type.eq(&SwqosType::Default) {
|
||||
@@ -54,6 +57,7 @@ impl GasFeeStrategy {
|
||||
cu_limit,
|
||||
cu_price,
|
||||
buy_tip,
|
||||
buy_data_size_limit,
|
||||
);
|
||||
self.set(
|
||||
swqos_type,
|
||||
@@ -62,6 +66,7 @@ impl GasFeeStrategy {
|
||||
cu_limit,
|
||||
cu_price,
|
||||
sell_tip,
|
||||
sell_data_size_limit,
|
||||
);
|
||||
}
|
||||
self.set(
|
||||
@@ -71,6 +76,7 @@ impl GasFeeStrategy {
|
||||
cu_limit,
|
||||
cu_price,
|
||||
0.0,
|
||||
buy_data_size_limit,
|
||||
);
|
||||
self.set(
|
||||
SwqosType::Default,
|
||||
@@ -79,6 +85,7 @@ impl GasFeeStrategy {
|
||||
cu_limit,
|
||||
cu_price,
|
||||
0.0,
|
||||
sell_data_size_limit,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -93,6 +100,7 @@ impl GasFeeStrategy {
|
||||
high_cu_price: u64,
|
||||
low_tip: f64,
|
||||
high_tip: f64,
|
||||
data_size_limit: u32,
|
||||
) {
|
||||
for swqos_type in swqos_types {
|
||||
self.del(*swqos_type, trade_type, GasFeeStrategyType::Normal);
|
||||
@@ -103,6 +111,7 @@ impl GasFeeStrategy {
|
||||
cu_limit,
|
||||
high_cu_price,
|
||||
low_tip,
|
||||
data_size_limit,
|
||||
);
|
||||
self.set(
|
||||
*swqos_type,
|
||||
@@ -111,6 +120,7 @@ impl GasFeeStrategy {
|
||||
cu_limit,
|
||||
low_cu_price,
|
||||
high_tip,
|
||||
data_size_limit,
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -126,6 +136,7 @@ impl GasFeeStrategy {
|
||||
high_cu_price: u64,
|
||||
low_tip: f64,
|
||||
high_tip: f64,
|
||||
data_size_limit: u32,
|
||||
) {
|
||||
if swqos_type.eq(&SwqosType::Default) {
|
||||
return;
|
||||
@@ -138,6 +149,7 @@ impl GasFeeStrategy {
|
||||
cu_limit,
|
||||
high_cu_price,
|
||||
low_tip,
|
||||
data_size_limit,
|
||||
);
|
||||
self.set(
|
||||
swqos_type,
|
||||
@@ -146,6 +158,7 @@ impl GasFeeStrategy {
|
||||
cu_limit,
|
||||
low_cu_price,
|
||||
high_tip,
|
||||
data_size_limit,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -158,6 +171,8 @@ impl GasFeeStrategy {
|
||||
cu_price: u64,
|
||||
buy_tip: f64,
|
||||
sell_tip: f64,
|
||||
buy_data_size_limit: u32,
|
||||
sell_data_size_limit: u32,
|
||||
) {
|
||||
for swqos_type in swqos_types {
|
||||
self.del_all(*swqos_type, TradeType::Buy);
|
||||
@@ -169,6 +184,7 @@ impl GasFeeStrategy {
|
||||
cu_limit,
|
||||
cu_price,
|
||||
buy_tip,
|
||||
buy_data_size_limit,
|
||||
);
|
||||
self.set(
|
||||
*swqos_type,
|
||||
@@ -177,6 +193,7 @@ impl GasFeeStrategy {
|
||||
cu_limit,
|
||||
cu_price,
|
||||
sell_tip,
|
||||
sell_data_size_limit,
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -188,6 +205,8 @@ impl GasFeeStrategy {
|
||||
cu_price: u64,
|
||||
buy_tip: f64,
|
||||
sell_tip: f64,
|
||||
buy_data_size_limit: u32,
|
||||
sell_data_size_limit: u32,
|
||||
) {
|
||||
self.del_all(swqos_type, TradeType::Buy);
|
||||
self.del_all(swqos_type, TradeType::Sell);
|
||||
@@ -198,6 +217,7 @@ impl GasFeeStrategy {
|
||||
cu_limit,
|
||||
cu_price,
|
||||
buy_tip,
|
||||
buy_data_size_limit,
|
||||
);
|
||||
self.set(
|
||||
swqos_type,
|
||||
@@ -206,6 +226,7 @@ impl GasFeeStrategy {
|
||||
cu_limit,
|
||||
cu_price,
|
||||
sell_tip,
|
||||
sell_data_size_limit,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -217,6 +238,7 @@ impl GasFeeStrategy {
|
||||
cu_limit: u32,
|
||||
cu_price: u64,
|
||||
tip: f64,
|
||||
data_size_limit: u32,
|
||||
) {
|
||||
if strategy_type == GasFeeStrategyType::Normal {
|
||||
self.del(swqos_type, trade_type, GasFeeStrategyType::HighTipLowCuPrice);
|
||||
@@ -228,7 +250,7 @@ impl GasFeeStrategy {
|
||||
let mut new_map = (**current_map).clone();
|
||||
new_map.insert(
|
||||
(swqos_type, trade_type, strategy_type),
|
||||
GasFeeStrategyValue { cu_limit, cu_price, tip },
|
||||
GasFeeStrategyValue { cu_limit, cu_price, tip, data_size_limit },
|
||||
);
|
||||
Arc::new(new_map)
|
||||
});
|
||||
|
||||
+8
-2
@@ -380,7 +380,10 @@ impl SolanaTrade {
|
||||
slippage_basis_points: params.slippage_basis_points,
|
||||
address_lookup_table_account: params.address_lookup_table_account,
|
||||
recent_blockhash: params.recent_blockhash,
|
||||
data_size_limit: 256 * 1024,
|
||||
data_size_limit: params.gas_fee_strategy.get_strategies(TradeType::Buy)
|
||||
.get(0)
|
||||
.map(|(_, _, v)| v.data_size_limit)
|
||||
.unwrap_or(256 * 1024),
|
||||
wait_transaction_confirmed: params.wait_transaction_confirmed,
|
||||
protocol_params: protocol_params.clone(),
|
||||
open_seed_optimize: self.use_seed_optimize, // 使用全局seed优化配置
|
||||
@@ -484,7 +487,10 @@ impl SolanaTrade {
|
||||
swqos_clients: self.swqos_clients.clone(),
|
||||
middleware_manager: self.middleware_manager.clone(),
|
||||
durable_nonce: params.durable_nonce,
|
||||
data_size_limit: 0,
|
||||
data_size_limit: params.gas_fee_strategy.get_strategies(TradeType::Sell)
|
||||
.get(0)
|
||||
.map(|(_, _, v)| v.data_size_limit)
|
||||
.unwrap_or(0),
|
||||
create_input_mint_ata: false,
|
||||
close_input_mint_ata: params.close_mint_token_ata,
|
||||
create_output_mint_ata: params.create_output_token_ata,
|
||||
|
||||
@@ -41,14 +41,20 @@ pub fn compute_budget_instructions(
|
||||
// Cache miss, generate new instructions
|
||||
let mut insts = SmallVec::<[Instruction; 3]>::new();
|
||||
|
||||
if is_buy {
|
||||
// Only add data_size_limit instruction if > 0 and is_buy
|
||||
if is_buy && data_size_limit > 0 {
|
||||
insts.push(ComputeBudgetInstruction::set_loaded_accounts_data_size_limit(data_size_limit));
|
||||
}
|
||||
|
||||
insts.extend([
|
||||
ComputeBudgetInstruction::set_compute_unit_price(unit_price),
|
||||
ComputeBudgetInstruction::set_compute_unit_limit(unit_limit),
|
||||
]);
|
||||
// Only add compute unit price instruction if > 0
|
||||
if unit_price > 0 {
|
||||
insts.push(ComputeBudgetInstruction::set_compute_unit_price(unit_price));
|
||||
}
|
||||
|
||||
// Only add compute unit limit instruction if > 0
|
||||
if unit_limit > 0 {
|
||||
insts.push(ComputeBudgetInstruction::set_compute_unit_limit(unit_limit));
|
||||
}
|
||||
|
||||
// Store result in cache
|
||||
let insts_clone = insts.clone();
|
||||
|
||||
Reference in New Issue
Block a user