Skip to content

Commit c0b860b

Browse files
feat: Update flash mint contracts to use ISwapRouter02 interface (#152)
1 parent 13aaa83 commit c0b860b

File tree

10 files changed

+238
-70
lines changed

10 files changed

+238
-70
lines changed

contracts/exchangeIssuance/DEXAdapter.sol

Lines changed: 13 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ import { ICurveCalculator } from "../interfaces/external/ICurveCalculator.sol";
2525
import { ICurveAddressProvider } from "../interfaces/external/ICurveAddressProvider.sol";
2626
import { ICurvePoolRegistry } from "../interfaces/external/ICurvePoolRegistry.sol";
2727
import { ICurvePool } from "../interfaces/external/ICurvePool.sol";
28-
import { ISwapRouter} from "../interfaces/external/ISwapRouter.sol";
28+
import { ISwapRouter02 } from "../interfaces/external/ISwapRouter02.sol";
2929
import { IQuoter } from "../interfaces/IQuoter.sol";
3030
import { IWETH } from "../interfaces/IWETH.sol";
3131
import { PreciseUnitMath } from "../lib/PreciseUnitMath.sol";
@@ -119,7 +119,7 @@ library DEXAdapter {
119119
_swapData.fees,
120120
_amountIn,
121121
_minAmountOut,
122-
ISwapRouter(_addresses.uniV3Router)
122+
ISwapRouter02(_addresses.uniV3Router)
123123
);
124124
} else {
125125
return _swapExactTokensForTokensUniV2(
@@ -170,7 +170,7 @@ library DEXAdapter {
170170
_swapData.fees,
171171
_amountOut,
172172
_maxAmountIn,
173-
ISwapRouter(_addresses.uniV3Router)
173+
ISwapRouter02(_addresses.uniV3Router)
174174
);
175175
} else {
176176
return _swapTokensForExactTokensUniV2(
@@ -326,7 +326,7 @@ library DEXAdapter {
326326
uint24[] memory _fees,
327327
uint256 _amountOut,
328328
uint256 _maxAmountIn,
329-
ISwapRouter _uniV3Router
329+
ISwapRouter02 _uniV3Router
330330
)
331331
private
332332
returns(uint256)
@@ -335,25 +335,23 @@ library DEXAdapter {
335335
require(_path.length == _fees.length + 1, "ExchangeIssuance: PATHS_FEES_MISMATCH");
336336
_safeApprove(IERC20(_path[0]), address(_uniV3Router), _maxAmountIn);
337337
if(_path.length == 2){
338-
ISwapRouter.ExactOutputSingleParams memory params =
339-
ISwapRouter.ExactOutputSingleParams({
338+
ISwapRouter02.ExactOutputSingleParams memory params =
339+
ISwapRouter02.ExactOutputSingleParams({
340340
tokenIn: _path[0],
341341
tokenOut: _path[1],
342342
fee: _fees[0],
343343
recipient: address(this),
344-
deadline: block.timestamp,
345344
amountOut: _amountOut,
346345
amountInMaximum: _maxAmountIn,
347346
sqrtPriceLimitX96: 0
348347
});
349348
return _uniV3Router.exactOutputSingle(params);
350349
} else {
351350
bytes memory pathV3 = _encodePathV3(_path, _fees, true);
352-
ISwapRouter.ExactOutputParams memory params =
353-
ISwapRouter.ExactOutputParams({
351+
ISwapRouter02.ExactOutputParams memory params =
352+
ISwapRouter02.ExactOutputParams({
354353
path: pathV3,
355354
recipient: address(this),
356-
deadline: block.timestamp,
357355
amountOut: _amountOut,
358356
amountInMaximum: _maxAmountIn
359357
});
@@ -627,33 +625,31 @@ library DEXAdapter {
627625
uint24[] memory _fees,
628626
uint256 _amountIn,
629627
uint256 _minAmountOut,
630-
ISwapRouter _uniV3Router
628+
ISwapRouter02 _uniV3Router
631629
)
632630
private
633631
returns (uint256)
634632
{
635633
require(_path.length == _fees.length + 1, "ExchangeIssuance: PATHS_FEES_MISMATCH");
636634
_safeApprove(IERC20(_path[0]), address(_uniV3Router), _amountIn);
637635
if(_path.length == 2){
638-
ISwapRouter.ExactInputSingleParams memory params =
639-
ISwapRouter.ExactInputSingleParams({
636+
ISwapRouter02.ExactInputSingleParams memory params =
637+
ISwapRouter02.ExactInputSingleParams({
640638
tokenIn: _path[0],
641639
tokenOut: _path[1],
642640
fee: _fees[0],
643641
recipient: address(this),
644-
deadline: block.timestamp,
645642
amountIn: _amountIn,
646643
amountOutMinimum: _minAmountOut,
647644
sqrtPriceLimitX96: 0
648645
});
649646
return _uniV3Router.exactInputSingle(params);
650647
} else {
651648
bytes memory pathV3 = _encodePathV3(_path, _fees, false);
652-
ISwapRouter.ExactInputParams memory params =
653-
ISwapRouter.ExactInputParams({
649+
ISwapRouter02.ExactInputParams memory params =
650+
ISwapRouter02.ExactInputParams({
654651
path: pathV3,
655652
recipient: address(this),
656-
deadline: block.timestamp,
657653
amountIn: _amountIn,
658654
amountOutMinimum: _minAmountOut
659655
});

contracts/exchangeIssuance/FlashMintPerp.sol

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ pragma experimental ABIEncoderV2;
1919

2020
import { IQuoter } from "../interfaces/IQuoter.sol";
2121
import { IUniswapV3SwapCallback } from "../interfaces/IUniswapV3SwapCallback.sol";
22-
import { ISwapRouter} from "../interfaces/external/ISwapRouter.sol";
22+
import { ISwapRouter02 } from "../interfaces/external/ISwapRouter02.sol";
2323
import { Address } from "@openzeppelin/contracts/utils/Address.sol";
2424
import { Context } from "@openzeppelin/contracts/GSN/Context.sol";
2525
import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol";
@@ -51,7 +51,7 @@ contract FlashMintPerp is Withdrawable {
5151
////////////// State //////////////
5252

5353
ISlippageIssuanceModule public immutable slippageIssuanceModule;
54-
ISwapRouter public immutable uniV3Router;
54+
ISwapRouter02 public immutable uniV3Router;
5555
IQuoter public immutable uniV3Quoter;
5656
IERC20 public immutable usdc;
5757
mapping (ISetToken => SetPoolInfo) public setPoolInfo;
@@ -67,7 +67,7 @@ contract FlashMintPerp is Withdrawable {
6767
////////////// Constructor //////////////
6868

6969
constructor(
70-
ISwapRouter _uniV3Router,
70+
ISwapRouter02 _uniV3Router,
7171
IQuoter _uniV3Quoter,
7272
ISlippageIssuanceModule _slippageIssuanceModule,
7373
IERC20 _usdc
@@ -255,10 +255,9 @@ contract FlashMintPerp is Withdrawable {
255255
uint256 spotAssetQuantity = _spotAssetQuantity(_setToken, _amount);
256256

257257
// Trade USDC for exact spot token
258-
ISwapRouter.ExactOutputParams memory spotTokenParams = ISwapRouter.ExactOutputParams(
258+
ISwapRouter02.ExactOutputParams memory spotTokenParams = ISwapRouter02.ExactOutputParams(
259259
setPoolInfo[_setToken].spotToUsdcRoute,
260260
address(this),
261-
block.timestamp,
262261
spotAssetQuantity.add(1), // Add 1 wei
263262
PreciseUnitMath.maxUint256() // No need for slippage check
264263
);
@@ -316,10 +315,9 @@ contract FlashMintPerp is Withdrawable {
316315
spotAssetQuantity = spotTokenBalance;
317316
}
318317

319-
ISwapRouter.ExactInputParams memory spotTokenParams = ISwapRouter.ExactInputParams(
318+
ISwapRouter02.ExactInputParams memory spotTokenParams = ISwapRouter02.ExactInputParams(
320319
setPoolInfo[_setToken].spotToUsdcRoute,
321320
address(this),
322-
block.timestamp,
323321
spotAssetQuantity.sub(1), // Leave 1 wei
324322
0 // No need for slippage check
325323
);
Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
// SPDX-License-Identifier: GPL-2.0-or-later
2+
pragma solidity 0.6.10;
3+
pragma experimental ABIEncoderV2;
4+
5+
interface ISwapRouter02 {
6+
struct IncreaseLiquidityParams {
7+
address token0;
8+
address token1;
9+
uint256 tokenId;
10+
uint256 amount0Min;
11+
uint256 amount1Min;
12+
}
13+
14+
struct MintParams {
15+
address token0;
16+
address token1;
17+
uint24 fee;
18+
int24 tickLower;
19+
int24 tickUpper;
20+
uint256 amount0Min;
21+
uint256 amount1Min;
22+
address recipient;
23+
}
24+
25+
struct ExactInputParams {
26+
bytes path;
27+
address recipient;
28+
uint256 amountIn;
29+
uint256 amountOutMinimum;
30+
}
31+
32+
struct ExactInputSingleParams {
33+
address tokenIn;
34+
address tokenOut;
35+
uint24 fee;
36+
address recipient;
37+
uint256 amountIn;
38+
uint256 amountOutMinimum;
39+
uint160 sqrtPriceLimitX96;
40+
}
41+
42+
struct ExactOutputParams {
43+
bytes path;
44+
address recipient;
45+
uint256 amountOut;
46+
uint256 amountInMaximum;
47+
}
48+
49+
struct ExactOutputSingleParams {
50+
address tokenIn;
51+
address tokenOut;
52+
uint24 fee;
53+
address recipient;
54+
uint256 amountOut;
55+
uint256 amountInMaximum;
56+
uint160 sqrtPriceLimitX96;
57+
}
58+
59+
function WETH9() external view returns (address);
60+
function approveMax(address token) external payable;
61+
function approveMaxMinusOne(address token) external payable;
62+
function approveZeroThenMax(address token) external payable;
63+
function approveZeroThenMaxMinusOne(address token) external payable;
64+
function callPositionManager(bytes memory data) external payable returns (bytes memory result);
65+
function checkOracleSlippage(
66+
bytes[] memory paths,
67+
uint128[] memory amounts,
68+
uint24 maximumTickDivergence,
69+
uint32 secondsAgo
70+
) external view;
71+
function checkOracleSlippage(bytes memory path, uint24 maximumTickDivergence, uint32 secondsAgo) external view;
72+
function exactInput(ExactInputParams memory params) external payable returns (uint256 amountOut);
73+
function exactInputSingle(ExactInputSingleParams memory params) external payable returns (uint256 amountOut);
74+
function exactOutput(ExactOutputParams memory params) external payable returns (uint256 amountIn);
75+
function exactOutputSingle(ExactOutputSingleParams memory params) external payable returns (uint256 amountIn);
76+
function factory() external view returns (address);
77+
function factoryV2() external view returns (address);
78+
function getApprovalType(address token, uint256 amount) external returns (uint8);
79+
function increaseLiquidity(IncreaseLiquidityParams memory params) external payable returns (bytes memory result);
80+
function mint(MintParams memory params) external payable returns (bytes memory result);
81+
function multicall(bytes32 previousBlockhash, bytes[] memory data) external payable returns (bytes[] memory);
82+
function multicall(uint256 deadline, bytes[] memory data) external payable returns (bytes[] memory);
83+
function multicall(bytes[] memory data) external payable returns (bytes[] memory results);
84+
function positionManager() external view returns (address);
85+
function pull(address token, uint256 value) external payable;
86+
function refundETH() external payable;
87+
function selfPermit(address token, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s)
88+
external
89+
payable;
90+
function selfPermitAllowed(address token, uint256 nonce, uint256 expiry, uint8 v, bytes32 r, bytes32 s)
91+
external
92+
payable;
93+
function selfPermitAllowedIfNecessary(address token, uint256 nonce, uint256 expiry, uint8 v, bytes32 r, bytes32 s)
94+
external
95+
payable;
96+
function selfPermitIfNecessary(address token, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s)
97+
external
98+
payable;
99+
function swapExactTokensForTokens(uint256 amountIn, uint256 amountOutMin, address[] memory path, address to)
100+
external
101+
payable
102+
returns (uint256 amountOut);
103+
function swapTokensForExactTokens(uint256 amountOut, uint256 amountInMax, address[] memory path, address to)
104+
external
105+
payable
106+
returns (uint256 amountIn);
107+
function sweepToken(address token, uint256 amountMinimum, address recipient) external payable;
108+
function sweepToken(address token, uint256 amountMinimum) external payable;
109+
function sweepTokenWithFee(address token, uint256 amountMinimum, uint256 feeBips, address feeRecipient)
110+
external
111+
payable;
112+
function sweepTokenWithFee(
113+
address token,
114+
uint256 amountMinimum,
115+
address recipient,
116+
uint256 feeBips,
117+
address feeRecipient
118+
) external payable;
119+
function uniswapV3SwapCallback(int256 amount0Delta, int256 amount1Delta, bytes memory _data) external;
120+
function unwrapWETH9(uint256 amountMinimum, address recipient) external payable;
121+
function unwrapWETH9(uint256 amountMinimum) external payable;
122+
function unwrapWETH9WithFee(uint256 amountMinimum, address recipient, uint256 feeBips, address feeRecipient)
123+
external
124+
payable;
125+
function unwrapWETH9WithFee(uint256 amountMinimum, uint256 feeBips, address feeRecipient) external payable;
126+
function wrapETH(uint256 value) external payable;
127+
}

0 commit comments

Comments
 (0)