utils
量身定制
工具函数
1、输入框
// 参数:BigNumber
import { BigNumberish } from 'ethers';
// 限制小数位数
export const limitDecimals = (amount: BigNumberish, maxDecimals?: number) => {
let amountStr = amount.toString();
if (maxDecimals === undefined) {
return amountStr;
}
if (maxDecimals === 0) {
return amountStr.split('.')[0];
}
const dotIndex = amountStr.indexOf('.');
if (dotIndex !== -1) {
const decimals = amountStr.length - dotIndex - 1;
if (decimals > maxDecimals) {
amountStr = amountStr.substr(0, amountStr.length - (decimals - maxDecimals));
}
}
return amountStr;
};
// 填充小数
export const padDecimals = (amount: BigNumberish, minDecimals: number) => {
let amountStr = amount.toString();
const dotIndex = amountStr.indexOf('.');
if (dotIndex !== -1) {
const decimals = amountStr.length - dotIndex - 1;
if (decimals < minDecimals) {
amountStr = amountStr.padEnd(amountStr.length + (minDecimals - decimals), '0');
}
} else {
amountStr = amountStr + '.0000';
}
return amountStr;
};
// 带逗号的数字
export function numberWithCommas(x: BigNumberish) {
if (!x) {
return '...';
}
const parts = x.toString().split('.');
parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ',');
return parts.join('.');
}
// 格式化金额
export const formatAmount = (
amount: BigNumberish | undefined,
tokenDecimals: number,
displayDecimals?: number,
useCommas?: boolean,
defaultValue?: string,
) => {
if (!defaultValue) {
defaultValue = '...';
}
if (amount === undefined || amount.toString().length === 0) {
return defaultValue;
}
if (displayDecimals === undefined) {
displayDecimals = 4;
}
let amountStr = ethers.utils.formatUnits(amount, tokenDecimals);
amountStr = limitDecimals(amountStr, displayDecimals);
if (displayDecimals !== 0) {
amountStr = padDecimals(amountStr, displayDecimals);
}
if (useCommas) {
return numberWithCommas(amountStr);
}
return amountStr;
};
2、ETH地址
// 是否是一个eth地址
function isETHAddress(address: string) {
return ethers.utils.isAddress(address);
};
// 两个地址是否相等
function isEqualsToken(...adrs: (string | undefined)[]) {
const indexAdr = adrs[0]?.toLowerCase();
return adrs.every((e) => e?.toLowerCase() === indexAdr);
}