Skip to content

Commit

Permalink
remove the deal that send 1 wei to GS and SOR
Browse files Browse the repository at this point in the history
  • Loading branch information
alex0207s committed Dec 6, 2023
1 parent c7cdde6 commit fb61d5f
Show file tree
Hide file tree
Showing 4 changed files with 45 additions and 32 deletions.
38 changes: 26 additions & 12 deletions test/forkMainnet/GenericSwap.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -63,11 +63,6 @@ contract GenericSwapTest is Test, Tokens, BalanceUtil, Permit2Helper, SigHelper
genericSwap = new GenericSwap(UNISWAP_PERMIT2_ADDRESS, address(allowanceTarget));
smartStrategy = new SmartOrderStrategy(strategyAdmin, address(genericSwap), WETH_ADDRESS);

// deposit 1 wei in SOR and GS
deal(DAI_ADDRESS, address(smartStrategy), 1 wei);
deal(DAI_ADDRESS, address(genericSwap), 1 wei);
deal(address(genericSwap), 1 wei);

mockStrategy = new MockStrategy();
vm.prank(strategyAdmin);
address[] memory tokenList = new address[](1);
Expand All @@ -78,7 +73,7 @@ contract GenericSwapTest is Test, Tokens, BalanceUtil, Permit2Helper, SigHelper

IUniswapV3Quoter v3Quoter = IUniswapV3Quoter(UNISWAP_V3_QUOTER_ADDRESS);
bytes memory encodedPath = UniswapV3.encodePath(defaultPath, defaultV3Fees);
uint256 expectedOut = v3Quoter.quoteExactInput(encodedPath, defaultInputAmount);
uint256 expectedOut = v3Quoter.quoteExactInput(encodedPath, defaultInputAmount) - 2; // leaving 1 wei in GS and SOS separately
uint256 minOutputAmount = (expectedOut * 95) / 100; // default 5% slippage tolerance
bytes memory routerPayload = abi.encodeCall(
IUniswapSwapRouter02.exactInputSingle,
Expand Down Expand Up @@ -162,16 +157,17 @@ contract GenericSwapTest is Test, Tokens, BalanceUtil, Permit2Helper, SigHelper
Snapshot memory makerMakerToken = BalanceSnapshot.take({ owner: address(mockStrategy), token: gsData.makerToken });

uint256 actualOutput = 900;
uint256 realChangedInGas = actualOutput - 1;

// 800 < 900 < 1000
mockStrategy.setOutputAmountAndRecipient(actualOutput, payable(address(genericSwap)));
vm.expectEmit(true, true, true, true);
emit Swap(getGSDataHash(gsData), gsData.maker, taker, taker, gsData.takerToken, gsData.takerTokenAmount, gsData.makerToken, actualOutput);
emit Swap(getGSDataHash(gsData), gsData.maker, taker, taker, gsData.takerToken, gsData.takerTokenAmount, gsData.makerToken, realChangedInGas);
vm.prank(taker);
genericSwap.executeSwap(gsData, defaultTakerPermit);

takerTakerToken.assertChange(-int256(gsData.takerTokenAmount));
takerMakerToken.assertChange(int256(actualOutput));
takerMakerToken.assertChange(int256(realChangedInGas));
makerTakerToken.assertChange(int256(gsData.takerTokenAmount));
makerMakerToken.assertChange(-int256(actualOutput));
}
Expand All @@ -189,12 +185,21 @@ contract GenericSwapTest is Test, Tokens, BalanceUtil, Permit2Helper, SigHelper

mockStrategy.setOutputAmountAndRecipient(gsData.makerTokenAmount, payable(address(genericSwap)));
vm.expectEmit(true, true, true, true);
emit Swap(getGSDataHash(gsData), gsData.maker, taker, taker, gsData.takerToken, gsData.takerTokenAmount, gsData.makerToken, gsData.makerTokenAmount);
emit Swap(
getGSDataHash(gsData),
gsData.maker,
taker,
taker,
gsData.takerToken,
gsData.takerTokenAmount,
gsData.makerToken,
gsData.makerTokenAmount - 1
);
vm.prank(taker);
genericSwap.executeSwap{ value: gsData.takerTokenAmount }(gsData, defaultTakerPermit);

takerTakerToken.assertChange(-int256(gsData.takerTokenAmount));
takerMakerToken.assertChange(int256(gsData.makerTokenAmount));
takerMakerToken.assertChange(int256(gsData.makerTokenAmount - 1)); // leaving 1 wei in GS
makerTakerToken.assertChange(int256(gsData.takerTokenAmount));
makerMakerToken.assertChange(-int256(gsData.makerTokenAmount));
}
Expand All @@ -213,12 +218,21 @@ contract GenericSwapTest is Test, Tokens, BalanceUtil, Permit2Helper, SigHelper

