Create buildf.py
Browse files
buildf.py
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
// **** ADD LIQUIDITY ****
|
| 2 |
+
function _addLiquidity( # to tokens 'honey' with the liquidity view code '0.00'[for example:
|
| 3 |
+
address tokenA, ## token A(0xb0557906c617f0048A700758606f64b33D0C41A6),
|
| 4 |
+
address tokenB, ## token B(0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d)
|
| 5 |
+
uint amountADesired,### <!-- rest of code -->
|
| 6 |
+
uint amountBDesired,
|
| 7 |
+
uint /amountAMin,
|
| 8 |
+
uint amountBMin
|
| 9 |
+
) internal virtual returns (uint amountA, uint amountB) {
|
| 10 |
+
// create the pair if it doesn't exist yet
|
| 11 |
+
if (IOKCSwapFactory(factory).getPair(tokenA, tokenB) == address(0)) {
|
| 12 |
+
IOKCSwapFactory(factory).createPair(tokenA, tokenB);
|
| 13 |
+
}
|
| 14 |
+
(uint reserveA, uint reserveB) = OKCSwapLibrary.getReserves(factory, tokenA, tokenB, pairCodeHash);
|
| 15 |
+
if (reserveA == 0 && reserveB == 0) {
|
| 16 |
+
(amountA, amountB) = (amountADesired, amountBDesired);
|
| 17 |
+
} else {
|
| 18 |
+
uint amountBOptimal = OKCSwapLibrary.quote(amountADesired, reserveA, reserveB);
|
| 19 |
+
if (amountBOptimal <= amountBDesired) {
|
| 20 |
+
require(amountBOptimal >= amountBMin, 'OKCSwapRouter: INSUFFICIENT_B_AMOUNT');
|
| 21 |
+
(amountA, amountB) = (amountADesired, amountBOptimal);
|
| 22 |
+
} else {
|
| 23 |
+
uint amountAOptimal = OKCSwapLibrary.quote(amountBDesired, reserveB, reserveA);
|
| 24 |
+
assert(amountAOptimal <= amountADesired);
|
| 25 |
+
require(amountAOptimal >= amountAMin, 'OKCSwapRouter: INSUFFICIENT_A_AMOUNT');
|
| 26 |
+
(amountA, amountB) = (amountAOptimal, amountBDesired);
|
| 27 |
+
}
|
| 28 |
+
}
|
| 29 |
+
}
|
| 30 |
+
function addLiquidity(
|
| 31 |
+
address tokenA,
|
| 32 |
+
address tokenB,
|
| 33 |
+
uint amountADesired,
|
| 34 |
+
uint amountBDesired,
|
| 35 |
+
uint amountAMin,
|
| 36 |
+
uint amountBMin,
|
| 37 |
+
address to,
|
| 38 |
+
uint deadline
|
| 39 |
+
) external virtual override ensure(deadline) returns (uint amountA, uint amountB, uint liquidity) {
|
| 40 |
+
(amountA, amountB) = _addLiquidity(tokenA, tokenB, amountADesired, amountBDesired, amountAMin, amountBMin);
|
| 41 |
+
address pair = OKCSwapLibrary.pairFor(factory, tokenA, tokenB, pairCodeHash);
|
| 42 |
+
TransferHelper.safeTransferFrom(tokenA, msg.sender, pair, amountA);
|
| 43 |
+
TransferHelper.safeTransferFrom(tokenB, msg.sender, pair, amountB);
|
| 44 |
+
liquidity = IOKCSwapPair(pair).mint(to);
|
| 45 |
+
}
|
| 46 |
+
function addLiquidityOKT( # add liquidity for to token: (0xb0557906c617f0048A700758606f64b33D0C41A6)
|
| 47 |
+
address token,
|
| 48 |
+
uint amountTokenDesired,
|
| 49 |
+
uint amountTokenMin,
|
| 50 |
+
uint amountOKTMin,
|
| 51 |
+
address to,
|
| 52 |
+
uint deadline
|
| 53 |
+
) external virtual override payable ensure(deadline) returns (uint amountToken, uint amountOKT, uint liquidity) {
|
| 54 |
+
(amountToken, amountOKT) = _addLiquidity(
|
| 55 |
+
token,
|
| 56 |
+
WOKT,
|
| 57 |
+
amountTokenDesired,
|
| 58 |
+
msg.value,
|
| 59 |
+
amountTokenMin,
|
| 60 |
+
amountOKTMin
|
| 61 |
+
);
|
| 62 |
+
address pair = OKCSwapLibrary.pairFor(factory, token, WOKT, pairCodeHash);
|
| 63 |
+
TransferHelper.safeTransferFrom(token, msg.sender, pair, amountToken);
|
| 64 |
+
IWOKT(WOKT).deposit{value: amountOKT}();
|
| 65 |
+
assert(IWOKT(WOKT).transfer(pair, amountOKT));
|
| 66 |
+
liquidity = IOKCSwapPair(pair).mint(to);
|
| 67 |
+
// refund dust OKT, if any
|
| 68 |
+
if (msg.value > amountOKT) TransferHelper.safeTransferOKT(msg.sender, msg.value - amountOKT);
|
| 69 |
+
}
|
| 70 |
+
|