UNPKG

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
"use strict"; 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;