mockStrategy.setOutputAmountAndRecipient(gsData.makerTokenAmount, payable(address(genericSwap)));
vm.expectEmit(true, true, true, true);
emit Swap(getGSDataHash(gsData), gsData.maker, taker, taker, gsData.takerToken, gsData.takerTokenAmount, gsData.makerToken, gsData.makerTokenAmount);
emit Swap(
getGSDataHash(gsData),
gsData.maker,
taker,
taker,
gsData.takerToken,
gsData.takerTokenAmount,
gsData.makerToken,
gsData.makerTokenAmount - 1
);
vm.prank(taker);
genericSwap.executeSwap(gsData, defaultTakerPermit);

takerTakerToken.assertChange(-int256(gsData.takerTokenAmount));
takerMakerToken.assertChange(int256(gsData.makerTokenAmount));
takerMakerToken.assertChange(int256(gsData.makerTokenAmount - 1)); // leaving 1 wei in GS
makerTakerToken.assertChange(int256(gsData.takerTokenAmount));
makerMakerToken.assertChange(-int256(gsData.makerTokenAmount));
}
Expand Down
21 changes: 11 additions & 10 deletions test/forkMainnet/SmartOrderStrategy/AMMs.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ contract AMMsTest is SmartOrderStrategyTest {

// get the exact quote from uniswap
uint256 expectedOut = v3Quoter.quoteExactInput(encodedUniv3Path, defaultInputAmount);
uint256 realChangedInGS = expectedOut - 1;

vm.startPrank(genericSwap, genericSwap);
IERC20(defaultInputToken).safeTransfer(address(smartOrderStrategy), defaultInputAmount);
Expand All @@ -55,7 +56,7 @@ contract AMMsTest is SmartOrderStrategyTest {
vm.stopPrank();

sosInputToken.assertChange(-int256(defaultInputAmount));
gsOutputToken.assertChange(int256(expectedOut));
gsOutputToken.assertChange(int256(realChangedInGS));
}

function testUniswapV3WithAmountReplace() public {
Expand Down Expand Up @@ -85,18 +86,16 @@ contract AMMsTest is SmartOrderStrategyTest {
bytes memory data = abi.encode(operations);

// get the exact quote from uniswap
uint256 inputAmountAfterRatio = (defaultInputAmount * defaultInputRatio) / Constant.BPS_MAX;
uint256 inputAmountAfterRatio = ((defaultInputAmount - 1) * defaultInputRatio) / Constant.BPS_MAX;
uint256 expectedOut = v3Quoter.quoteExactInput(encodedUniv3Path, inputAmountAfterRatio);

vm.startPrank(genericSwap, genericSwap);
IERC20(defaultInputToken).safeTransfer(address(smartOrderStrategy), defaultInputAmount);
Snapshot memory sosInputToken = BalanceSnapshot.take(address(smartOrderStrategy), defaultInputToken);
Snapshot memory gsOutputToken = BalanceSnapshot.take(genericSwap, defaultOutputToken);
smartOrderStrategy.executeStrategy(defaultInputToken, defaultOutputToken, defaultInputAmount, data);
vm.stopPrank();

sosInputToken.assertChange(-int256(inputAmountAfterRatio));
gsOutputToken.assertChange(int256(expectedOut));
gsOutputToken.assertChange(int256(expectedOut - 1));
}

function testUniswapV3WithMaxAmountReplace() public {
Expand Down Expand Up @@ -129,7 +128,7 @@ contract AMMsTest is SmartOrderStrategyTest {
uint256 actualInputAmount = 5678;

// get the exact quote from uniswap
uint256 expectedOut = v3Quoter.quoteExactInput(encodedUniv3Path, actualInputAmount);
uint256 expectedOut = v3Quoter.quoteExactInput(encodedUniv3Path, actualInputAmount - 1);

vm.startPrank(genericSwap, genericSwap);
IERC20(defaultInputToken).safeTransfer(address(smartOrderStrategy), actualInputAmount);
Expand All @@ -139,8 +138,8 @@ contract AMMsTest is SmartOrderStrategyTest {
vm.stopPrank();

// the amount change will be the actual balance at the moment
sosInputToken.assertChange(-int256(actualInputAmount));
gsOutputToken.assertChange(int256(expectedOut));
sosInputToken.assertChange(-int256(actualInputAmount - 1)); // leaving 1 wei in SOS
gsOutputToken.assertChange(int256(expectedOut - 1)); // leaving 1 wei in GS
}

function testUniswapV2WithWETHUnwrap() public {
Expand Down Expand Up @@ -171,6 +170,7 @@ contract AMMsTest is SmartOrderStrategyTest {

// get the exact quote from uniswap
uint256 expectedOut = v3Quoter.quoteExactInput(encodedUniv3Path, defaultInputAmount);
uint256 realChangedInGS = expectedOut - 1;

// set output token as ETH
address outputToken = Constant.ETH_ADDRESS;
Expand All @@ -182,7 +182,7 @@ contract AMMsTest is SmartOrderStrategyTest {
vm.stopPrank();

sosInputToken.assertChange(-int256(defaultInputAmount));
gsOutputToken.assertChange(int256(expectedOut));
gsOutputToken.assertChange(int256(realChangedInGS));
}

function testMultipleAMMs() public {
Expand Down Expand Up @@ -212,6 +212,7 @@ contract AMMsTest is SmartOrderStrategyTest {
bytes memory curveData = abi.encodeWithSelector(0x5b41b908, 2, 0, uniOut, 0);
ICurveFiV2 curvePool = ICurveFiV2(CURVE_TRICRYPTO2_POOL_ADDRESS);
uint256 curveOut = curvePool.get_dy(2, 0, uniOut);
uint256 realChangedInGS = curveOut - 1;

ISmartOrderStrategy.Operation[] memory operations = new ISmartOrderStrategy.Operation[](2);
operations[0] = ISmartOrderStrategy.Operation({
Expand Down Expand Up @@ -240,6 +241,6 @@ contract AMMsTest is SmartOrderStrategyTest {
vm.stopPrank();

sosInputToken.assertChange(-int256(defaultInputAmount));
gsOutputToken.assertChange(int256(curveOut));
gsOutputToken.assertChange(int256(realChangedInGS));
}
}
13 changes: 8 additions & 5 deletions test/forkMainnet/SmartOrderStrategy/IntegrationV6.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -46,9 +46,6 @@ contract IntegrationV6Test is SmartOrderStrategyTest, SigHelper {
vm.prank(strategyOwner);
smartOrderStrategy.approveTokens(tokenList, spenders);

deal(LON_ADDRESS, address(smartOrderStrategy), 1 wei);
deal(DAI_ADDRESS, address(smartOrderStrategy), 1 wei);

// maker approves RFQ & LO
setTokenBalanceAndApprove(maker, address(rfq), tokens, 100000);
setTokenBalanceAndApprove(maker, address(limitOrderSwap), tokens, 100000);
Expand All @@ -67,6 +64,9 @@ contract IntegrationV6Test is SmartOrderStrategyTest, SigHelper {
expiry: defaultExpiry,
salt: defaultSalt
});

uint256 realChangedInGS = rfqOffer.makerTokenAmount - 1; // leaving 1 wei in GS

RFQTx memory rfqTx = RFQTx({ rfqOffer: rfqOffer, takerRequestAmount: rfqOffer.takerTokenAmount, recipient: payable(address(smartOrderStrategy)) });
bytes memory makerSig = signRFQOffer(makerPrivateKey, rfqOffer, address(rfq));
bytes memory rfqData = abi.encodeWithSelector(RFQ_FILL_SELECTOR, rfqTx, makerSig, defaultPermit, defaultPermit);
Expand All @@ -90,7 +90,7 @@ contract IntegrationV6Test is SmartOrderStrategyTest, SigHelper {
vm.stopPrank();

sosInputToken.assertChange(-int256(rfqOffer.takerTokenAmount));
gsOutputToken.assertChange(int256(rfqOffer.makerTokenAmount));
gsOutputToken.assertChange(int256(realChangedInGS));
}

function testV6LOIntegration() public {
Expand All @@ -106,6 +106,9 @@ contract IntegrationV6Test is SmartOrderStrategyTest, SigHelper {
expiry: defaultExpiry,
salt: defaultSalt
});

uint256 realChangedInGS = order.makerTokenAmount - 1; // leaving 1 wei in GS

bytes memory makerSig = signLimitOrder(makerPrivateKey, order, address(limitOrderSwap));
ILimitOrderSwap.TakerParams memory takerParams = ILimitOrderSwap.TakerParams({
takerTokenAmount: order.takerTokenAmount,
Expand Down Expand Up @@ -135,6 +138,6 @@ contract IntegrationV6Test is SmartOrderStrategyTest, SigHelper {
vm.stopPrank();

sosInputToken.assertChange(-int256(order.takerTokenAmount));
gsOutputToken.assertChange(int256(order.makerTokenAmount));
gsOutputToken.assertChange(int256(realChangedInGS));
}
}
5 changes: 0 additions & 5 deletions test/forkMainnet/SmartOrderStrategy/Setup.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -40,11 +40,6 @@ contract SmartOrderStrategyTest is Test, Tokens, BalanceUtil {
setERC20Balance(tokenList[i], genericSwap, 10000);
}

deal(USDC_ADDRESS, address(smartOrderStrategy), 1 wei);
deal(USDT_ADDRESS, address(smartOrderStrategy), 1 wei);
deal(WETH_ADDRESS, address(smartOrderStrategy), 1 wei);
deal(WBTC_ADDRESS, address(smartOrderStrategy), 1 wei);

SmartOrderStrategy.Operation[] memory operations = new SmartOrderStrategy.Operation[](1);
defaultOpsData = abi.encode(operations);

Expand Down

0 comments on commit fb61d5f

Please sign in to comment.