UNPKG

@angleprotocol/sdk

Version:
144 lines 4.6 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.formatNumber = exports.sqrt = exports.piecewiseFunction = exports.formatAmount = exports.parseAmount = exports.ether = exports.gwei = exports.divBy10ePow = exports.divBy10e18 = exports.multBy10e9 = exports.multBy10e15 = exports.multByPow = exports.mwei = void 0; const ethers_1 = require("ethers"); const tiny_invariant_1 = __importDefault(require("tiny-invariant")); function mwei(number) { return ethers_1.utils.parseUnits(number.toString(), 'mwei'); } exports.mwei = mwei; function multByPow(number, pow) { return ethers_1.utils.parseUnits(number.toString(), pow); } exports.multByPow = multByPow; function multBy10e15(number) { return ethers_1.utils.parseUnits(number.toString(), 15); } exports.multBy10e15 = multBy10e15; function multBy10e9(number) { return ethers_1.utils.parseUnits(number.toString(), 'gwei'); } exports.multBy10e9 = multBy10e9; function divBy10e18(bigNumber) { return parseFloat(ethers_1.utils.formatUnits(bigNumber, 'ether')); } exports.divBy10e18 = divBy10e18; function divBy10ePow(bigNumber, pow) { return parseFloat(ethers_1.utils.formatUnits(bigNumber, pow)); } exports.divBy10ePow = divBy10ePow; function gwei(number) { return ethers_1.utils.parseUnits(number.toString(), 'gwei'); } exports.gwei = gwei; function formatGwei(number) { return ethers_1.utils.formatUnits(number, 'gwei'); } function ether(number) { return ethers_1.utils.parseUnits(number.toString(), 'ether'); } exports.ether = ether; function formatEther(number) { return ethers_1.utils.formatEther(number); } function dai(number) { return ethers_1.utils.parseUnits(number.toString(), 18); } function formatDai(number) { return ethers_1.utils.formatEther(number); } function usdc(number) { return ethers_1.utils.parseUnits(number.toString(), 6); } function formatUsdc(number) { return ethers_1.utils.formatUnits(number, 6); } function wbtc(number) { return ethers_1.utils.parseUnits(number.toString(), 8); } function formatWbtc(number) { return ethers_1.utils.formatUnits(number, 8); } exports.parseAmount = { ether, dai, usdc, gwei, wbtc, }; exports.formatAmount = { ether: formatEther, dai: formatDai, usdc: formatUsdc, gwei: formatGwei, wbtc: formatWbtc, }; function piecewiseFunction(value, _xArray, _yArray) { value = ethers_1.BigNumber.from(value); const xArray = _xArray.map((e) => ethers_1.BigNumber.from(e)); const yArray = _yArray.map((e) => ethers_1.BigNumber.from(e)); if (value.gte(xArray[xArray.length - 1])) { return yArray[yArray.length - 1]; } if (value.lte(xArray[0])) { return yArray[0]; } let i = 0; while (value.gte(xArray[i + 1])) { i += 1; } const pct = value .sub(xArray[i]) .mul(gwei(1)) .div(xArray[i + 1].sub(xArray[i])); const normalized = pct .mul(yArray[i + 1].sub(yArray[i])) .div(gwei(1)) .add(yArray[i]); return normalized; } exports.piecewiseFunction = piecewiseFunction; function sqrt(value) { (0, tiny_invariant_1.default)(value.gte(0), 'NEGATIVE'); if (value.lt(Number.MAX_SAFE_INTEGER)) { return ethers_1.BigNumber.from(Math.floor(Math.sqrt(value.toNumber()))); } let z = value.add(1).div(2); let y = value; while (z.sub(y).isNegative()) { y = z; z = value.div(z).add(z).div(2); } return y; } exports.sqrt = sqrt; function formatNumber(num, decimals = 3, output = 'number', round = false) { if (num > 1e20) { num = Number.POSITIVE_INFINITY; } if (round && num > 0 && num < 0.0001) return '<0.0001'; if (num > 0 && num < 1 && output === 'number') { const strs = num.toFixed(20).split('.'); if (strs && strs.length && strs[1]) { for (const n of strs[1]) { if (n != '0') { break; } decimals += 1; } } } let formattedNumber = new Intl.NumberFormat('en-US', { style: output == 'number' ? 'decimal' : 'percent', maximumFractionDigits: decimals, notation: 'compact', }).format(num); formattedNumber = formattedNumber.replace('K', 'k').replace('M', 'm').replace('B', 'b'); return formattedNumber; } exports.formatNumber = formatNumber; //# sourceMappingURL=bignumber.js.map