feat: Add Raydium AMM V4 support and middleware system
- Add Raydium AMM V4 trading protocol support - Implement instruction middleware system for dynamic processing - Refactor trade executors to support middleware parameters - Add fee calculation and slippage protection mechanisms - Maintain backward compatibility with optional middleware
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
use crate::trading::middleware::traits::InstructionMiddleware;
|
||||
use anyhow::Result;
|
||||
use solana_sdk::instruction::Instruction;
|
||||
|
||||
/// Logging middleware - Records instruction information
|
||||
#[derive(Clone)]
|
||||
pub struct LoggingMiddleware;
|
||||
|
||||
impl InstructionMiddleware for LoggingMiddleware {
|
||||
fn name(&self) -> &'static str {
|
||||
"LoggingMiddleware"
|
||||
}
|
||||
|
||||
fn process_protocol_instructions(
|
||||
&self,
|
||||
protocol_instructions: Vec<Instruction>,
|
||||
protocol_name: String,
|
||||
is_buy: bool,
|
||||
) -> Result<Vec<Instruction>> {
|
||||
println!("-------------------[{}]-------------------", self.name());
|
||||
println!("process_protocol_instructions");
|
||||
println!("[{}] Instruction count: {}", self.name(), protocol_instructions.len());
|
||||
println!("[{}] Protocol name: {}\n", self.name(), protocol_name);
|
||||
println!("[{}] Is buy: {}", self.name(), is_buy);
|
||||
for (i, instruction) in protocol_instructions.iter().enumerate() {
|
||||
println!("Instruction {}:", i + 1);
|
||||
println!("{:?}\n", instruction);
|
||||
}
|
||||
Ok(protocol_instructions)
|
||||
}
|
||||
|
||||
fn process_full_instructions(
|
||||
&self,
|
||||
full_instructions: Vec<Instruction>,
|
||||
protocol_name: String,
|
||||
is_buy: bool,
|
||||
) -> Result<Vec<Instruction>> {
|
||||
println!("-------------------[{}]-------------------", self.name());
|
||||
println!("process_full_instructions");
|
||||
println!("[{}] Instruction count: {}", self.name(), full_instructions.len());
|
||||
println!("[{}] Protocol name: {}\n", self.name(), protocol_name);
|
||||
println!("[{}] Is buy: {}", self.name(), is_buy);
|
||||
for (i, instruction) in full_instructions.iter().enumerate() {
|
||||
println!("Instruction {}:", i + 1);
|
||||
println!("{:?}\n", instruction);
|
||||
}
|
||||
Ok(full_instructions)
|
||||
}
|
||||
|
||||
fn clone_box(&self) -> Box<dyn InstructionMiddleware> {
|
||||
Box::new(self.clone())
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user