31 lines
897 B
TypeScript
31 lines
897 B
TypeScript
|
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()
|
||
|
}
|