From e5113deb4ee1a7eef4c5ad4591159c26dc44bdb5 Mon Sep 17 00:00:00 2001 From: Mateo Date: Mon, 2 Dec 2024 11:39:32 +0100 Subject: [PATCH 1/3] Base: Add support for Balancer --- src/infra/dex/balancer/dto.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/infra/dex/balancer/dto.rs b/src/infra/dex/balancer/dto.rs index ffaf8fc..e16d601 100644 --- a/src/infra/dex/balancer/dto.rs +++ b/src/infra/dex/balancer/dto.rs @@ -189,6 +189,7 @@ impl Chain { eth::ChainId::Mainnet => Ok(Self::Mainnet), eth::ChainId::Gnosis => Ok(Self::Gnosis), eth::ChainId::ArbitrumOne => Ok(Self::Arbitrum), + eth::ChainId::Base => Ok(Self::Base), unsupported => Err(Error::UnsupportedChainId(unsupported)), } } From 5cfce9b53bfcf462f16f4fc276c0914660d72e9a Mon Sep 17 00:00:00 2001 From: Mateo Date: Mon, 2 Dec 2024 12:20:15 +0100 Subject: [PATCH 2/3] Balancer: Add Chain ID parse at startup --- src/infra/dex/balancer/dto.rs | 14 +++++++------- src/infra/dex/balancer/mod.rs | 11 ++++++----- src/run.rs | 4 +++- 3 files changed, 16 insertions(+), 13 deletions(-) diff --git a/src/infra/dex/balancer/dto.rs b/src/infra/dex/balancer/dto.rs index e16d601..2abc491 100644 --- a/src/infra/dex/balancer/dto.rs +++ b/src/infra/dex/balancer/dto.rs @@ -52,7 +52,7 @@ impl Query<'_> { order: &dex::Order, tokens: &auction::Tokens, slippage: &dex::Slippage, - chain_id: eth::ChainId, + chain: Chain, contract_address: eth::ContractAddress, query_batch_swap: bool, swap_deadline: Option, @@ -72,7 +72,7 @@ impl Query<'_> { sender: contract_address.0, slippage_percentage: slippage.as_factor().clone(), }, - chain: Chain::from_domain(chain_id)?, + chain, query_batch_swap, swap_amount: HumanReadableAmount::from_u256(&order.amount.get(), token_decimals), swap_type: SwapType::from_domain(order.side), @@ -166,9 +166,9 @@ struct CallDataInput { } /// Balancer SOR API supported chains. -#[derive(Serialize)] +#[derive(Serialize, Clone, Copy)] #[serde(rename_all = "SCREAMING_SNAKE_CASE")] -enum Chain { +pub(super) enum Chain { Arbitrum, Avalanche, Base, @@ -184,7 +184,7 @@ enum Chain { } impl Chain { - fn from_domain(chain_id: eth::ChainId) -> Result { + pub(crate) fn from_domain(chain_id: eth::ChainId) -> Result { match chain_id { eth::ChainId::Mainnet => Ok(Self::Mainnet), eth::ChainId::Gnosis => Ok(Self::Gnosis), @@ -386,7 +386,7 @@ mod tests { owner: H160::from_str("0x9008d19f58aabd9ed0d60971565aa8510560ab41").unwrap(), }; let slippage = dex::Slippage::one_percent(); - let chain_id = eth::ChainId::Mainnet; + let chain = Chain::Mainnet; let contract_address = eth::ContractAddress( H160::from_str("0x9008d19f58aabd9ed0d60971565aa8510560ab41").unwrap(), ); @@ -394,7 +394,7 @@ mod tests { &order, &tokens, &slippage, - chain_id, + chain, contract_address, false, Some(12345_u64), diff --git a/src/infra/dex/balancer/mod.rs b/src/infra/dex/balancer/mod.rs index c870949..d81d173 100644 --- a/src/infra/dex/balancer/mod.rs +++ b/src/infra/dex/balancer/mod.rs @@ -6,6 +6,7 @@ use { eth::{self, TokenAddress}, order, }, + infra::dex::balancer::dto::Chain, util, }, contracts::ethcontract::I256, @@ -29,7 +30,7 @@ pub struct Sor { endpoint: reqwest::Url, vault: vault::Vault, settlement: eth::ContractAddress, - chain_id: eth::ChainId, + chain_id: Chain, query_batch_swap: bool, } @@ -61,15 +62,15 @@ impl Sor { /// lost to time... See . const GAS_PER_SWAP: u64 = 88_892; - pub fn new(config: Config) -> Self { - Self { + pub fn new(config: Config) -> Result { + Ok(Self { client: super::Client::new(Default::default(), config.block_stream), endpoint: config.endpoint, vault: vault::Vault::new(config.vault), settlement: config.settlement, - chain_id: config.chain_id, + chain_id: Chain::from_domain(config.chain_id)?, query_batch_swap: config.query_batch_swap, - } + }) } pub async fn swap( diff --git a/src/run.rs b/src/run.rs index 3faf71b..66e7d83 100644 --- a/src/run.rs +++ b/src/run.rs @@ -41,7 +41,9 @@ async fn run_with(args: cli::Args, bind: Option>) { cli::Command::Balancer { config } => { let config = config::dex::balancer::file::load(&config).await; Solver::Dex(solver::Dex::new( - dex::Dex::Balancer(dex::balancer::Sor::new(config.sor)), + dex::Dex::Balancer( + dex::balancer::Sor::new(config.sor).expect("invalid Balancer configuration"), + ), config.base.clone(), )) } From 88358f3146208d07969a1e57167ef5f34be55526 Mon Sep 17 00:00:00 2001 From: Mateo Date: Mon, 2 Dec 2024 12:44:34 +0100 Subject: [PATCH 3/3] make chain id exhaustive --- src/infra/dex/balancer/dto.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/infra/dex/balancer/dto.rs b/src/infra/dex/balancer/dto.rs index 2abc491..b2e7caa 100644 --- a/src/infra/dex/balancer/dto.rs +++ b/src/infra/dex/balancer/dto.rs @@ -190,7 +190,7 @@ impl Chain { eth::ChainId::Gnosis => Ok(Self::Gnosis), eth::ChainId::ArbitrumOne => Ok(Self::Arbitrum), eth::ChainId::Base => Ok(Self::Base), - unsupported => Err(Error::UnsupportedChainId(unsupported)), + eth::ChainId::Goerli => Err(Error::UnsupportedChainId(chain_id)), } } }