diff --git a/examples/encoding-example/main.rs b/examples/encoding-example/main.rs index 7c0ca51e..48ee12b7 100644 --- a/examples/encoding-example/main.rs +++ b/examples/encoding-example/main.rs @@ -23,7 +23,7 @@ fn main() { // Initialize the encoder let encoder = EVMEncoderBuilder::new() .chain(Chain::Ethereum) - .tycho_router_with_permit2(None, swapper_pk) + .initialize_tycho_router_with_permit2(swapper_pk) .expect("Failed to create encoder builder") .build() .expect("Failed to build encoder"); diff --git a/src/bin/tycho-encode.rs b/src/bin/tycho-encode.rs index 2178269e..06cbe7bc 100644 --- a/src/bin/tycho-encode.rs +++ b/src/bin/tycho-encode.rs @@ -42,27 +42,21 @@ use tycho_execution::encoding::{ pub struct Cli { #[command(subcommand)] pub command: Commands, + #[arg(short, long)] + executors_file_path: Option, } #[derive(Subcommand)] pub enum Commands { /// Use the Tycho router encoding strategy - TychoRouter { - #[arg(short, long)] - config_path: Option, - }, + TychoRouter, /// Use the Tycho router encoding strategy with Permit2 approval and token in transfer TychoRouterPermit2 { - #[arg(short, long)] - config_path: Option, #[arg(short, long)] swapper_pk: String, }, /// Use the direct execution encoding strategy - DirectExecution { - #[arg(short, long)] - config_path: Option, - }, + DirectExecution, } fn main() -> Result<(), Box> { @@ -82,12 +76,16 @@ fn main() -> Result<(), Box> { let mut builder = EVMEncoderBuilder::new().chain(chain); + if let Some(config_path) = cli.executors_file_path { + builder = builder.executors_file_path(config_path); + } + builder = match cli.command { - Commands::TychoRouter { config_path } => builder.tycho_router(config_path)?, - Commands::TychoRouterPermit2 { config_path, swapper_pk } => { - builder.tycho_router_with_permit2(config_path, swapper_pk)? + Commands::TychoRouter => builder.initialize_tycho_router()?, + Commands::TychoRouterPermit2 { swapper_pk } => { + builder.initialize_tycho_router_with_permit2(swapper_pk)? } - Commands::DirectExecution { config_path } => builder.direct_execution(config_path)?, + Commands::DirectExecution => builder.initialize_direct_execution()?, }; let encoder = builder.build()?; let transactions = encoder.encode_router_calldata(vec![solution])?; diff --git a/src/encoding/evm/encoder_builder.rs b/src/encoding/evm/encoder_builder.rs index f7dfa567..11a5f2e4 100644 --- a/src/encoding/evm/encoder_builder.rs +++ b/src/encoding/evm/encoder_builder.rs @@ -16,6 +16,7 @@ use crate::encoding::{ pub struct EVMEncoderBuilder { strategy: Option>, chain: Option, + executors_file_path: Option, } impl Default for EVMEncoderBuilder { @@ -26,13 +27,20 @@ impl Default for EVMEncoderBuilder { impl EVMEncoderBuilder { pub fn new() -> Self { - EVMEncoderBuilder { chain: None, strategy: None } + EVMEncoderBuilder { chain: None, strategy: None, executors_file_path: None } } pub fn chain(mut self, chain: Chain) -> Self { self.chain = Some(chain); self } + /// Sets the `executors_file_path` manually. + /// If it's not set, the default path will be used (config/executor_addresses.json) + pub fn executors_file_path(mut self, executors_file_path: String) -> Self { + self.executors_file_path = Some(executors_file_path); + self + } + /// Sets the `strategy_encoder` manually. /// /// **Note**: This method should not be used in combination with `tycho_router` or @@ -44,12 +52,17 @@ impl EVMEncoderBuilder { /// Shortcut method to initialize a `SplitSwapStrategyEncoder` without any approval nor token in /// transfer. **Note**: Should not be used at the same time as `strategy_encoder`. - pub fn tycho_router(self, executors_file_path: Option) -> Result { + pub fn initialize_tycho_router(self) -> Result { if let Some(chain) = self.chain { - let swap_encoder_registry = SwapEncoderRegistry::new(executors_file_path, chain)?; + let swap_encoder_registry = + SwapEncoderRegistry::new(self.executors_file_path.clone(), chain)?; let strategy = Box::new(SplitSwapStrategyEncoder::new(chain, swap_encoder_registry, None)?); - Ok(EVMEncoderBuilder { chain: Some(chain), strategy: Some(strategy) }) + Ok(EVMEncoderBuilder { + chain: Some(chain), + strategy: Some(strategy), + executors_file_path: self.executors_file_path, + }) } else { Err(EncodingError::FatalError( "Please set the chain before setting the tycho router".to_string(), @@ -59,19 +72,23 @@ impl EVMEncoderBuilder { /// Shortcut method to initialize a `SplitSwapStrategyEncoder` with Permit2 approval and token /// in transfer. **Note**: Should not be used at the same time as `strategy_encoder`. - pub fn tycho_router_with_permit2( + pub fn initialize_tycho_router_with_permit2( self, - executors_file_path: Option, swapper_pk: String, ) -> Result { if let Some(chain) = self.chain { - let swap_encoder_registry = SwapEncoderRegistry::new(executors_file_path, chain)?; + let swap_encoder_registry = + SwapEncoderRegistry::new(self.executors_file_path.clone(), chain)?; let strategy = Box::new(SplitSwapStrategyEncoder::new( chain, swap_encoder_registry, Some(swapper_pk), )?); - Ok(EVMEncoderBuilder { chain: Some(chain), strategy: Some(strategy) }) + Ok(EVMEncoderBuilder { + chain: Some(chain), + strategy: Some(strategy), + executors_file_path: self.executors_file_path, + }) } else { Err(EncodingError::FatalError( "Please set the chain before setting the tycho router".to_string(), @@ -81,14 +98,16 @@ impl EVMEncoderBuilder { /// Shortcut method to initialize an `ExecutorStrategyEncoder`. /// **Note**: Should not be used at the same time as `strategy_encoder`. - pub fn direct_execution( - self, - executors_file_path: Option, - ) -> Result { + pub fn initialize_direct_execution(self) -> Result { if let Some(chain) = self.chain { - let swap_encoder_registry = SwapEncoderRegistry::new(executors_file_path, chain)?; + let swap_encoder_registry = + SwapEncoderRegistry::new(self.executors_file_path.clone(), chain)?; let strategy = Box::new(ExecutorStrategyEncoder::new(swap_encoder_registry)); - Ok(EVMEncoderBuilder { chain: Some(chain), strategy: Some(strategy) }) + Ok(EVMEncoderBuilder { + chain: Some(chain), + strategy: Some(strategy), + executors_file_path: self.executors_file_path, + }) } else { Err(EncodingError::FatalError( "Please set the chain before setting the strategy".to_string(),