diff --git a/contracts/mainnet/connectors/uniswapV3/helpers.sol b/contracts/mainnet/connectors/uniswapV3/helpers.sol index e307782e..a877adf5 100644 --- a/contracts/mainnet/connectors/uniswapV3/helpers.sol +++ b/contracts/mainnet/connectors/uniswapV3/helpers.sol @@ -15,9 +15,9 @@ abstract contract Helpers is DSMath, Basic { /** * @dev uniswap v3 NFT Position Manager & Swap Router */ - INonfungiblePositionManager nftManager = + INonfungiblePositionManager constant nftManager = INonfungiblePositionManager(0xC36442b4a4522E871399CD717aBDD847Ab11FE88); - ISwapRouter swapRouter = + ISwapRouter constant swapRouter = ISwapRouter(0xE592427A0AEce92De3Edee1F18E0157C05861564); struct MintParams { @@ -88,7 +88,9 @@ abstract contract Helpers is DSMath, Basic { function _addLiquidity( uint256 _tokenId, uint256 _amount0Desired, - uint256 _amount1Desired + uint256 _amount1Desired, + uint256 _amount0Min, + uint256 _amount1Min, ) internal returns ( @@ -102,8 +104,8 @@ abstract contract Helpers is DSMath, Basic { _tokenId, _amount0Desired, _amount1Desired, - 0, - 0, + _amount0Min, + _amount1Min, block.timestamp ); (liquidity, amount0, amount1) = nftManager.increaseLiquidity(params); @@ -114,14 +116,16 @@ abstract contract Helpers is DSMath, Basic { */ function _decreaseLiquidity( uint256 _tokenId, - uint128 _liquidity + uint128 _liquidity, + uint256 _amount0Min, + uint256 _amount1Min, ) internal returns (uint256 amount0, uint256 amount1) { INonfungiblePositionManager.DecreaseLiquidityParams memory params = INonfungiblePositionManager.DecreaseLiquidityParams( _tokenId, _liquidity, - 0, - 0, + _amount0Min, + _amount0Min, block.timestamp ); (amount0, amount1) = nftManager.decreaseLiquidity(params); diff --git a/contracts/mainnet/connectors/uniswapV3/main.sol b/contracts/mainnet/connectors/uniswapV3/main.sol index cb1677a3..c671a5a0 100644 --- a/contracts/mainnet/connectors/uniswapV3/main.sol +++ b/contracts/mainnet/connectors/uniswapV3/main.sol @@ -45,6 +45,8 @@ abstract contract UniswapResolver is Helpers, Events { * @param tokenId: NFT LP Token ID. * @param amountA: tokenA amounts. * @param amountB: tokenB amounts. + * @param amountAMin: Min amount of tokenA. + * @param amountBMin: Min amount of tokenB. * @param getIds: IDs to retrieve token amounts * @param setId: stores the amount of LP token */ @@ -52,6 +54,8 @@ abstract contract UniswapResolver is Helpers, Events { uint256 tokenId, uint256 amountA, uint256 amountB, + uint256 amountAMin, + uint256 amountBMin, uint256[] calldata getIds, uint256 setId ) @@ -65,7 +69,9 @@ abstract contract UniswapResolver is Helpers, Events { (uint256 _liquidity, uint256 _amtA, uint256 _amtB) = _addLiquidity( tokenId, amtA, - amtB + amtB, + amountAMin, + amountBMin ); setUint(setId, _liquidity); @@ -77,12 +83,16 @@ abstract contract UniswapResolver is Helpers, Events { * @dev Decrease Liquidity * @param tokenId: NFT LP Token ID. * @param liquidity: LP Token amount. + * @param amountAMin: Min amount of tokenA. + * @param amountBMin: Min amount of tokenB. * @param getId: ID to retrieve LP token amounts * @param setIds: stores the amount of output tokens */ function decreateLiquidity( uint256 tokenId, uint128 liquidity, + uint256 amountAMin, + uint256 amountBMin, uint256 getId, uint256[] calldata setIds ) @@ -94,7 +104,9 @@ abstract contract UniswapResolver is Helpers, Events { (uint256 _amtA, uint256 _amtB) = _decreaseLiquidity( tokenId, - _liquidity + _liquidity, + amountAMin, + amountBMin ); setUint(setIds[0], _amtA); @@ -138,6 +150,39 @@ abstract contract UniswapResolver is Helpers, Events { _eventName = "swap(address,address,uint256,uint256)"; _eventParam = abi.encode(tokenIn, tokenOut, _amountIn, amountOut); } + + /** + * @dev Collect function + * @param tokenId: NFT LP Token ID. + * @param amount0Max: Max amount of token0. + * @param amount1Max: Max amount of token1. + * @param getIds: IDs to retrieve amounts + * @param setIds: stores the amount of output tokens + */ + function collect( + uint256 tokenId, + uint128 amount0Max, + uint128 amount1Max, + uint256[] calldata getIds, + uint256[] calldata setIds + ) + external + payable + returns (string memory _eventName, bytes memory _eventParam) + { + uint128 _amount0Max = getUint(getIds[0], amount0Max); + uint128 _amount1Max = getUint(getIds[1], amount1Max); + (uint256 amount0, uint256 amount1) = _collect( + tokenId, + _amount0Max, + _amount1Max + ); + + setUint(setIds[0], amount0); + setUint(setIds[1], amount1); + _eventName = "collect(uint256,uint256,uint256)"; + _eventParam = abi.encode(tokenId, amount0, amount1); + } } contract ConnectV2UniswapV3 is UniswapResolver {