refactor: optimize trading execution architecture and add wSOL management

- Simplify TradeExecutor interface by integrating middleware and swqos clients into params
- Refactor parallel execution module with dedicated buy/sell execute functions
- Add SOL wrapping/unwrapping functionality for wSOL management
- Remove redundant parameter passing in sell operations
- Delete example main.rs file
- Optimize transaction building with integrated parameter structures

BREAKING CHANGE: TradeExecutor interface simplified, middleware and swqos_clients now passed through params
This commit is contained in:
ysq
2025-09-09 17:02:24 +08:00
parent b9fa2f2f0f
commit 48a6c6283a
34 changed files with 586 additions and 853 deletions
+28 -21
View File
@@ -4,9 +4,12 @@ use crate::{
accounts, fee_recipient_ata, get_user_volume_accumulator_pda, BUY_DISCRIMINATOR,
SELL_DISCRIMINATOR,
},
trading::core::{
params::{BuyParams, PumpSwapParams, SellParams},
traits::InstructionBuilder,
trading::{
common::wsol_manager,
core::{
params::{BuyParams, PumpSwapParams, SellParams},
traits::InstructionBuilder,
},
},
utils::calc::pumpswap::{buy_quote_input_internal, sell_base_input_internal},
};
@@ -95,16 +98,18 @@ impl InstructionBuilder for PumpSwapInstructionBuilder {
}
let user_base_token_account =
crate::common::fast_fn::get_associated_token_address_with_program_id_fast(
crate::common::fast_fn::get_associated_token_address_with_program_id_fast_use_seed(
&params.payer.pubkey(),
&base_mint,
&base_token_program,
params.open_seed_optimize,
);
let user_quote_token_account =
crate::common::fast_fn::get_associated_token_address_with_program_id_fast(
crate::common::fast_fn::get_associated_token_address_with_program_id_fast_use_seed(
&params.payer.pubkey(),
&quote_mint,
&quote_token_program,
params.open_seed_optimize,
);
let fee_recipient_ata = fee_recipient_ata(accounts::FEE_RECIPIENT, quote_mint);
@@ -118,12 +123,15 @@ impl InstructionBuilder for PumpSwapInstructionBuilder {
.extend(crate::trading::common::handle_wsol(&params.payer.pubkey(), sol_amount));
}
instructions.push(crate::common::fast_fn::create_associated_token_account_idempotent_fast(
&params.payer.pubkey(),
&params.payer.pubkey(),
if quote_mint_is_wsol { &base_mint } else { &quote_mint },
if quote_mint_is_wsol { &base_token_program } else { &quote_token_program },
));
instructions.extend(
crate::common::fast_fn::create_associated_token_account_idempotent_fast_use_seed(
&params.payer.pubkey(),
&params.payer.pubkey(),
if quote_mint_is_wsol { &base_mint } else { &quote_mint },
if quote_mint_is_wsol { &base_token_program } else { &quote_token_program },
params.open_seed_optimize,
),
);
// Create buy instruction
let mut accounts = Vec::with_capacity(23);
@@ -181,7 +189,7 @@ impl InstructionBuilder for PumpSwapInstructionBuilder {
});
if auto_handle_wsol {
// Close wSOL ATA account, reclaim rent
instructions.push(crate::trading::common::close_wsol(&params.payer.pubkey()));
instructions.extend(crate::trading::common::close_wsol(&params.payer.pubkey()));
}
Ok(instructions)
}
@@ -259,16 +267,18 @@ impl InstructionBuilder for PumpSwapInstructionBuilder {
let fee_recipient_ata = fee_recipient_ata(accounts::FEE_RECIPIENT, quote_mint);
let user_base_token_account =
crate::common::fast_fn::get_associated_token_address_with_program_id_fast(
crate::common::fast_fn::get_associated_token_address_with_program_id_fast_use_seed(
&params.payer.pubkey(),
&base_mint,
&base_token_program,
params.open_seed_optimize,
);
let user_quote_token_account =
crate::common::fast_fn::get_associated_token_address_with_program_id_fast(
crate::common::fast_fn::get_associated_token_address_with_program_id_fast_use_seed(
&params.payer.pubkey(),
&quote_mint,
&quote_token_program,
params.open_seed_optimize,
);
// ========================================
@@ -276,12 +286,9 @@ impl InstructionBuilder for PumpSwapInstructionBuilder {
// ========================================
let mut instructions = Vec::with_capacity(3);
instructions.push(crate::common::fast_fn::create_associated_token_account_idempotent_fast(
&params.payer.pubkey(),
&params.payer.pubkey(),
&crate::constants::WSOL_TOKEN_ACCOUNT,
&crate::constants::TOKEN_PROGRAM,
));
if auto_handle_wsol {
instructions.extend(wsol_manager::create_wsol_ata(&params.payer.pubkey()));
}
// Create sell instruction
let mut accounts = Vec::with_capacity(23);
@@ -340,7 +347,7 @@ impl InstructionBuilder for PumpSwapInstructionBuilder {
});
if auto_handle_wsol {
instructions.push(crate::trading::common::close_wsol(&params.payer.pubkey()));
instructions.extend(crate::trading::common::close_wsol(&params.payer.pubkey()));
}
Ok(instructions)
}