From c506f2c048a20d1ffd066d2903d2cc469fd167ed Mon Sep 17 00:00:00 2001 From: adrian Date: Wed, 20 Aug 2025 10:07:16 +0200 Subject: [PATCH] fix: in hashflow's encode_swap, fail early if router address is not present --- .../evm/swap_encoder/swap_encoders.rs | 39 ++++++++++--------- 1 file changed, 20 insertions(+), 19 deletions(-) diff --git a/src/encoding/evm/swap_encoder/swap_encoders.rs b/src/encoding/evm/swap_encoder/swap_encoders.rs index 330baec..d2d9bac 100644 --- a/src/encoding/evm/swap_encoder/swap_encoders.rs +++ b/src/encoding/evm/swap_encoder/swap_encoders.rs @@ -888,27 +888,28 @@ impl SwapEncoder for HashflowSwapEncoder { encoding_context: &EncodingContext, ) -> Result, EncodingError> { // Native tokens doesn't need approval, only ERC20 tokens do - let approval_needed: bool; - if let Some(router_address) = &encoding_context.router_address { - let tycho_router_address = bytes_to_address(router_address)?; - let hashflow_router_address = Address::from_str(&self.hashflow_router_address) - .map_err(|_| { - EncodingError::FatalError("Invalid hashflow router address address".to_string()) - })?; + let sender = encoding_context + .router_address + .clone() + .ok_or(EncodingError::FatalError( + "The router address is needed to perform a Hashflow swap".to_string(), + ))?; + let tycho_router_address = bytes_to_address(&sender)?; + let hashflow_router_address = + Address::from_str(&self.hashflow_router_address).map_err(|_| { + EncodingError::FatalError("Invalid hashflow router address address".to_string()) + })?; - // Native ETH doesn't need approval, only ERC20 tokens do - if swap.token_in == self.native_token_address { - approval_needed = false; - } else { - approval_needed = ProtocolApprovalsManager::new()?.approval_needed( - bytes_to_address(&swap.token_in)?, - tycho_router_address, - hashflow_router_address, - )?; - } + // Native ETH doesn't need approval, only ERC20 tokens do + let approval_needed = if swap.token_in == self.native_token_address { + false } else { - approval_needed = true; - } + ProtocolApprovalsManager::new()?.approval_needed( + bytes_to_address(&swap.token_in)?, + tycho_router_address, + hashflow_router_address, + )? + }; // Get quote let protocol_state = swap