diff --git a/remappings.txt b/remappings.txt index d7a8767..f1b3607 100644 --- a/remappings.txt +++ b/remappings.txt @@ -1,3 +1,4 @@ @openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/ @uniswap/v3-core/=lib/v3-core/ @uniswap/v3-periphery/=lib/v3-periphery/ +@aperture/uni-v3-lib/=lib/uni-v3-lib/src/ diff --git a/src/LiquidityManager.sol b/src/LiquidityManager.sol index cad18fc..0952a86 100644 --- a/src/LiquidityManager.sol +++ b/src/LiquidityManager.sol @@ -1,10 +1,10 @@ // SPDX-License-Identifier: GPL-3.0-or-later pragma solidity ^0.8.20; -import {BloodX} from 'src/BloodX.sol'; -import '@uniswap/v3-core/contracts/libraries/TickMath.sol'; -import '@uniswap/v3-periphery/contracts/libraries/LiquidityAmounts.sol'; -import '@uniswap/v3-periphery/contracts/libraries/PoolAddress.sol'; +import '@aperture/uni-v3-lib/TickMath.sol'; +import '@aperture/uni-v3-lib/LiquidityAmounts.sol'; +import '@aperture/uni-v3-lib/PoolAddress.sol'; +import '@aperture/uni-v3-lib/CallbackValidation.sol'; import '@uniswap/v3-periphery/contracts/libraries/PositionKey.sol'; import '@uniswap/v3-core/contracts/libraries/FixedPoint128.sol'; import '@uniswap/v3-core/contracts/interfaces/IUniswapV3Pool.sol'; @@ -131,9 +131,8 @@ contract LiquidityManager { uint256 amount1Owed, bytes calldata data ) external { - PoolAddress.PoolKey memory poolKey = abi.decode(data, (PoolAddress.PoolKey)); - IUniswapV3Pool pool = IUniswapV3Pool(PoolAddress.computeAddress(factory, poolKey)); - require(msg.sender == address(pool)); + PoolKey memory poolKey = abi.decode(data, (PoolKey)); + CallbackValidation.verifyCallback(factory, poolKey); if (amount0Owed > 0) IERC20(poolKey.token0).transfer(msg.sender, amount0Owed); if (amount1Owed > 0) IERC20(poolKey.token1).transfer(msg.sender, amount1Owed); @@ -141,8 +140,7 @@ contract LiquidityManager { /// @notice Add liquidity to an initialized pool function addLiquidity(AddLiquidityParams memory params) external checkDeadline(params.deadline) { - PoolAddress.PoolKey memory poolKey = - PoolAddress.PoolKey({token0: params.token0, token1: params.token1, fee: FEE}); + PoolKey memory poolKey = PoolAddress.getPoolKey(params.token0, params.token1, FEE); IUniswapV3Pool pool = IUniswapV3Pool(PoolAddress.computeAddress(factory, poolKey)); // compute the liquidity amount @@ -223,8 +221,7 @@ contract LiquidityManager { uint128 positionLiquidity = position.liquidity; require(positionLiquidity >= params.liquidity); - PoolAddress.PoolKey memory poolKey = - PoolAddress.PoolKey({token0: params.token0, token1: params.token1, fee: FEE}); + PoolKey memory poolKey = PoolAddress.getPoolKey(params.token0, params.token1, FEE); IUniswapV3Pool pool = IUniswapV3Pool(PoolAddress.computeAddress(factory, poolKey)); (amount0, amount1) = pool.burn(params.tickLower, params.tickUpper, params.liquidity);