71 lines
2.6 KiB
TypeScript
71 lines
2.6 KiB
TypeScript
import BigNumber from 'bignumber.js'
|
|
import { ethers } from 'ethers'
|
|
import { formatUnits } from 'ethers/lib/utils'
|
|
import { BIG_TEN } from './bigNumber'
|
|
|
|
/**
|
|
* Take a formatted amount, e.g. 15 BNB and convert it to full decimal value, e.g. 15000000000000000
|
|
*/
|
|
export const getDecimalAmount = (amount: BigNumber, decimals = 18) => {
|
|
return new BigNumber(amount).times(BIG_TEN.pow(decimals))
|
|
}
|
|
export const getDecimalAmountNumber = (amount: BigNumber | number, decimals = 18) => {
|
|
return new BigNumber(amount).times(BIG_TEN.pow(decimals)).toNumber()
|
|
}
|
|
|
|
export const getBalanceAmount = (amount: BigNumber | number, decimals = 18) => {
|
|
return new BigNumber(amount).dividedBy(BIG_TEN.pow(decimals))
|
|
}
|
|
|
|
/**
|
|
* This function is not really necessary but is used throughout the site.
|
|
*/
|
|
export const getBalanceNumber = (balance: BigNumber | number, decimals = 18, decimalPlaces?: number) => {
|
|
const displayBalance = getBalanceAmount(balance, decimals)
|
|
return decimalPlaces ? displayBalance.decimalPlaces(decimalPlaces).toNumber() : displayBalance.toNumber()
|
|
}
|
|
|
|
export const getFullDisplayBalance = (balance: BigNumber, decimals = 18, displayDecimals?: number) => {
|
|
return getBalanceAmount(balance, decimals).toFixed(displayDecimals)
|
|
}
|
|
|
|
export const formatNumber = (number: number, minPrecision = 2, maxPrecision = 2) => {
|
|
const options = {
|
|
minimumFractionDigits: minPrecision,
|
|
maximumFractionDigits: maxPrecision,
|
|
}
|
|
return number.toLocaleString(undefined, options)
|
|
}
|
|
|
|
/**
|
|
* Method to format the display of wei given an ethers.BigNumber object
|
|
* Note: does NOT round
|
|
*/
|
|
export const formatBigNumber = (number: ethers.BigNumber, displayDecimals = 18, decimals = 18) => {
|
|
const remainder = number.mod(ethers.BigNumber.from(10).pow(decimals - displayDecimals))
|
|
return formatUnits(number.sub(remainder), decimals)
|
|
}
|
|
|
|
/**
|
|
* Method to format the display of wei given an ethers.BigNumber object with toFixed
|
|
* Note: rounds
|
|
*/
|
|
export const formatBigNumberToFixed = (number: ethers.BigNumber, displayDecimals = 18, decimals = 18) => {
|
|
const formattedString = formatUnits(number, decimals)
|
|
return (+formattedString).toFixed(displayDecimals)
|
|
}
|
|
|
|
/**
|
|
* Formats a FixedNumber like BigNumber
|
|
* i.e. Formats 9763410526137450427.1196 into 9.763 (3 display decimals)
|
|
*/
|
|
export const formatFixedNumber = (number: ethers.FixedNumber, displayDecimals = 18, decimals = 18) => {
|
|
// Remove decimal
|
|
const [leftSide] = number.toString().split('.')
|
|
return formatBigNumber(ethers.BigNumber.from(leftSide), displayDecimals, decimals)
|
|
}
|
|
|
|
export const formatDivNumber = (number: number, decimals = 4) => {
|
|
return new BigNumber(number).div(BIG_TEN.pow(decimals)).toNumber()
|
|
}
|