Skip to content

Commit

Permalink
forge tests
Browse files Browse the repository at this point in the history
  • Loading branch information
ewilz committed Oct 4, 2024
1 parent 125675b commit 2721ca1
Show file tree
Hide file tree
Showing 6 changed files with 76 additions and 13 deletions.
7 changes: 4 additions & 3 deletions sdks/universal-router-sdk/src/entities/actions/uniswap.ts
Original file line number Diff line number Diff line change
Expand Up @@ -382,16 +382,17 @@ function addMixedSwap<TInput extends Currency, TOutput extends Currency>(

if (routePool instanceof V4Pool) {
const v4Planner = new V4Planner()
v4Planner.addSettle(inputToken, payerIsUser && i === 0, i == 0 ? amountIn : CONTRACT_BALANCE)
v4Planner.addAction(Actions.SWAP_EXACT_IN, [
{
currencyIn: inputToken.address ?? ETH_ADDRESS,
path: encodeV4RouteToPath(subRoute),
amountIn: i == 0 ? amountIn : CONTRACT_BALANCE,
amountIn: 0, // open delta determined in v4Planner.addSettle() above
amountOutMinimum: !isLastSectionInRoute(i) ? 0 : amountOut,
},
])
v4Planner.addSettle(inputToken, payerIsUser && i === 0)
v4Planner.addTake(outputToken, swapRecipient)
planner.addCommand(CommandType.V4_SWAP, [v4Planner.finalize()])
} else if (routePool instanceof V3Pool) {
planner.addCommand(CommandType.V3_SWAP_EXACT_IN, [
swapRecipient, // recipient
Expand All @@ -415,7 +416,7 @@ function addMixedSwap<TInput extends Currency, TOutput extends Currency>(
// perform a token transition (wrap/unwrap if necessary)
if (!isLastSectionInRoute(i)) {
if (outputToken.isNative && !nextInputToken.isNative) {
planner.addCommand(CommandType.WRAP_ETH, [ROUTER_AS_RECIPIENT, 0])
planner.addCommand(CommandType.WRAP_ETH, [ROUTER_AS_RECIPIENT, CONTRACT_BALANCE])
} else if (!outputToken.isNative && nextInputToken.isNative) {
planner.addCommand(CommandType.UNWRAP_WETH, [ROUTER_AS_RECIPIENT, 0])
}
Expand Down
2 changes: 0 additions & 2 deletions sdks/universal-router-sdk/src/utils/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,6 @@ type ChainConfig = {

const WETH_NOT_SUPPORTED_ON_CHAIN = '0x0000000000000000000000000000000000000000'

export const V4_POOL_MANAGER = '0x5615dEB798BB3E4dFa0139dFa1b3D433Cc23b72f'

// Todo: Change `CHAIN_CONFIGS` to pull the UR address with v4
export const CHAIN_CONFIGS: { [key: number]: ChainConfig } = {
// mainnet
Expand Down
63 changes: 63 additions & 0 deletions sdks/universal-router-sdk/test/forge/SwapERC20CallParameters.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -714,4 +714,67 @@ contract SwapERC20CallParametersTest is Test, Interop, DeployRouter {
assertEq(USDC.balanceOf(address(router)), 0);
assertEq(address(router).balance, 0);
}

function testMixedV2ToV4UnwrapWETH() public {
MethodParameters memory params = readFixture(json, "._UNISWAP_MIXED_USDC_DAI_UNWRAP_WETH_V2_TO_V4");

uint256 usdcAmount = 1000 ether;
deal(address(USDC), from, usdcAmount);
USDC.approve(address(permit2), usdcAmount);
permit2.approve(address(USDC), address(router), uint160(usdcAmount), uint48(block.timestamp + 1000));

assertEq(USDC.balanceOf(from), usdcAmount);
assertEq(DAI.balanceOf(RECIPIENT), 0);

(bool success,) = address(router).call{value: params.value}(params.data);
require(success, "call failed");

assertLe(from.balance, BALANCE - params.value);
assertEq(USDC.balanceOf(from), 0);
assertEq(DAI.balanceOf(address(router)), 0);
assertGt(DAI.balanceOf(RECIPIENT), 0);
assertEq(address(router).balance, 0);
}

function testMixedV4ToV3WrapETH() public {
MethodParameters memory params = readFixture(json, "._UNISWAP_MIXED_DAI_USDC_WRAP_ETH_V4_TO_V3");

uint256 daiAmount = 1000 ether;
deal(address(DAI), from, daiAmount);
DAI.approve(address(permit2), daiAmount);
permit2.approve(address(DAI), address(router), uint160(daiAmount), uint48(block.timestamp + 1000));

assertEq(DAI.balanceOf(from), daiAmount);
assertEq(USDC.balanceOf(RECIPIENT), 0);

(bool success,) = address(router).call{value: params.value}(params.data);
require(success, "call failed");

assertLe(from.balance, BALANCE - params.value);
assertEq(DAI.balanceOf(from), 0);
assertEq(USDC.balanceOf(address(router)), 0);
assertGt(USDC.balanceOf(RECIPIENT), 0);
assertEq(address(router).balance, 0);
}

function testMixedV4ToV2WrapETH() public {
MethodParameters memory params = readFixture(json, "._UNISWAP_MIXED_DAI_USDC_WRAP_ETH_V4_TO_V2");

uint256 daiAmount = 1000 ether;
deal(address(DAI), from, daiAmount);
DAI.approve(address(permit2), daiAmount);
permit2.approve(address(DAI), address(router), uint160(daiAmount), uint48(block.timestamp + 1000));

assertEq(DAI.balanceOf(from), daiAmount);
assertEq(USDC.balanceOf(RECIPIENT), 0);

(bool success,) = address(router).call{value: params.value}(params.data);
require(success, "call failed");

assertLe(from.balance, BALANCE - params.value);
assertEq(DAI.balanceOf(from), 0);
assertEq(USDC.balanceOf(address(router)), 0);
assertGt(USDC.balanceOf(RECIPIENT), 0);
assertEq(address(router).balance, 0);
}
}
Loading

0 comments on commit 2721ca1

Please sign in to comment.