feat: Support new transfer logic in all executors
TODO: - Fix failing tests - Remove permit2 from initialization of contracts
This commit is contained in:
@@ -8,25 +8,21 @@ import "./executors/UniswapV4Utils.sol";
|
||||
import {SafeCallback} from "@uniswap/v4-periphery/src/base/SafeCallback.sol";
|
||||
|
||||
contract TychoRouterSequentialSwapTest is TychoRouterTestSetup {
|
||||
function _getSequentialSwaps(bool permit2)
|
||||
internal
|
||||
view
|
||||
returns (bytes[] memory)
|
||||
{
|
||||
function _getSequentialSwaps() internal view returns (bytes[] memory) {
|
||||
// Trade 1 WETH for USDC through DAI with 2 swaps on Uniswap V2
|
||||
// 1 WETH -> DAI -> USDC
|
||||
// (univ2) (univ2)
|
||||
|
||||
TokenTransfer.TransferType transferType = permit2
|
||||
? TokenTransfer.TransferType.TRANSFER_PERMIT2_TO_PROTOCOL
|
||||
: TokenTransfer.TransferType.TRANSFER_FROM_TO_PROTOCOL;
|
||||
|
||||
bytes[] memory swaps = new bytes[](2);
|
||||
// WETH -> DAI
|
||||
swaps[0] = encodeSequentialSwap(
|
||||
address(usv2Executor),
|
||||
encodeUniswapV2Swap(
|
||||
WETH_ADDR, WETH_DAI_POOL, tychoRouterAddr, false, transferType
|
||||
WETH_ADDR,
|
||||
WETH_DAI_POOL,
|
||||
DAI_USDC_POOL, // receiver (direct to next pool)
|
||||
false,
|
||||
false // transfer to protocol from router
|
||||
)
|
||||
);
|
||||
|
||||
@@ -38,7 +34,7 @@ contract TychoRouterSequentialSwapTest is TychoRouterTestSetup {
|
||||
DAI_USDC_POOL,
|
||||
ALICE,
|
||||
true,
|
||||
TokenTransfer.TransferType.TRANSFER_TO_PROTOCOL
|
||||
false // transfer to protocol from router
|
||||
)
|
||||
);
|
||||
return swaps;
|
||||
@@ -55,7 +51,7 @@ contract TychoRouterSequentialSwapTest is TychoRouterTestSetup {
|
||||
bytes memory signature
|
||||
) = handlePermit2Approval(WETH_ADDR, tychoRouterAddr, amountIn);
|
||||
|
||||
bytes[] memory swaps = _getSequentialSwaps(true);
|
||||
bytes[] memory swaps = _getSequentialSwaps();
|
||||
tychoRouter.sequentialSwapPermit2(
|
||||
amountIn,
|
||||
WETH_ADDR,
|
||||
@@ -66,6 +62,8 @@ contract TychoRouterSequentialSwapTest is TychoRouterTestSetup {
|
||||
ALICE,
|
||||
permitSingle,
|
||||
signature,
|
||||
true,
|
||||
WETH_DAI_POOL,
|
||||
pleEncode(swaps)
|
||||
);
|
||||
|
||||
@@ -82,7 +80,7 @@ contract TychoRouterSequentialSwapTest is TychoRouterTestSetup {
|
||||
vm.startPrank(ALICE);
|
||||
IERC20(WETH_ADDR).approve(tychoRouterAddr, amountIn);
|
||||
|
||||
bytes[] memory swaps = _getSequentialSwaps(false);
|
||||
bytes[] memory swaps = _getSequentialSwaps();
|
||||
tychoRouter.sequentialSwap(
|
||||
amountIn,
|
||||
WETH_ADDR,
|
||||
@@ -91,6 +89,8 @@ contract TychoRouterSequentialSwapTest is TychoRouterTestSetup {
|
||||
false,
|
||||
false,
|
||||
ALICE,
|
||||
true,
|
||||
WETH_DAI_POOL,
|
||||
pleEncode(swaps)
|
||||
);
|
||||
|
||||
@@ -107,7 +107,7 @@ contract TychoRouterSequentialSwapTest is TychoRouterTestSetup {
|
||||
vm.startPrank(ALICE);
|
||||
IERC20(WETH_ADDR).approve(tychoRouterAddr, amountIn);
|
||||
|
||||
bytes[] memory swaps = _getSequentialSwaps(false);
|
||||
bytes[] memory swaps = _getSequentialSwaps();
|
||||
vm.expectRevert(TychoRouter__UndefinedMinAmountOut.selector);
|
||||
tychoRouter.sequentialSwap(
|
||||
amountIn,
|
||||
@@ -117,6 +117,8 @@ contract TychoRouterSequentialSwapTest is TychoRouterTestSetup {
|
||||
false,
|
||||
false,
|
||||
ALICE,
|
||||
true,
|
||||
WETH_DAI_POOL,
|
||||
pleEncode(swaps)
|
||||
);
|
||||
}
|
||||
@@ -129,7 +131,7 @@ contract TychoRouterSequentialSwapTest is TychoRouterTestSetup {
|
||||
vm.startPrank(ALICE);
|
||||
IERC20(WETH_ADDR).approve(tychoRouterAddr, amountIn - 1);
|
||||
|
||||
bytes[] memory swaps = _getSequentialSwaps(false);
|
||||
bytes[] memory swaps = _getSequentialSwaps();
|
||||
vm.expectRevert();
|
||||
tychoRouter.sequentialSwap(
|
||||
amountIn,
|
||||
@@ -139,6 +141,8 @@ contract TychoRouterSequentialSwapTest is TychoRouterTestSetup {
|
||||
false,
|
||||
false,
|
||||
ALICE,
|
||||
true,
|
||||
WETH_DAI_POOL,
|
||||
pleEncode(swaps)
|
||||
);
|
||||
}
|
||||
@@ -154,7 +158,7 @@ contract TychoRouterSequentialSwapTest is TychoRouterTestSetup {
|
||||
bytes memory signature
|
||||
) = handlePermit2Approval(WETH_ADDR, tychoRouterAddr, amountIn);
|
||||
|
||||
bytes[] memory swaps = _getSequentialSwaps(true);
|
||||
bytes[] memory swaps = _getSequentialSwaps();
|
||||
|
||||
uint256 minAmountOut = 3000 * 1e18;
|
||||
|
||||
@@ -175,6 +179,8 @@ contract TychoRouterSequentialSwapTest is TychoRouterTestSetup {
|
||||
ALICE,
|
||||
permitSingle,
|
||||
signature,
|
||||
true,
|
||||
WETH_DAI_POOL,
|
||||
pleEncode(swaps)
|
||||
);
|
||||
vm.stopPrank();
|
||||
@@ -202,24 +208,14 @@ contract TychoRouterSequentialSwapTest is TychoRouterTestSetup {
|
||||
swaps[0] = encodeSequentialSwap(
|
||||
address(usv2Executor),
|
||||
encodeUniswapV2Swap(
|
||||
WETH_ADDR,
|
||||
WETH_DAI_POOL,
|
||||
tychoRouterAddr,
|
||||
false,
|
||||
TokenTransfer.TransferType.TRANSFER_TO_PROTOCOL
|
||||
WETH_ADDR, WETH_DAI_POOL, tychoRouterAddr, false, true
|
||||
)
|
||||
);
|
||||
|
||||
// DAI -> USDC
|
||||
swaps[1] = encodeSequentialSwap(
|
||||
address(usv2Executor),
|
||||
encodeUniswapV2Swap(
|
||||
DAI_ADDR,
|
||||
DAI_USDC_POOL,
|
||||
ALICE,
|
||||
true,
|
||||
TokenTransfer.TransferType.TRANSFER_TO_PROTOCOL
|
||||
)
|
||||
encodeUniswapV2Swap(DAI_ADDR, DAI_USDC_POOL, ALICE, true, true)
|
||||
);
|
||||
|
||||
uint256 amountOut = tychoRouter.sequentialSwapPermit2{value: amountIn}(
|
||||
@@ -232,6 +228,8 @@ contract TychoRouterSequentialSwapTest is TychoRouterTestSetup {
|
||||
ALICE,
|
||||
emptyPermitSingle,
|
||||
"",
|
||||
true,
|
||||
tychoRouterAddr,
|
||||
pleEncode(swaps)
|
||||
);
|
||||
uint256 expectedAmount = 2005810530;
|
||||
@@ -262,11 +260,7 @@ contract TychoRouterSequentialSwapTest is TychoRouterTestSetup {
|
||||
swaps[0] = encodeSequentialSwap(
|
||||
address(usv2Executor),
|
||||
encodeUniswapV2Swap(
|
||||
USDC_ADDR,
|
||||
DAI_USDC_POOL,
|
||||
tychoRouterAddr,
|
||||
false,
|
||||
TokenTransfer.TransferType.TRANSFER_PERMIT2_TO_PROTOCOL
|
||||
USDC_ADDR, DAI_USDC_POOL, tychoRouterAddr, false, false
|
||||
)
|
||||
);
|
||||
|
||||
@@ -274,11 +268,7 @@ contract TychoRouterSequentialSwapTest is TychoRouterTestSetup {
|
||||
swaps[1] = encodeSequentialSwap(
|
||||
address(usv2Executor),
|
||||
encodeUniswapV2Swap(
|
||||
DAI_ADDR,
|
||||
WETH_DAI_POOL,
|
||||
tychoRouterAddr,
|
||||
true,
|
||||
TokenTransfer.TransferType.TRANSFER_TO_PROTOCOL
|
||||
DAI_ADDR, WETH_DAI_POOL, tychoRouterAddr, true, true
|
||||
)
|
||||
);
|
||||
|
||||
@@ -292,6 +282,8 @@ contract TychoRouterSequentialSwapTest is TychoRouterTestSetup {
|
||||
ALICE,
|
||||
permitSingle,
|
||||
signature,
|
||||
true,
|
||||
DAI_USDC_POOL,
|
||||
pleEncode(swaps)
|
||||
);
|
||||
|
||||
@@ -315,7 +307,8 @@ contract TychoRouterSequentialSwapTest is TychoRouterTestSetup {
|
||||
tychoRouterAddr,
|
||||
USDC_WETH_USV3,
|
||||
true,
|
||||
TokenTransfer.TransferType.TRANSFER_TO_PROTOCOL
|
||||
false,
|
||||
true
|
||||
);
|
||||
|
||||
bytes memory usdcWethV3Pool2OneZeroData = encodeUniswapV3Swap(
|
||||
@@ -324,7 +317,8 @@ contract TychoRouterSequentialSwapTest is TychoRouterTestSetup {
|
||||
tychoRouterAddr,
|
||||
USDC_WETH_USV3_2,
|
||||
false,
|
||||
TokenTransfer.TransferType.TRANSFER_TO_PROTOCOL
|
||||
false, // permit2 transferFrom to protocol
|
||||
true // transfer to protocol
|
||||
);
|
||||
|
||||
bytes[] memory swaps = new bytes[](2);
|
||||
|
||||
Reference in New Issue
Block a user