fix: balancer v2 encoder bug

This commit is contained in:
royvardhan
2025-01-28 19:49:08 +05:30
parent a4e405fb75
commit a6a624b740

View File

@@ -1,7 +1,7 @@
use std::str::FromStr; use std::str::FromStr;
use alloy::hex::decode; use alloy::hex::decode;
use alloy_primitives::Address; use alloy_primitives::{Address, Bytes as AlloyBytes};
use alloy_sol_types::SolValue; use alloy_sol_types::SolValue;
use tycho_core::Bytes; use tycho_core::Bytes;
@@ -96,12 +96,14 @@ impl SwapEncoder for BalancerV2SwapEncoder {
Address::from_str(&self.vault_address) Address::from_str(&self.vault_address)
.map_err(|_| EncodingError::FatalError("Invalid vault address".to_string()))?, .map_err(|_| EncodingError::FatalError("Invalid vault address".to_string()))?,
)?; )?;
// should we return gas estimation here too?? if there is an approval needed, gas will be
// higher. let component_id = AlloyBytes::from_str(&swap.component.id)
.map_err(|_| EncodingError::FatalError("Invalid component ID".to_string()))?;
let args = ( let args = (
bytes_to_address(&swap.token_in)?, bytes_to_address(&swap.token_in)?,
bytes_to_address(&swap.token_out)?, bytes_to_address(&swap.token_out)?,
swap.component.id, component_id,
bytes_to_address(&encoding_context.receiver)?, bytes_to_address(&encoding_context.receiver)?,
encoding_context.exact_out, encoding_context.exact_out,
approval_needed, approval_needed,
@@ -163,14 +165,14 @@ mod tests {
#[test] #[test]
fn test_encode_balancer_v2() { fn test_encode_balancer_v2() {
let balancer_pool = ProtocolComponent { let balancer_pool = ProtocolComponent {
id: String::from("0x88e6A0c2dDD26FEEb64F039a2c41296FcB3f5640"), id: String::from("0x5c6ee304399dbdb9c8ef030ab642b10820db8f56000200000000000000000014"),
protocol_system: String::from("vm:balancer_v2"), protocol_system: String::from("vm:balancer_v2"),
..Default::default() ..Default::default()
}; };
let swap = Swap { let swap = Swap {
component: balancer_pool, component: balancer_pool,
token_in: Bytes::from("0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"), // WETH token_in: Bytes::from("0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"), // WETH
token_out: Bytes::from("0x6b175474e89094c44da98b954eedeac495271d0f"), // DAI token_out: Bytes::from("0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174"), // BAL
split: 0f64, split: 0f64,
}; };
let encoding_context = EncodingContext { let encoding_context = EncodingContext {
@@ -190,9 +192,9 @@ mod tests {
// token in // token in
"c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", "c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
// token out // token out
"6b175474e89094c44da98b954eedeac495271d0f", "2791bca1f2de4661ed88a30c99a7a9449aa84174",
// pool id // pool id
"307838386536413063326444443236464545623634463033396132633431323936466342336635363430", "5c6ee304399dbdb9c8ef030ab642b10820db8f56000200000000000000000014",
// receiver // receiver
"0000000000000000000000000000000000000001", "0000000000000000000000000000000000000001",
// exact out // exact out