-
Notifications
You must be signed in to change notification settings - Fork 20
/
Copy pathIV3Migrator.sol
34 lines (31 loc) · 1.53 KB
/
IV3Migrator.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
// SPDX-License-Identifier: GPL-2.0-or-later
pragma solidity >=0.7.5;
pragma abicoder v2;
import './IMulticall.sol';
import './ISelfPermit.sol';
import './IPoolInitializer.sol';
/// @title V3 Migrator
/// @notice Enables migration of liqudity from Uniswap v2-compatible pairs into Uniswap v3 pools
interface IV3Migrator is IMulticall, ISelfPermit, IPoolInitializer {
struct MigrateParams {
address pair; // the Uniswap v2-compatible pair
uint256 liquidityToMigrate; // expected to be balanceOf(msg.sender)
uint8 percentageToMigrate; // represented as a numerator over 100
address token0;
address token1;
uint24 fee;
int24 tickLower;
int24 tickUpper;
uint256 amount0Min; // must be discounted by percentageToMigrate
uint256 amount1Min; // must be discounted by percentageToMigrate
address recipient;
uint256 deadline;
bool refundAsETH;
}
/// @notice Migrates liquidity to v3 by burning v2 liquidity and minting a new position for v3
/// @dev Slippage protection is enforced via `amount{0,1}Min`, which should be a discount of the expected values of
/// the maximum amount of v3 liquidity that the v2 liquidity can get. For the special case of migrating to an
/// out-of-range position, `amount{0,1}Min` may be set to 0, enforcing that the position remains out of range
/// @param params The params necessary to migrate v2 liquidity, encoded as `MigrateParams` in calldata
function migrate(MigrateParams calldata params) external;
}