UNPKG

minterjs-util

Version:
86 lines (80 loc) 2.82 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.buyCoin = buyCoin; exports.buyCoinByCoin = buyCoinByCoin; exports.sellCoin = sellCoin; exports.sellCoinByBip = sellCoinByBip; var _big = _interopRequireDefault(require("./big.js")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } /** * Bancor sell COIN, calculate received BIP * @param {BancorCoinParams} coin * @param {number} coinAmount - sell COIN * @return {string} - get BIP */ function sellCoin(coin, coinAmount) { if (!isCoinValid(coin)) { return '0'; } coinAmount = Math.min(coin.supply, coinAmount); return new _big["default"](coin.reserve).times(one().minus(Math.pow(one().minus(new _big["default"](coinAmount).div(coin.supply)), one().div(coin.crr)))).toFixed(); // return coin.reserve * (1 - ((1 - coinAmount / coin.supply) ** (1 / coin.crr))); } /** * Bancor sell COIN, calculate needed COIN * @param {BancorCoinParams} coin * @param {number} bipAmount - get BIP * @return {string} - sell COIN */ function sellCoinByBip(coin, bipAmount) { if (!isCoinValid(coin)) { return '0'; } bipAmount = Math.min(coin.reserve, bipAmount); return new _big["default"](coin.supply).times(one().minus(Math.pow(one().minus(new _big["default"](bipAmount).div(coin.reserve)), coin.crr))).toFixed(); // return coin.supply * (1 - ((1 - bipAmount / coin.reserve) ** coin.crr)); } /** * Bancor buy COIN, calculate received COIN * @param {BancorCoinParams} coin * @param {number} bipAmount - pay BIP * @return {string} - get COIN */ function buyCoin(coin, bipAmount) { if (!isCoinValid(coin)) { return '0'; } return new _big["default"](coin.supply).times(new _big["default"](Math.pow(one().plus(new _big["default"](bipAmount).div(coin.reserve)), coin.crr)).minus(1)).toFixed(); // return coin.supply * (((1 + bipAmount / coin.reserve) ** coin.crr) - 1); } /** * Bancor buy COIN, calculate needed BIP * @param {BancorCoinParams} coin * @param {number|string} coinAmount - get COIN * @return {string} - pay BIP */ function buyCoinByCoin(coin, coinAmount) { if (!isCoinValid(coin)) { return '0'; } return new _big["default"](coin.reserve).times(new _big["default"](Math.pow(one().plus(new _big["default"](coinAmount).div(coin.supply)), one().div(coin.crr))).minus(1)).toString(); // return coin.reserve * (((1 + coinAmount / coin.supply) ** (1 / coin.crr)) - 1); } /** * @param {BancorCoinParams} coin * @return {boolean} */ function isCoinValid(coin) { return !!(coin.reserve && coin.supply && coin.crr); } function one() { return new _big["default"](1); } /** * @typedef {object} BancorCoinParams * @property {number|null} supply * @property {number|null} crr * @property {number|null} reserve - from 0 to 1 */