diff --git a/contracts/polygon/connectors/uniswap/v3/events.sol b/contracts/polygon/connectors/uniswap/v3/events.sol index 829fadd2..b464e28e 100644 --- a/contracts/polygon/connectors/uniswap/v3/events.sol +++ b/contracts/polygon/connectors/uniswap/v3/events.sol @@ -1,6 +1,14 @@ pragma solidity ^0.7.0; contract Events { + event LogcreateAndInitializePool ( + address tokenA, + address tokenB, + address pool, + uint24 fee, + int24 initialTick + ); + event LogMint( uint256 indexed tokenId, uint256 liquidity, diff --git a/contracts/polygon/connectors/uniswap/v3/helpers.sol b/contracts/polygon/connectors/uniswap/v3/helpers.sol index f43be452..70be7093 100644 --- a/contracts/polygon/connectors/uniswap/v3/helpers.sol +++ b/contracts/polygon/connectors/uniswap/v3/helpers.sol @@ -1,9 +1,9 @@ pragma solidity ^0.7.6; pragma abicoder v2; -import {TokenInterface} from "../../../common/interfaces.sol"; -import {DSMath} from "../../../common/math.sol"; -import {Basic} from "../../../common/basic.sol"; +import { TokenInterface} from "../../../common/interfaces.sol"; +import { DSMath } from "../../../common/math.sol"; +import { Basic } from "../../../common/basic.sol"; import "./interface.sol"; import "@uniswap/v3-core/contracts/interfaces/IUniswapV3Pool.sol"; import "@uniswap/v3-core/contracts/libraries/TickMath.sol"; @@ -65,6 +65,27 @@ abstract contract Helpers is DSMath, Basic { } } + function _createAndInitializePoolIfNecessary ( + address tokenA, + address tokenB, + uint24 fee, + int24 initialTick + ) internal returns (address pool) { + (tokenA, tokenB) = sortTokenAddress(tokenA, tokenB); + + (TokenInterface _token0, TokenInterface _token1) = changeMaticAddress( + tokenA, + tokenB + ); + + return nftManager.createAndInitializePoolIfNecessary( + address(_token0), + address(_tokenA), + fee, + TickMath.getSqrtRatioAtTick(initialTick) + ); + } + /** * @dev Mint function which interact with Uniswap v3 */ diff --git a/contracts/polygon/connectors/uniswap/v3/main.sol b/contracts/polygon/connectors/uniswap/v3/main.sol index b6195a6f..25fd8d1b 100644 --- a/contracts/polygon/connectors/uniswap/v3/main.sol +++ b/contracts/polygon/connectors/uniswap/v3/main.sol @@ -11,6 +11,31 @@ import {Helpers} from "./helpers.sol"; import {Events} from "./events.sol"; abstract contract UniswapResolver is Helpers, Events { + + function createAndInitializePool ( + address tokenA, + address tokenB, + uint24 fee, + int24 initialTick + ) { + + address pool = _createAndInitializePoolIfNecessary( + tokenA, + tokenB, + fee, + initialTick + ); + + _eventName = "LogcreateAndInitializePool(address,address,address,uint24,int24)"; + _eventParam = abi.encode( + tokenA, + tokenB, + pool, + fee, + initialTick + ); + } + /** * @dev Mint New Position * @notice Mint New NFT LP Position