chore: renamings for clarity
- Also added a check for length in the Curve executor.
This commit is contained in:
committed by
Diana Carvalho
parent
3a73fef933
commit
30dc3f7682
@@ -58,9 +58,6 @@ import {IPoolManager} from "@uniswap/v4-core/src/interfaces/IPoolManager.sol";
|
|||||||
error TychoRouter__AddressZero();
|
error TychoRouter__AddressZero();
|
||||||
error TychoRouter__EmptySwaps();
|
error TychoRouter__EmptySwaps();
|
||||||
error TychoRouter__NegativeSlippage(uint256 amount, uint256 minAmount);
|
error TychoRouter__NegativeSlippage(uint256 amount, uint256 minAmount);
|
||||||
error TychoRouter__AmountInDiffersFromConsumed(
|
|
||||||
uint256 amountIn, uint256 amountConsumed
|
|
||||||
);
|
|
||||||
error TychoRouter__MessageValueMismatch(uint256 value, uint256 amount);
|
error TychoRouter__MessageValueMismatch(uint256 value, uint256 amount);
|
||||||
error TychoRouter__InvalidDataLength();
|
error TychoRouter__InvalidDataLength();
|
||||||
error TychoRouter__UndefinedMinAmountOut();
|
error TychoRouter__UndefinedMinAmountOut();
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
|
|||||||
import "./TokenTransfer.sol";
|
import "./TokenTransfer.sol";
|
||||||
|
|
||||||
error CurveExecutor__AddressZero();
|
error CurveExecutor__AddressZero();
|
||||||
|
error CurveExecutor__InvalidDataLength();
|
||||||
|
|
||||||
interface CryptoPool {
|
interface CryptoPool {
|
||||||
// slither-disable-next-line naming-convention
|
// slither-disable-next-line naming-convention
|
||||||
@@ -53,6 +54,8 @@ contract CurveExecutor is IExecutor, TokenTransfer {
|
|||||||
payable
|
payable
|
||||||
returns (uint256)
|
returns (uint256)
|
||||||
{
|
{
|
||||||
|
if (data.length != 65) revert CurveExecutor__InvalidDataLength();
|
||||||
|
|
||||||
(
|
(
|
||||||
address tokenIn,
|
address tokenIn,
|
||||||
address tokenOut,
|
address tokenOut,
|
||||||
|
|||||||
@@ -14,15 +14,15 @@ contract TokenTransfer {
|
|||||||
|
|
||||||
enum TransferType {
|
enum TransferType {
|
||||||
// Assume funds are in the TychoRouter - transfer into the pool
|
// Assume funds are in the TychoRouter - transfer into the pool
|
||||||
TRANSFER,
|
TRANSFER_TO_PROTOCOL,
|
||||||
// Assume funds are in msg.sender's wallet - transferFrom into the pool
|
// Assume funds are in msg.sender's wallet - transferFrom into the pool
|
||||||
TRANSFER_FROM,
|
TRANSFER_FROM_TO_PROTOCOL,
|
||||||
// Assume funds are in msg.sender's wallet - permit2TransferFrom into the pool
|
// Assume funds are in msg.sender's wallet - permit2TransferFrom into the pool
|
||||||
TRANSFER_PERMIT2,
|
TRANSFER_PERMIT2_TO_PROTOCOL,
|
||||||
// Assume funds are in msg.sender's wallet - but the pool requires it to be
|
// Assume funds are in msg.sender's wallet - but the pool requires it to be
|
||||||
// in the router contract when calling swap - transferFrom into the router
|
// in the router contract when calling swap - transferFrom into the router
|
||||||
// contract
|
// contract
|
||||||
TRANSFER_TO_ROUTER,
|
TRANSFER_FROM_TO_ROUTER,
|
||||||
// Assume funds are in msg.sender's wallet - but the pool requires it to be
|
// Assume funds are in msg.sender's wallet - but the pool requires it to be
|
||||||
// in the router contract when calling swap - transferFrom into the router
|
// in the router contract when calling swap - transferFrom into the router
|
||||||
// contract using permit2
|
// contract using permit2
|
||||||
@@ -45,19 +45,19 @@ contract TokenTransfer {
|
|||||||
uint256 amount,
|
uint256 amount,
|
||||||
TransferType transferType
|
TransferType transferType
|
||||||
) internal {
|
) internal {
|
||||||
if (transferType == TransferType.TRANSFER) {
|
if (transferType == TransferType.TRANSFER_TO_PROTOCOL) {
|
||||||
if (tokenIn == address(0)) {
|
if (tokenIn == address(0)) {
|
||||||
payable(receiver).transfer(amount);
|
payable(receiver).transfer(amount);
|
||||||
} else {
|
} else {
|
||||||
IERC20(tokenIn).safeTransfer(receiver, amount);
|
IERC20(tokenIn).safeTransfer(receiver, amount);
|
||||||
}
|
}
|
||||||
} else if (transferType == TransferType.TRANSFER_FROM) {
|
} else if (transferType == TransferType.TRANSFER_FROM_TO_PROTOCOL) {
|
||||||
// slither-disable-next-line arbitrary-send-erc20
|
// slither-disable-next-line arbitrary-send-erc20
|
||||||
IERC20(tokenIn).safeTransferFrom(sender, receiver, amount);
|
IERC20(tokenIn).safeTransferFrom(sender, receiver, amount);
|
||||||
} else if (transferType == TransferType.TRANSFER_PERMIT2) {
|
} else if (transferType == TransferType.TRANSFER_PERMIT2_TO_PROTOCOL) {
|
||||||
// Permit2.permit is already called from the TychoRouter
|
// Permit2.permit is already called from the TychoRouter
|
||||||
permit2.transferFrom(sender, receiver, uint160(amount), tokenIn);
|
permit2.transferFrom(sender, receiver, uint160(amount), tokenIn);
|
||||||
} else if (transferType == TransferType.TRANSFER_TO_ROUTER) {
|
} else if (transferType == TransferType.TRANSFER_FROM_TO_ROUTER) {
|
||||||
// slither-disable-next-line arbitrary-send-erc20
|
// slither-disable-next-line arbitrary-send-erc20
|
||||||
IERC20(tokenIn).safeTransferFrom(sender, address(this), amount);
|
IERC20(tokenIn).safeTransferFrom(sender, address(this), amount);
|
||||||
} else if (transferType == TransferType.TRANSFER_PERMIT2_TO_ROUTER) {
|
} else if (transferType == TransferType.TRANSFER_PERMIT2_TO_ROUTER) {
|
||||||
|
|||||||
@@ -18,8 +18,8 @@ contract TychoRouterSequentialSwapTest is TychoRouterTestSetup {
|
|||||||
// (univ2) (univ2)
|
// (univ2) (univ2)
|
||||||
|
|
||||||
TokenTransfer.TransferType transferType = permit2
|
TokenTransfer.TransferType transferType = permit2
|
||||||
? TokenTransfer.TransferType.TRANSFER_PERMIT2
|
? TokenTransfer.TransferType.TRANSFER_PERMIT2_TO_PROTOCOL
|
||||||
: TokenTransfer.TransferType.TRANSFER_FROM;
|
: TokenTransfer.TransferType.TRANSFER_FROM_TO_PROTOCOL;
|
||||||
|
|
||||||
bytes[] memory swaps = new bytes[](2);
|
bytes[] memory swaps = new bytes[](2);
|
||||||
// WETH -> DAI
|
// WETH -> DAI
|
||||||
@@ -38,7 +38,7 @@ contract TychoRouterSequentialSwapTest is TychoRouterTestSetup {
|
|||||||
DAI_USDC_POOL,
|
DAI_USDC_POOL,
|
||||||
tychoRouterAddr,
|
tychoRouterAddr,
|
||||||
true,
|
true,
|
||||||
TokenTransfer.TransferType.TRANSFER
|
TokenTransfer.TransferType.TRANSFER_TO_PROTOCOL
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
return swaps;
|
return swaps;
|
||||||
@@ -222,7 +222,7 @@ contract TychoRouterSequentialSwapTest is TychoRouterTestSetup {
|
|||||||
WETH_DAI_POOL,
|
WETH_DAI_POOL,
|
||||||
tychoRouterAddr,
|
tychoRouterAddr,
|
||||||
false,
|
false,
|
||||||
TokenTransfer.TransferType.TRANSFER
|
TokenTransfer.TransferType.TRANSFER_TO_PROTOCOL
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -234,7 +234,7 @@ contract TychoRouterSequentialSwapTest is TychoRouterTestSetup {
|
|||||||
DAI_USDC_POOL,
|
DAI_USDC_POOL,
|
||||||
tychoRouterAddr,
|
tychoRouterAddr,
|
||||||
true,
|
true,
|
||||||
TokenTransfer.TransferType.TRANSFER
|
TokenTransfer.TransferType.TRANSFER_TO_PROTOCOL
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -282,7 +282,7 @@ contract TychoRouterSequentialSwapTest is TychoRouterTestSetup {
|
|||||||
DAI_USDC_POOL,
|
DAI_USDC_POOL,
|
||||||
tychoRouterAddr,
|
tychoRouterAddr,
|
||||||
false,
|
false,
|
||||||
TokenTransfer.TransferType.TRANSFER_PERMIT2
|
TokenTransfer.TransferType.TRANSFER_PERMIT2_TO_PROTOCOL
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -294,7 +294,7 @@ contract TychoRouterSequentialSwapTest is TychoRouterTestSetup {
|
|||||||
WETH_DAI_POOL,
|
WETH_DAI_POOL,
|
||||||
tychoRouterAddr,
|
tychoRouterAddr,
|
||||||
true,
|
true,
|
||||||
TokenTransfer.TransferType.TRANSFER
|
TokenTransfer.TransferType.TRANSFER_TO_PROTOCOL
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -331,7 +331,7 @@ contract TychoRouterSequentialSwapTest is TychoRouterTestSetup {
|
|||||||
tychoRouterAddr,
|
tychoRouterAddr,
|
||||||
USDC_WETH_USV3,
|
USDC_WETH_USV3,
|
||||||
true,
|
true,
|
||||||
TokenTransfer.TransferType.TRANSFER
|
TokenTransfer.TransferType.TRANSFER_TO_PROTOCOL
|
||||||
);
|
);
|
||||||
|
|
||||||
bytes memory usdcWethV3Pool2OneZeroData = encodeUniswapV3Swap(
|
bytes memory usdcWethV3Pool2OneZeroData = encodeUniswapV3Swap(
|
||||||
@@ -340,7 +340,7 @@ contract TychoRouterSequentialSwapTest is TychoRouterTestSetup {
|
|||||||
tychoRouterAddr,
|
tychoRouterAddr,
|
||||||
USDC_WETH_USV3_2,
|
USDC_WETH_USV3_2,
|
||||||
false,
|
false,
|
||||||
TokenTransfer.TransferType.TRANSFER
|
TokenTransfer.TransferType.TRANSFER_TO_PROTOCOL
|
||||||
);
|
);
|
||||||
|
|
||||||
bytes[] memory swaps = new bytes[](2);
|
bytes[] memory swaps = new bytes[](2);
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ contract TychoRouterSingleSwapTest is TychoRouterTestSetup {
|
|||||||
WETH_DAI_POOL,
|
WETH_DAI_POOL,
|
||||||
tychoRouterAddr,
|
tychoRouterAddr,
|
||||||
false,
|
false,
|
||||||
TokenTransfer.TransferType.TRANSFER_PERMIT2
|
TokenTransfer.TransferType.TRANSFER_PERMIT2_TO_PROTOCOL
|
||||||
);
|
);
|
||||||
|
|
||||||
bytes memory swap =
|
bytes memory swap =
|
||||||
@@ -67,7 +67,7 @@ contract TychoRouterSingleSwapTest is TychoRouterTestSetup {
|
|||||||
WETH_DAI_POOL,
|
WETH_DAI_POOL,
|
||||||
tychoRouterAddr,
|
tychoRouterAddr,
|
||||||
false,
|
false,
|
||||||
TokenTransfer.TransferType.TRANSFER_FROM
|
TokenTransfer.TransferType.TRANSFER_FROM_TO_PROTOCOL
|
||||||
);
|
);
|
||||||
|
|
||||||
bytes memory swap =
|
bytes memory swap =
|
||||||
@@ -108,7 +108,7 @@ contract TychoRouterSingleSwapTest is TychoRouterTestSetup {
|
|||||||
WETH_DAI_POOL,
|
WETH_DAI_POOL,
|
||||||
tychoRouterAddr,
|
tychoRouterAddr,
|
||||||
false,
|
false,
|
||||||
TokenTransfer.TransferType.TRANSFER_FROM
|
TokenTransfer.TransferType.TRANSFER_FROM_TO_PROTOCOL
|
||||||
);
|
);
|
||||||
|
|
||||||
bytes memory swap =
|
bytes memory swap =
|
||||||
@@ -134,7 +134,7 @@ contract TychoRouterSingleSwapTest is TychoRouterTestSetup {
|
|||||||
WETH_DAI_POOL,
|
WETH_DAI_POOL,
|
||||||
tychoRouterAddr,
|
tychoRouterAddr,
|
||||||
false,
|
false,
|
||||||
TokenTransfer.TransferType.TRANSFER_FROM
|
TokenTransfer.TransferType.TRANSFER_FROM_TO_PROTOCOL
|
||||||
);
|
);
|
||||||
|
|
||||||
bytes memory swap =
|
bytes memory swap =
|
||||||
@@ -169,7 +169,7 @@ contract TychoRouterSingleSwapTest is TychoRouterTestSetup {
|
|||||||
WETH_DAI_POOL,
|
WETH_DAI_POOL,
|
||||||
tychoRouterAddr,
|
tychoRouterAddr,
|
||||||
false,
|
false,
|
||||||
TokenTransfer.TransferType.TRANSFER_FROM
|
TokenTransfer.TransferType.TRANSFER_FROM_TO_PROTOCOL
|
||||||
);
|
);
|
||||||
|
|
||||||
bytes memory swap =
|
bytes memory swap =
|
||||||
@@ -218,7 +218,7 @@ contract TychoRouterSingleSwapTest is TychoRouterTestSetup {
|
|||||||
WETH_DAI_POOL,
|
WETH_DAI_POOL,
|
||||||
tychoRouterAddr,
|
tychoRouterAddr,
|
||||||
false,
|
false,
|
||||||
TokenTransfer.TransferType.TRANSFER
|
TokenTransfer.TransferType.TRANSFER_TO_PROTOCOL
|
||||||
);
|
);
|
||||||
|
|
||||||
bytes memory swap =
|
bytes memory swap =
|
||||||
@@ -261,7 +261,7 @@ contract TychoRouterSingleSwapTest is TychoRouterTestSetup {
|
|||||||
WETH_DAI_POOL,
|
WETH_DAI_POOL,
|
||||||
tychoRouterAddr,
|
tychoRouterAddr,
|
||||||
true,
|
true,
|
||||||
TokenTransfer.TransferType.TRANSFER_PERMIT2
|
TokenTransfer.TransferType.TRANSFER_PERMIT2_TO_PROTOCOL
|
||||||
);
|
);
|
||||||
|
|
||||||
bytes memory swap =
|
bytes memory swap =
|
||||||
|
|||||||
@@ -21,8 +21,8 @@ contract TychoRouterSplitSwapTest is TychoRouterTestSetup {
|
|||||||
bytes[] memory swaps = new bytes[](4);
|
bytes[] memory swaps = new bytes[](4);
|
||||||
|
|
||||||
TokenTransfer.TransferType inTransferType = permit2
|
TokenTransfer.TransferType inTransferType = permit2
|
||||||
? TokenTransfer.TransferType.TRANSFER_PERMIT2
|
? TokenTransfer.TransferType.TRANSFER_PERMIT2_TO_PROTOCOL
|
||||||
: TokenTransfer.TransferType.TRANSFER_FROM;
|
: TokenTransfer.TransferType.TRANSFER_FROM_TO_PROTOCOL;
|
||||||
|
|
||||||
// WETH -> WBTC (60%)
|
// WETH -> WBTC (60%)
|
||||||
swaps[0] = encodeSplitSwap(
|
swaps[0] = encodeSplitSwap(
|
||||||
@@ -49,7 +49,7 @@ contract TychoRouterSplitSwapTest is TychoRouterTestSetup {
|
|||||||
USDC_WBTC_POOL,
|
USDC_WBTC_POOL,
|
||||||
tychoRouterAddr,
|
tychoRouterAddr,
|
||||||
true,
|
true,
|
||||||
TokenTransfer.TransferType.TRANSFER
|
TokenTransfer.TransferType.TRANSFER_TO_PROTOCOL
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
// WETH -> DAI
|
// WETH -> DAI
|
||||||
@@ -74,7 +74,7 @@ contract TychoRouterSplitSwapTest is TychoRouterTestSetup {
|
|||||||
DAI_USDC_POOL,
|
DAI_USDC_POOL,
|
||||||
tychoRouterAddr,
|
tychoRouterAddr,
|
||||||
true,
|
true,
|
||||||
TokenTransfer.TransferType.TRANSFER
|
TokenTransfer.TransferType.TRANSFER_TO_PROTOCOL
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -270,7 +270,7 @@ contract TychoRouterSplitSwapTest is TychoRouterTestSetup {
|
|||||||
WETH_DAI_POOL,
|
WETH_DAI_POOL,
|
||||||
tychoRouterAddr,
|
tychoRouterAddr,
|
||||||
false,
|
false,
|
||||||
TokenTransfer.TransferType.TRANSFER
|
TokenTransfer.TransferType.TRANSFER_TO_PROTOCOL
|
||||||
);
|
);
|
||||||
|
|
||||||
bytes memory swap = encodeSplitSwap(
|
bytes memory swap = encodeSplitSwap(
|
||||||
@@ -319,7 +319,7 @@ contract TychoRouterSplitSwapTest is TychoRouterTestSetup {
|
|||||||
WETH_DAI_POOL,
|
WETH_DAI_POOL,
|
||||||
tychoRouterAddr,
|
tychoRouterAddr,
|
||||||
true,
|
true,
|
||||||
TokenTransfer.TransferType.TRANSFER_PERMIT2
|
TokenTransfer.TransferType.TRANSFER_PERMIT2_TO_PROTOCOL
|
||||||
);
|
);
|
||||||
|
|
||||||
bytes memory swap = encodeSplitSwap(
|
bytes memory swap = encodeSplitSwap(
|
||||||
@@ -370,7 +370,7 @@ contract TychoRouterSplitSwapTest is TychoRouterTestSetup {
|
|||||||
tychoRouterAddr,
|
tychoRouterAddr,
|
||||||
DAI_WETH_USV3,
|
DAI_WETH_USV3,
|
||||||
zeroForOne,
|
zeroForOne,
|
||||||
TokenTransfer.TransferType.TRANSFER_PERMIT2
|
TokenTransfer.TransferType.TRANSFER_PERMIT2_TO_PROTOCOL
|
||||||
);
|
);
|
||||||
bytes memory swap = encodeSplitSwap(
|
bytes memory swap = encodeSplitSwap(
|
||||||
uint8(0), uint8(1), uint24(0), address(usv3Executor), protocolData
|
uint8(0), uint8(1), uint24(0), address(usv3Executor), protocolData
|
||||||
@@ -511,7 +511,7 @@ contract TychoRouterSplitSwapTest is TychoRouterTestSetup {
|
|||||||
tychoRouterAddr,
|
tychoRouterAddr,
|
||||||
USDC_WETH_USV3,
|
USDC_WETH_USV3,
|
||||||
true,
|
true,
|
||||||
TokenTransfer.TransferType.TRANSFER_FROM
|
TokenTransfer.TransferType.TRANSFER_FROM_TO_PROTOCOL
|
||||||
);
|
);
|
||||||
|
|
||||||
bytes memory usdcWethV3Pool2ZeroOneData = encodeUniswapV3Swap(
|
bytes memory usdcWethV3Pool2ZeroOneData = encodeUniswapV3Swap(
|
||||||
@@ -520,7 +520,7 @@ contract TychoRouterSplitSwapTest is TychoRouterTestSetup {
|
|||||||
tychoRouterAddr,
|
tychoRouterAddr,
|
||||||
USDC_WETH_USV3_2,
|
USDC_WETH_USV3_2,
|
||||||
true,
|
true,
|
||||||
TokenTransfer.TransferType.TRANSFER_FROM
|
TokenTransfer.TransferType.TRANSFER_FROM_TO_PROTOCOL
|
||||||
);
|
);
|
||||||
|
|
||||||
bytes memory wethUsdcV2OneZeroData = encodeUniswapV2Swap(
|
bytes memory wethUsdcV2OneZeroData = encodeUniswapV2Swap(
|
||||||
@@ -528,7 +528,7 @@ contract TychoRouterSplitSwapTest is TychoRouterTestSetup {
|
|||||||
USDC_WETH_USV2,
|
USDC_WETH_USV2,
|
||||||
tychoRouterAddr,
|
tychoRouterAddr,
|
||||||
false,
|
false,
|
||||||
TokenTransfer.TransferType.TRANSFER
|
TokenTransfer.TransferType.TRANSFER_TO_PROTOCOL
|
||||||
);
|
);
|
||||||
|
|
||||||
bytes[] memory swaps = new bytes[](3);
|
bytes[] memory swaps = new bytes[](3);
|
||||||
@@ -578,7 +578,7 @@ contract TychoRouterSplitSwapTest is TychoRouterTestSetup {
|
|||||||
USDC_WETH_USV2,
|
USDC_WETH_USV2,
|
||||||
tychoRouterAddr,
|
tychoRouterAddr,
|
||||||
true,
|
true,
|
||||||
TokenTransfer.TransferType.TRANSFER
|
TokenTransfer.TransferType.TRANSFER_TO_PROTOCOL
|
||||||
);
|
);
|
||||||
|
|
||||||
bytes memory usdcWethV3Pool1OneZeroData = encodeUniswapV3Swap(
|
bytes memory usdcWethV3Pool1OneZeroData = encodeUniswapV3Swap(
|
||||||
@@ -587,7 +587,7 @@ contract TychoRouterSplitSwapTest is TychoRouterTestSetup {
|
|||||||
tychoRouterAddr,
|
tychoRouterAddr,
|
||||||
USDC_WETH_USV3,
|
USDC_WETH_USV3,
|
||||||
false,
|
false,
|
||||||
TokenTransfer.TransferType.TRANSFER
|
TokenTransfer.TransferType.TRANSFER_TO_PROTOCOL
|
||||||
);
|
);
|
||||||
|
|
||||||
bytes memory usdcWethV3Pool2OneZeroData = encodeUniswapV3Swap(
|
bytes memory usdcWethV3Pool2OneZeroData = encodeUniswapV3Swap(
|
||||||
@@ -596,7 +596,7 @@ contract TychoRouterSplitSwapTest is TychoRouterTestSetup {
|
|||||||
tychoRouterAddr,
|
tychoRouterAddr,
|
||||||
USDC_WETH_USV3_2,
|
USDC_WETH_USV3_2,
|
||||||
false,
|
false,
|
||||||
TokenTransfer.TransferType.TRANSFER
|
TokenTransfer.TransferType.TRANSFER_TO_PROTOCOL
|
||||||
);
|
);
|
||||||
|
|
||||||
bytes[] memory swaps = new bytes[](3);
|
bytes[] memory swaps = new bytes[](3);
|
||||||
@@ -639,7 +639,7 @@ contract TychoRouterSplitSwapTest is TychoRouterTestSetup {
|
|||||||
USDC_MAG7_POOL,
|
USDC_MAG7_POOL,
|
||||||
tychoRouterAddr,
|
tychoRouterAddr,
|
||||||
true,
|
true,
|
||||||
TokenTransfer.TransferType.TRANSFER_FROM
|
TokenTransfer.TransferType.TRANSFER_FROM_TO_PROTOCOL
|
||||||
);
|
);
|
||||||
|
|
||||||
bytes memory swap = encodeSplitSwap(
|
bytes memory swap = encodeSplitSwap(
|
||||||
|
|||||||
@@ -84,7 +84,7 @@ contract UniswapV2ExecutorTest is Test, Constants, Permit2TestHelper {
|
|||||||
address(2),
|
address(2),
|
||||||
address(3),
|
address(3),
|
||||||
false,
|
false,
|
||||||
TokenTransfer.TransferType.TRANSFER
|
TokenTransfer.TransferType.TRANSFER_TO_PROTOCOL
|
||||||
);
|
);
|
||||||
|
|
||||||
(
|
(
|
||||||
@@ -100,7 +100,8 @@ contract UniswapV2ExecutorTest is Test, Constants, Permit2TestHelper {
|
|||||||
assertEq(receiver, address(3));
|
assertEq(receiver, address(3));
|
||||||
assertEq(zeroForOne, false);
|
assertEq(zeroForOne, false);
|
||||||
assertEq(
|
assertEq(
|
||||||
uint8(TokenTransfer.TransferType.TRANSFER), uint8(transferType)
|
uint8(TokenTransfer.TransferType.TRANSFER_TO_PROTOCOL),
|
||||||
|
uint8(transferType)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -157,7 +158,7 @@ contract UniswapV2ExecutorTest is Test, Constants, Permit2TestHelper {
|
|||||||
WETH_DAI_POOL,
|
WETH_DAI_POOL,
|
||||||
BOB,
|
BOB,
|
||||||
zeroForOne,
|
zeroForOne,
|
||||||
uint8(TokenTransfer.TransferType.TRANSFER)
|
uint8(TokenTransfer.TransferType.TRANSFER_TO_PROTOCOL)
|
||||||
);
|
);
|
||||||
|
|
||||||
deal(WETH_ADDR, address(uniswapV2Exposed), amountIn);
|
deal(WETH_ADDR, address(uniswapV2Exposed), amountIn);
|
||||||
@@ -176,7 +177,7 @@ contract UniswapV2ExecutorTest is Test, Constants, Permit2TestHelper {
|
|||||||
WETH_DAI_POOL,
|
WETH_DAI_POOL,
|
||||||
BOB,
|
BOB,
|
||||||
zeroForOne,
|
zeroForOne,
|
||||||
uint8(TokenTransfer.TransferType.TRANSFER_FROM)
|
uint8(TokenTransfer.TransferType.TRANSFER_FROM_TO_PROTOCOL)
|
||||||
);
|
);
|
||||||
|
|
||||||
deal(WETH_ADDR, address(this), amountIn);
|
deal(WETH_ADDR, address(this), amountIn);
|
||||||
@@ -197,7 +198,7 @@ contract UniswapV2ExecutorTest is Test, Constants, Permit2TestHelper {
|
|||||||
WETH_DAI_POOL,
|
WETH_DAI_POOL,
|
||||||
ALICE,
|
ALICE,
|
||||||
zeroForOne,
|
zeroForOne,
|
||||||
uint8(TokenTransfer.TransferType.TRANSFER_PERMIT2)
|
uint8(TokenTransfer.TransferType.TRANSFER_PERMIT2_TO_PROTOCOL)
|
||||||
);
|
);
|
||||||
|
|
||||||
deal(WETH_ADDR, ALICE, amountIn);
|
deal(WETH_ADDR, ALICE, amountIn);
|
||||||
@@ -283,7 +284,7 @@ contract UniswapV2ExecutorTest is Test, Constants, Permit2TestHelper {
|
|||||||
fakePool,
|
fakePool,
|
||||||
BOB,
|
BOB,
|
||||||
zeroForOne,
|
zeroForOne,
|
||||||
uint8(TokenTransfer.TransferType.TRANSFER)
|
uint8(TokenTransfer.TransferType.TRANSFER_TO_PROTOCOL)
|
||||||
);
|
);
|
||||||
|
|
||||||
deal(WETH_ADDR, address(uniswapV2Exposed), amountIn);
|
deal(WETH_ADDR, address(uniswapV2Exposed), amountIn);
|
||||||
@@ -303,7 +304,7 @@ contract UniswapV2ExecutorTest is Test, Constants, Permit2TestHelper {
|
|||||||
USDC_MAG7_POOL,
|
USDC_MAG7_POOL,
|
||||||
BOB,
|
BOB,
|
||||||
zeroForOne,
|
zeroForOne,
|
||||||
uint8(TokenTransfer.TransferType.TRANSFER)
|
uint8(TokenTransfer.TransferType.TRANSFER_TO_PROTOCOL)
|
||||||
);
|
);
|
||||||
|
|
||||||
deal(BASE_USDC, address(uniswapV2Exposed), amountIn);
|
deal(BASE_USDC, address(uniswapV2Exposed), amountIn);
|
||||||
|
|||||||
@@ -71,7 +71,7 @@ contract UniswapV3ExecutorTest is Test, Constants, Permit2TestHelper {
|
|||||||
address(2),
|
address(2),
|
||||||
address(3),
|
address(3),
|
||||||
false,
|
false,
|
||||||
TokenTransfer.TransferType.TRANSFER
|
TokenTransfer.TransferType.TRANSFER_TO_PROTOCOL
|
||||||
);
|
);
|
||||||
|
|
||||||
(
|
(
|
||||||
@@ -91,7 +91,8 @@ contract UniswapV3ExecutorTest is Test, Constants, Permit2TestHelper {
|
|||||||
assertEq(target, address(3));
|
assertEq(target, address(3));
|
||||||
assertEq(zeroForOne, false);
|
assertEq(zeroForOne, false);
|
||||||
assertEq(
|
assertEq(
|
||||||
uint8(transferType), uint8(TokenTransfer.TransferType.TRANSFER)
|
uint8(transferType),
|
||||||
|
uint8(TokenTransfer.TransferType.TRANSFER_TO_PROTOCOL)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -126,7 +127,7 @@ contract UniswapV3ExecutorTest is Test, Constants, Permit2TestHelper {
|
|||||||
WETH_ADDR,
|
WETH_ADDR,
|
||||||
DAI_ADDR,
|
DAI_ADDR,
|
||||||
poolFee,
|
poolFee,
|
||||||
TokenTransfer.TransferType.TRANSFER,
|
TokenTransfer.TransferType.TRANSFER_TO_PROTOCOL,
|
||||||
address(uniswapV3Exposed)
|
address(uniswapV3Exposed)
|
||||||
);
|
);
|
||||||
uint256 dataOffset = 3; // some offset
|
uint256 dataOffset = 3; // some offset
|
||||||
@@ -160,7 +161,7 @@ contract UniswapV3ExecutorTest is Test, Constants, Permit2TestHelper {
|
|||||||
address(this),
|
address(this),
|
||||||
fakePool,
|
fakePool,
|
||||||
zeroForOne,
|
zeroForOne,
|
||||||
TokenTransfer.TransferType.TRANSFER
|
TokenTransfer.TransferType.TRANSFER_TO_PROTOCOL
|
||||||
);
|
);
|
||||||
|
|
||||||
vm.expectRevert(UniswapV3Executor__InvalidTarget.selector);
|
vm.expectRevert(UniswapV3Executor__InvalidTarget.selector);
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ contract UniswapV4ExecutorTest is Test, Constants {
|
|||||||
uint24 pool2Fee = 1000;
|
uint24 pool2Fee = 1000;
|
||||||
int24 tickSpacing2 = -10;
|
int24 tickSpacing2 = -10;
|
||||||
TokenTransfer.TransferType transferType =
|
TokenTransfer.TransferType transferType =
|
||||||
TokenTransfer.TransferType.TRANSFER_FROM;
|
TokenTransfer.TransferType.TRANSFER_FROM_TO_PROTOCOL;
|
||||||
|
|
||||||
UniswapV4Executor.UniswapV4Pool[] memory pools =
|
UniswapV4Executor.UniswapV4Pool[] memory pools =
|
||||||
new UniswapV4Executor.UniswapV4Pool[](2);
|
new UniswapV4Executor.UniswapV4Pool[](2);
|
||||||
|
|||||||
@@ -33,21 +33,21 @@ pub trait TransferOptimization {
|
|||||||
} else if is_first_swap && send_funds_to_pool {
|
} else if is_first_swap && send_funds_to_pool {
|
||||||
if permit2 {
|
if permit2 {
|
||||||
// Transfer from swapper to pool using permit2.
|
// Transfer from swapper to pool using permit2.
|
||||||
TransferType::Permit2Transfer
|
TransferType::TransferPermit2ToProtocol
|
||||||
} else {
|
} else {
|
||||||
// Transfer from swapper to pool.
|
// Transfer from swapper to pool.
|
||||||
TransferType::TransferFrom
|
TransferType::TransferFromToProtocol
|
||||||
}
|
}
|
||||||
} else if is_first_swap && funds_expected_in_router {
|
} else if is_first_swap && funds_expected_in_router {
|
||||||
if permit2 {
|
if permit2 {
|
||||||
// Transfer from swapper to router using permit2.
|
// Transfer from swapper to router using permit2.
|
||||||
TransferType::Permit2TransferToRouter
|
TransferType::TransferPermit2ToRouter
|
||||||
} else {
|
} else {
|
||||||
// Transfer from swapper to router.
|
// Transfer from swapper to router.
|
||||||
TransferType::TransferToRouter
|
TransferType::TransferFromToRouter
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
TransferType::Transfer
|
TransferType::TransferToProtocol
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -93,7 +93,7 @@ mod tests {
|
|||||||
let strategy = MockStrategy {};
|
let strategy = MockStrategy {};
|
||||||
let transfer_method =
|
let transfer_method =
|
||||||
strategy.get_transfer_type(swap.clone(), weth(), eth(), weth(), true, false);
|
strategy.get_transfer_type(swap.clone(), weth(), eth(), weth(), true, false);
|
||||||
assert_eq!(transfer_method, TransferType::Permit2Transfer);
|
assert_eq!(transfer_method, TransferType::TransferPermit2ToProtocol);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
@@ -111,7 +111,7 @@ mod tests {
|
|||||||
let strategy = MockStrategy {};
|
let strategy = MockStrategy {};
|
||||||
let transfer_method =
|
let transfer_method =
|
||||||
strategy.get_transfer_type(swap.clone(), weth(), eth(), weth(), false, false);
|
strategy.get_transfer_type(swap.clone(), weth(), eth(), weth(), false, false);
|
||||||
assert_eq!(transfer_method, TransferType::TransferFrom);
|
assert_eq!(transfer_method, TransferType::TransferFromToProtocol);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
@@ -149,7 +149,7 @@ mod tests {
|
|||||||
let strategy = MockStrategy {};
|
let strategy = MockStrategy {};
|
||||||
let transfer_method =
|
let transfer_method =
|
||||||
strategy.get_transfer_type(swap.clone(), eth(), eth(), weth(), false, true);
|
strategy.get_transfer_type(swap.clone(), eth(), eth(), weth(), false, true);
|
||||||
assert_eq!(transfer_method, TransferType::TransferFrom);
|
assert_eq!(transfer_method, TransferType::TransferFromToProtocol);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
@@ -168,6 +168,6 @@ mod tests {
|
|||||||
let strategy = MockStrategy {};
|
let strategy = MockStrategy {};
|
||||||
let transfer_method =
|
let transfer_method =
|
||||||
strategy.get_transfer_type(swap.clone(), weth(), eth(), weth(), false, false);
|
strategy.get_transfer_type(swap.clone(), weth(), eth(), weth(), false, false);
|
||||||
assert_eq!(transfer_method, TransferType::Transfer);
|
assert_eq!(transfer_method, TransferType::TransferToProtocol);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -595,7 +595,7 @@ mod tests {
|
|||||||
router_address: Some(Bytes::zero(20)),
|
router_address: Some(Bytes::zero(20)),
|
||||||
group_token_in: token_in.clone(),
|
group_token_in: token_in.clone(),
|
||||||
group_token_out: token_out.clone(),
|
group_token_out: token_out.clone(),
|
||||||
transfer_type: TransferType::Transfer,
|
transfer_type: TransferType::TransferToProtocol,
|
||||||
};
|
};
|
||||||
let encoder = UniswapV2SwapEncoder::new(
|
let encoder = UniswapV2SwapEncoder::new(
|
||||||
String::from("0x543778987b293C7E8Cf0722BB2e935ba6f4068D4"),
|
String::from("0x543778987b293C7E8Cf0722BB2e935ba6f4068D4"),
|
||||||
@@ -649,7 +649,7 @@ mod tests {
|
|||||||
router_address: Some(Bytes::zero(20)),
|
router_address: Some(Bytes::zero(20)),
|
||||||
group_token_in: token_in.clone(),
|
group_token_in: token_in.clone(),
|
||||||
group_token_out: token_out.clone(),
|
group_token_out: token_out.clone(),
|
||||||
transfer_type: TransferType::Transfer,
|
transfer_type: TransferType::TransferToProtocol,
|
||||||
};
|
};
|
||||||
let encoder = UniswapV3SwapEncoder::new(
|
let encoder = UniswapV3SwapEncoder::new(
|
||||||
String::from("0x543778987b293C7E8Cf0722BB2e935ba6f4068D4"),
|
String::from("0x543778987b293C7E8Cf0722BB2e935ba6f4068D4"),
|
||||||
@@ -773,7 +773,7 @@ mod tests {
|
|||||||
|
|
||||||
group_token_in: token_in.clone(),
|
group_token_in: token_in.clone(),
|
||||||
group_token_out: token_out.clone(),
|
group_token_out: token_out.clone(),
|
||||||
transfer_type: TransferType::Transfer,
|
transfer_type: TransferType::TransferToProtocol,
|
||||||
};
|
};
|
||||||
let encoder = UniswapV4SwapEncoder::new(
|
let encoder = UniswapV4SwapEncoder::new(
|
||||||
String::from("0xF62849F9A0B5Bf2913b396098F7c7019b51A820a"),
|
String::from("0xF62849F9A0B5Bf2913b396098F7c7019b51A820a"),
|
||||||
@@ -842,7 +842,7 @@ mod tests {
|
|||||||
group_token_in: group_token_in.clone(),
|
group_token_in: group_token_in.clone(),
|
||||||
// Token out is the same as the group token out
|
// Token out is the same as the group token out
|
||||||
group_token_out: token_out.clone(),
|
group_token_out: token_out.clone(),
|
||||||
transfer_type: TransferType::Transfer,
|
transfer_type: TransferType::TransferToProtocol,
|
||||||
};
|
};
|
||||||
|
|
||||||
let encoder = UniswapV4SwapEncoder::new(
|
let encoder = UniswapV4SwapEncoder::new(
|
||||||
@@ -885,7 +885,7 @@ mod tests {
|
|||||||
router_address: Some(router_address.clone()),
|
router_address: Some(router_address.clone()),
|
||||||
group_token_in: usde_address.clone(),
|
group_token_in: usde_address.clone(),
|
||||||
group_token_out: wbtc_address.clone(),
|
group_token_out: wbtc_address.clone(),
|
||||||
transfer_type: TransferType::Transfer,
|
transfer_type: TransferType::TransferToProtocol,
|
||||||
};
|
};
|
||||||
|
|
||||||
// Setup - First sequence: USDE -> USDT
|
// Setup - First sequence: USDE -> USDT
|
||||||
@@ -1017,7 +1017,7 @@ mod tests {
|
|||||||
group_token_out: token_out.clone(),
|
group_token_out: token_out.clone(),
|
||||||
exact_out: false,
|
exact_out: false,
|
||||||
router_address: Some(Bytes::default()),
|
router_address: Some(Bytes::default()),
|
||||||
transfer_type: TransferType::Transfer,
|
transfer_type: TransferType::TransferToProtocol,
|
||||||
};
|
};
|
||||||
|
|
||||||
let encoder =
|
let encoder =
|
||||||
@@ -1060,7 +1060,7 @@ mod tests {
|
|||||||
group_token_out: group_token_out.clone(),
|
group_token_out: group_token_out.clone(),
|
||||||
exact_out: false,
|
exact_out: false,
|
||||||
router_address: Some(Bytes::default()),
|
router_address: Some(Bytes::default()),
|
||||||
transfer_type: TransferType::Transfer,
|
transfer_type: TransferType::TransferToProtocol,
|
||||||
};
|
};
|
||||||
|
|
||||||
let first_swap = Swap {
|
let first_swap = Swap {
|
||||||
|
|||||||
@@ -260,7 +260,7 @@ impl TychoExecutorEncoder {
|
|||||||
router_address: None,
|
router_address: None,
|
||||||
group_token_in: grouped_swap.input_token.clone(),
|
group_token_in: grouped_swap.input_token.clone(),
|
||||||
group_token_out: grouped_swap.output_token.clone(),
|
group_token_out: grouped_swap.output_token.clone(),
|
||||||
transfer_type: TransferType::Transfer,
|
transfer_type: TransferType::TransferToProtocol,
|
||||||
};
|
};
|
||||||
let protocol_data = swap_encoder.encode_swap(swap.clone(), encoding_context.clone())?;
|
let protocol_data = swap_encoder.encode_swap(swap.clone(), encoding_context.clone())?;
|
||||||
grouped_protocol_data.extend(protocol_data);
|
grouped_protocol_data.extend(protocol_data);
|
||||||
|
|||||||
@@ -100,20 +100,20 @@ pub struct Transaction {
|
|||||||
///
|
///
|
||||||
/// # Fields
|
/// # Fields
|
||||||
///
|
///
|
||||||
/// * `Transfer`: Transfer the token from the router into the pool.
|
/// * `TransferToProtocol`: Transfer the token from the router into the protocol.
|
||||||
/// * `TransferFrom`: Transfer the token from the swapper to the pool.
|
/// * `TransferFromToProtocol`: Transfer the token from the sender to the protocol.
|
||||||
/// * `Permit2Transfer`: Transfer the token from the sender to the pool using Permit2.
|
/// * `TransferPermit2ToProtocol`: Transfer the token from the sender to the protocol using Permit2.
|
||||||
/// * `TransferToRouter`: Transfer the token from the swapper to the router.
|
/// * `TransferFromToRouter`: Transfer the token from the sender to the router.
|
||||||
/// * `Permit2TransferToRouter`: Transfer the token from the swapper to the router using Permit2.
|
/// * `TransferPermit2ToRouter`: Transfer the token from the sender to the router using Permit2.
|
||||||
/// * `None`: No transfer is needed. Tokens are already in the pool.
|
/// * `None`: No transfer is needed. Tokens are already in the pool.
|
||||||
#[repr(u8)]
|
#[repr(u8)]
|
||||||
#[derive(Clone, Debug, PartialEq)]
|
#[derive(Clone, Debug, PartialEq)]
|
||||||
pub enum TransferType {
|
pub enum TransferType {
|
||||||
Transfer = 0,
|
TransferToProtocol = 0,
|
||||||
TransferFrom = 1,
|
TransferFromToProtocol = 1,
|
||||||
Permit2Transfer = 2,
|
TransferPermit2ToProtocol = 2,
|
||||||
TransferToRouter = 3,
|
TransferFromToRouter = 3,
|
||||||
Permit2TransferToRouter = 4,
|
TransferPermit2ToRouter = 4,
|
||||||
None = 5,
|
None = 5,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user