feat: Support out transfer straight to the receiver

- The out transfer is now a responsibility of the Executors -> remove this from router methods
- Also adding a check that the receiver got the full amount out
- In encoding, if it is the last swap, pass the receiver as the trade receiver and not the router address (fix encoding tests)
- Fixed some solidity tests (after rebasing with a PR that is still open, I will fix them all)

TODO: Adapt curve and uniswap v4 to support this

--- don't change below this line ---
ENG-4315 Took 3 hours 7 minutes

Took 20 minutes

Took 59 seconds


Took 7 minutes
This commit is contained in:
Diana Carvalho
2025-04-15 12:26:28 +01:00
parent c10d5874f8
commit 9bcb58e5aa
5 changed files with 139 additions and 104 deletions

View File

@@ -21,11 +21,10 @@ contract TychoRouterSingleSwapTest is TychoRouterTestSetup {
bytes memory signature
) = handlePermit2Approval(WETH_ADDR, tychoRouterAddr, amountIn);
bytes memory protocolData = encodeUniswapV2Swap(
WETH_ADDR,
bytes memory protocolData =
encodeUniswapV2Swap(WETH_ADDR,
WETH_DAI_POOL,
tychoRouterAddr,
false,
ALICE, false,
TokenTransfer.TransferType.TRANSFER_PERMIT2_TO_PROTOCOL
);
@@ -62,11 +61,10 @@ contract TychoRouterSingleSwapTest is TychoRouterTestSetup {
// Approve the tokenIn to be transferred to the router
IERC20(WETH_ADDR).approve(address(tychoRouterAddr), amountIn);
bytes memory protocolData = encodeUniswapV2Swap(
WETH_ADDR,
bytes memory protocolData =
encodeUniswapV2Swap(WETH_ADDR,
WETH_DAI_POOL,
tychoRouterAddr,
false,
ALICE, false,
TokenTransfer.TransferType.TRANSFER_FROM_TO_PROTOCOL
);
@@ -103,11 +101,10 @@ contract TychoRouterSingleSwapTest is TychoRouterTestSetup {
vm.startPrank(ALICE);
IERC20(WETH_ADDR).approve(address(tychoRouterAddr), amountIn);
bytes memory protocolData = encodeUniswapV2Swap(
WETH_ADDR,
bytes memory protocolData =
encodeUniswapV2Swap(WETH_ADDR,
WETH_DAI_POOL,
tychoRouterAddr,
false,
ALICE, false,
TokenTransfer.TransferType.TRANSFER_FROM_TO_PROTOCOL
);
@@ -129,11 +126,10 @@ contract TychoRouterSingleSwapTest is TychoRouterTestSetup {
vm.startPrank(ALICE);
IERC20(WETH_ADDR).approve(address(tychoRouterAddr), amountIn - 1);
bytes memory protocolData = encodeUniswapV2Swap(
WETH_ADDR,
bytes memory protocolData =
encodeUniswapV2Swap(WETH_ADDR,
WETH_DAI_POOL,
tychoRouterAddr,
false,
ALICE, false,
TokenTransfer.TransferType.TRANSFER_FROM_TO_PROTOCOL
);
@@ -164,11 +160,10 @@ contract TychoRouterSingleSwapTest is TychoRouterTestSetup {
// Approve the tokenIn to be transferred to the router
IERC20(WETH_ADDR).approve(address(tychoRouterAddr), amountIn);
bytes memory protocolData = encodeUniswapV2Swap(
WETH_ADDR,
bytes memory protocolData =
encodeUniswapV2Swap(WETH_ADDR,
WETH_DAI_POOL,
tychoRouterAddr,
false,
ALICE, false,
TokenTransfer.TransferType.TRANSFER_FROM_TO_PROTOCOL
);
@@ -213,11 +208,10 @@ contract TychoRouterSingleSwapTest is TychoRouterTestSetup {
sigDeadline: 0
});
bytes memory protocolData = encodeUniswapV2Swap(
WETH_ADDR,
bytes memory protocolData =
encodeUniswapV2Swap(WETH_ADDR,
WETH_DAI_POOL,
tychoRouterAddr,
false,
ALICE, false,
TokenTransfer.TransferType.TRANSFER_TO_PROTOCOL
);