infrastructure-upgrade/lib/v3-periphery/test/shared/formatSqrtRatioX96.ts

31 lines
897 B
TypeScript
Raw Normal View History

2023-04-08 21:46:18 +03:00
import { BigNumber } from 'ethers'
import Decimal from 'decimal.js'
const TWO = BigNumber.from(2)
const TEN = BigNumber.from(10)
const FIVE_SIG_FIGS_POW = new Decimal(10).pow(5)
export function formatSqrtRatioX96(
sqrtRatioX96: BigNumber | number,
decimalsToken0: number = 18,
decimalsToken1: number = 18
): string {
Decimal.set({ toExpPos: 9_999_999, toExpNeg: -9_999_999 })
let ratioNum = ((parseInt(sqrtRatioX96.toString()) / 2 ** 96) ** 2).toPrecision(5)
let ratio = new Decimal(ratioNum.toString())
// adjust for decimals
if (decimalsToken1 < decimalsToken0) {
ratio = ratio.mul(TEN.pow(decimalsToken0 - decimalsToken1).toString())
} else if (decimalsToken0 < decimalsToken1) {
ratio = ratio.div(TEN.pow(decimalsToken1 - decimalsToken0).toString())
}
if (ratio.lessThan(FIVE_SIG_FIGS_POW)) {
return ratio.toPrecision(5)
}
return ratio.toString()
}