fluid-contracts-public/test/js-scripts/getRatioAtTick-precision.ts
2024-07-11 13:05:09 +00:00

26 lines
976 B
TypeScript

const Decimal = require("decimal.js");
const ethers = require("ethers");
Decimal.config({ precision: 100, rounding: Decimal.ROUND_DOWN });
// Process the input ticks from command line arguments
const tickArray = process.argv[2].split(",").map((tick) => parseInt(tick, 10));
const resultsArray = [];
for (let tick of tickArray) {
let base = new Decimal(1.0015);
if (tick < 0) {
// For negative ticks, use the inverse operation
base = new Decimal(1).div(new Decimal(1.0015));
tick = -tick; // Make the tick positive for the calculation
}
// Calculate 2^96 * (base^tick)
const jsResult = base.pow(tick).mul(new Decimal(2).pow(96)).toFixed(0);
resultsArray.push(jsResult);
}
// Encode the array of results as a uint256[] for Solidity
const encodedResults = ethers.utils.defaultAbiCoder.encode(["uint256[]"], [resultsArray]);
process.stdout.write(encodedResults);
// 2^96 * (1.0015^32701) = 153360750482885682694572874635223624670375960075523.940454124