ethers-maths
Version:
➗ Useful ethers-based math libraries to ease the journey through off-chain fixed-point arithmetics
82 lines (81 loc) • 3.03 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.toRayFloat = exports.formatRay = exports.rayToWad = exports.rayToPercent = exports.rayToDecimals = exports.rayExpN = exports.rayPowDown = exports.rayPowUp = exports.rayPow = exports.rayAvg = exports.rayDivDown = exports.rayDivUp = exports.rayDiv = exports.rayMulDown = exports.rayMulUp = exports.rayMul = exports.raySub = exports.rayAdd = exports.parseRay = void 0;
const ethers_1 = require("ethers");
const constants_1 = require("./constants");
const utils_1 = require("./utils");
const format_1 = require("./format");
const parseRay = (value) => (0, ethers_1.parseUnits)(value, 27);
exports.parseRay = parseRay;
const rayAdd = (x, ray) => {
return (0, exports.rayMul)(x, constants_1.RAY + (0, ethers_1.toBigInt)(ray));
};
exports.rayAdd = rayAdd;
const raySub = (x, ray) => {
return (0, exports.rayMul)(x, constants_1.RAY - (0, ethers_1.toBigInt)(ray));
};
exports.raySub = raySub;
const rayMul = (x, other) => {
return (0, utils_1.mulDivHalfUp)(x, other, constants_1.RAY);
};
exports.rayMul = rayMul;
const rayMulUp = (x, other) => {
return (0, utils_1.mulDivUp)(x, other, constants_1.RAY);
};
exports.rayMulUp = rayMulUp;
const rayMulDown = (x, other) => {
return (0, utils_1.mulDivDown)(x, other, constants_1.RAY);
};
exports.rayMulDown = rayMulDown;
const rayDiv = (x, other) => {
return (0, utils_1.mulDivHalfUp)(x, constants_1.RAY, other);
};
exports.rayDiv = rayDiv;
const rayDivUp = (x, other) => {
return (0, utils_1.mulDivUp)(x, constants_1.RAY, other);
};
exports.rayDivUp = rayDivUp;
const rayDivDown = (x, other) => {
return (0, utils_1.mulDivDown)(x, constants_1.RAY, other);
};
exports.rayDivDown = rayDivDown;
const rayAvg = (x, other, ray) => {
return (0, utils_1.avgHalfUp)(x, other, ray, constants_1.RAY);
};
exports.rayAvg = rayAvg;
const rayPow = (x, exponent) => {
return (0, utils_1.pow)(x, exponent, constants_1.RAY, utils_1.mulDivHalfUp);
};
exports.rayPow = rayPow;
const rayPowUp = (x, exponent) => {
return (0, utils_1.pow)(x, exponent, constants_1.RAY, utils_1.mulDivUp);
};
exports.rayPowUp = rayPowUp;
const rayPowDown = (x, exponent) => {
return (0, utils_1.pow)(x, exponent, constants_1.RAY, utils_1.mulDivDown);
};
exports.rayPowDown = rayPowDown;
const rayExpN = (x, N) => {
return (0, utils_1.expN)(x, N, constants_1.RAY, utils_1.mulDivDown);
};
exports.rayExpN = rayExpN;
const rayToDecimals = (x, decimals) => {
return (0, format_1.toDecimals)(x, decimals, 27);
};
exports.rayToDecimals = rayToDecimals;
const rayToPercent = (x) => {
return (0, exports.rayToDecimals)(x, 4);
};
exports.rayToPercent = rayToPercent;
const rayToWad = (x) => {
return (0, exports.rayToDecimals)(x, 18);
};
exports.rayToWad = rayToWad;
const formatRay = (x, digits) => {
return (0, format_1.format)(x, 27, digits);
};
exports.formatRay = formatRay;
const toRayFloat = (x) => {
return (0, format_1.toFloat)(x, 27);
};
exports.toRayFloat = toRayFloat;