dsa-connectors/contracts/polygon/connectors/limitOrder/helpers.sol
2022-04-12 01:33:43 +04:00

79 lines
1.8 KiB
Solidity

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
);
}
}