hiCity-nft/src/utils/formatBalance.ts

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()
}