minterjs-util
Version:
Utils for Minter
86 lines (80 loc) • 2.82 kB
JavaScript
;
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
*/