@angleprotocol/sdk
Version:
SDK for Angle DApps
144 lines • 4.6 kB
JavaScript
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
;