feat: Bring back TransferType and simplify encoding logic

Took 1 hour 53 minutes
This commit is contained in:
Diana Carvalho
2025-05-16 16:59:35 +01:00
parent 9b59b8b434
commit 38748925b3
6 changed files with 230 additions and 309 deletions

View File

@@ -66,7 +66,7 @@ impl SwapEncoder for UniswapV2SwapEncoder {
component_id,
bytes_to_address(&encoding_context.receiver)?,
zero_to_one,
encoding_context.transfer_needed,
(encoding_context.transfer as u8).to_be_bytes(),
);
Ok(args.abi_encode_packed())
@@ -129,8 +129,7 @@ impl SwapEncoder for UniswapV3SwapEncoder {
bytes_to_address(&encoding_context.receiver)?,
component_id,
zero_to_one,
encoding_context.transfer_from_needed,
encoding_context.transfer_needed,
(encoding_context.transfer as u8).to_be_bytes(),
);
Ok(args.abi_encode_packed())
@@ -207,8 +206,7 @@ impl SwapEncoder for UniswapV4SwapEncoder {
group_token_in_address,
group_token_out_address,
zero_to_one,
encoding_context.transfer_from_needed,
encoding_context.transfer_needed,
(encoding_context.transfer as u8).to_be_bytes(),
bytes_to_address(&encoding_context.receiver)?,
pool_params,
);
@@ -284,6 +282,7 @@ impl SwapEncoder for BalancerV2SwapEncoder {
component_id,
bytes_to_address(&encoding_context.receiver)?,
approval_needed,
(encoding_context.transfer as u8).to_be_bytes(),
);
Ok(args.abi_encode_packed())
}
@@ -345,8 +344,7 @@ impl SwapEncoder for EkuboSwapEncoder {
let mut encoded = vec![];
if encoding_context.group_token_in == swap.token_in {
encoded.extend((encoding_context.transfer_from_needed as u8).to_be_bytes());
encoded.extend((encoding_context.transfer_needed as u8).to_be_bytes());
encoded.extend((encoding_context.transfer as u8).to_be_bytes());
encoded.extend(bytes_to_address(&encoding_context.receiver)?);
encoded.extend(bytes_to_address(&swap.token_in)?);
}
@@ -578,6 +576,7 @@ impl SwapEncoder for CurveSwapEncoder {
j.to_be_bytes::<1>(),
approval_needed,
bytes_to_address(&encoding_context.receiver)?,
(encoding_context.transfer as u8).to_be_bytes(),
);
Ok(args.abi_encode_packed())
@@ -621,7 +620,7 @@ impl SwapEncoder for MaverickV2SwapEncoder {
bytes_to_address(&swap.token_in)?,
component_id,
bytes_to_address(&encoding_context.receiver)?,
encoding_context.transfer_needed,
(encoding_context.transfer as u8).to_be_bytes(),
);
Ok(args.abi_encode_packed())
}
@@ -646,7 +645,7 @@ mod tests {
};
use super::*;
use crate::encoding::evm::utils::write_calldata_to_file;
use crate::encoding::{evm::utils::write_calldata_to_file, models::TransferType};
mod uniswap_v2 {
use super::*;
@@ -671,8 +670,7 @@ mod tests {
router_address: Some(Bytes::zero(20)),
group_token_in: token_in.clone(),
group_token_out: token_out.clone(),
transfer_needed: true,
transfer_from_needed: false,
transfer: TransferType::Transfer,
};
let encoder = UniswapV2SwapEncoder::new(
String::from("0x543778987b293C7E8Cf0722BB2e935ba6f4068D4"),
@@ -695,7 +693,7 @@ mod tests {
"1d96f2f6bef1202e4ce1ff6dad0c2cb002861d3e",
// zero for one
"00",
// transfer true
// transfer type Transfer
"01",
))
);
@@ -731,8 +729,7 @@ mod tests {
router_address: Some(Bytes::zero(20)),
group_token_in: token_in.clone(),
group_token_out: token_out.clone(),
transfer_needed: true,
transfer_from_needed: false,
transfer: TransferType::Transfer,
};
let encoder = UniswapV3SwapEncoder::new(
String::from("0x543778987b293C7E8Cf0722BB2e935ba6f4068D4"),
@@ -759,9 +756,7 @@ mod tests {
"88e6a0c2ddd26feeb64f039a2c41296fcb3f5640",
// zero for one
"00",
// transfer from false
"00",
// transfer true
// transfer type Transfer
"01",
))
);
@@ -796,8 +791,7 @@ mod tests {
router_address: Some(Bytes::zero(20)),
group_token_in: token_in.clone(),
group_token_out: token_out.clone(),
transfer_needed: false,
transfer_from_needed: false,
transfer: TransferType::None,
};
let encoder = BalancerV2SwapEncoder::new(
String::from("0x543778987b293C7E8Cf0722BB2e935ba6f4068D4"),
@@ -825,7 +819,9 @@ mod tests {
// receiver
"1d96f2f6bef1202e4ce1ff6dad0c2cb002861d3e",
// approval needed
"01"
"01",
// transfer type None
"02"
))
);
write_calldata_to_file("test_encode_balancer_v2", hex_swap.as_str());
@@ -869,8 +865,7 @@ mod tests {
group_token_in: token_in.clone(),
group_token_out: token_out.clone(),
transfer_needed: true,
transfer_from_needed: false,
transfer: TransferType::Transfer,
};
let encoder = UniswapV4SwapEncoder::new(
String::from("0xF62849F9A0B5Bf2913b396098F7c7019b51A820a"),
@@ -892,9 +887,7 @@ mod tests {
"dac17f958d2ee523a2206206994597c13d831ec7",
// zero for one
"01",
// transfer from false
"00",
// transfer true
// transfer type Transfer
"01",
// receiver
"cd09f75e2bf2a4d11f3ab23f1389fcc1621c0cc2",
@@ -943,8 +936,7 @@ mod tests {
group_token_in: group_token_in.clone(),
// Token out is the same as the group token out
group_token_out: token_out.clone(),
transfer_needed: true,
transfer_from_needed: false,
transfer: TransferType::Transfer,
};
let encoder = UniswapV4SwapEncoder::new(
@@ -987,8 +979,7 @@ mod tests {
router_address: Some(router_address.clone()),
group_token_in: usde_address.clone(),
group_token_out: wbtc_address.clone(),
transfer_needed: true,
transfer_from_needed: false,
transfer: TransferType::Transfer,
};
// Setup - First sequence: USDE -> USDT
@@ -1066,9 +1057,7 @@ mod tests {
"2260fac5e5542a773aa44fbcfedf7c193bc2c599",
// zero for one
"01",
// transfer from false
"00",
// transfer true
// transfer type Transfer
"01",
// receiver
"cd09f75e2bf2a4d11f3ab23f1389fcc1621c0cc2",
@@ -1125,8 +1114,7 @@ mod tests {
group_token_out: token_out.clone(),
exact_out: false,
router_address: Some(Bytes::default()),
transfer_needed: true,
transfer_from_needed: false,
transfer: TransferType::Transfer,
};
let encoder =
@@ -1142,9 +1130,7 @@ mod tests {
assert_eq!(
hex_swap,
concat!(
// transfer from false
"00",
// transfer true
// transfer type Transfer
"01",
// receiver
"ca4f73fe97d0b987a0d12b39bbd562c779bab6f6",
@@ -1174,8 +1160,7 @@ mod tests {
group_token_out: group_token_out.clone(),
exact_out: false,
router_address: Some(Bytes::default()),
transfer_needed: true,
transfer_from_needed: false,
transfer: TransferType::Transfer,
};
let first_swap = Swap {
@@ -1225,9 +1210,7 @@ mod tests {
combined_hex,
// transfer type
concat!(
// transfer from false
"00",
// transfer true
// transfer type Transfer
"01",
// receiver
"ca4f73fe97d0b987a0d12b39bbd562c779bab6f6",
@@ -1373,8 +1356,7 @@ mod tests {
router_address: None,
group_token_in: token_in.clone(),
group_token_out: token_out.clone(),
transfer_needed: false,
transfer_from_needed: false,
transfer: TransferType::None,
};
let encoder = CurveSwapEncoder::new(
String::from("0x5615dEB798BB3E4dFa0139dFa1b3D433Cc23b72f"),
@@ -1405,7 +1387,9 @@ mod tests {
// approval needed
"01",
// receiver,
"1d96f2f6bef1202e4ce1ff6dad0c2cb002861d3e"
"1d96f2f6bef1202e4ce1ff6dad0c2cb002861d3e",
// transfer type None
"02",
))
);
}
@@ -1442,8 +1426,7 @@ mod tests {
router_address: None,
group_token_in: token_in.clone(),
group_token_out: token_out.clone(),
transfer_needed: false,
transfer_from_needed: false,
transfer: TransferType::None,
};
let encoder = CurveSwapEncoder::new(
String::from("0x5615dEB798BB3E4dFa0139dFa1b3D433Cc23b72f"),
@@ -1474,7 +1457,9 @@ mod tests {
// approval needed
"01",
// receiver
"1d96f2f6bef1202e4ce1ff6dad0c2cb002861d3e"
"1d96f2f6bef1202e4ce1ff6dad0c2cb002861d3e",
// transfer type None
"02",
))
);
}
@@ -1512,8 +1497,7 @@ mod tests {
router_address: None,
group_token_in: token_in.clone(),
group_token_out: token_out.clone(),
transfer_needed: false,
transfer_from_needed: false,
transfer: TransferType::None,
};
let encoder = CurveSwapEncoder::new(
String::from("0x5615dEB798BB3E4dFa0139dFa1b3D433Cc23b72f"),
@@ -1553,7 +1537,9 @@ mod tests {
// approval needed
"01",
// receiver
"1d96f2f6bef1202e4ce1ff6dad0c2cb002861d3e"
"1d96f2f6bef1202e4ce1ff6dad0c2cb002861d3e",
// transfer type None
"02",
))
);
}
@@ -1582,8 +1568,7 @@ mod tests {
router_address: Some(Bytes::default()),
group_token_in: token_in.clone(),
group_token_out: token_out.clone(),
transfer_needed: true,
transfer_from_needed: false,
transfer: TransferType::Transfer,
};
let encoder = MaverickV2SwapEncoder::new(
String::from("0x543778987b293C7E8Cf0722BB2e935ba6f4068D4"),