pragma solidity ^0.7.0; pragma experimental ABIEncoderV2; // SPDX-License-Identifier: MIT import { Basic, TokenInterface } from "../../common/basic.sol"; import "./interface.sol"; contract Helpers is Basic { IUniLimitOrder public constant limitCon_ = IUniLimitOrder(0x94F401fAD3ebb89fB7380f5fF6E875A88E6Af916); struct MintParams { address token0; address token1; uint24 fee; int24 tickLower; int24 tickUpper; uint256 amount; bool tokenDirectn; } /** * @dev Create position * @notice Create position that interacts with UniLimitOrder * @param params_ Create Position params. */ function _createPosition(MintParams memory params_) internal returns ( uint256 tokenId_, uint128 liquidity_, uint256 mintAmount_ ) { uint256 amountSend_; (TokenInterface token0_, TokenInterface token1_) = changeMaticAddress( params_.token0, params_.token1 ); if (params_.tokenDirectn) { amountSend_ = params_.amount == type(uint128).max ? getTokenBal(TokenInterface(params_.token0)) : params_.amount; convertMaticToWmatic( params_.token0 == maticAddr, token0_, amountSend_ ); approve(token0_, address(limitCon_), amountSend_); } else { amountSend_ = params_.amount == type(uint128).max ? getTokenBal(TokenInterface(params_.token1)) : params_.amount; convertMaticToWmatic( params_.token1 == maticAddr, token1_, amountSend_ ); approve(token1_, address(limitCon_), amountSend_); } IUniLimitOrder.MintParams memory parameter = IUniLimitOrder.MintParams( address(token0_), address(token1_), params_.fee, params_.tickLower, params_.tickUpper, amountSend_, params_.tokenDirectn ); (tokenId_, liquidity_, mintAmount_) = limitCon_.createPosition( parameter ); } }