@swapper-finance/sdk
Version:
JavaScript SDK form Swapper
46 lines (42 loc) • 1.5 kB
text/typescript
import { Balances } from "@src/interfaces";
import { abbreviateNumber, weiToHumanReadable } from "./numbers";
import { TokenWithChain } from "@src/models";
import { CASH_TOKEN_ADDRESS_BY_CHAIN } from "@src/config";
export const convertTokensBalances = (
tokensBalances: Record<string, Record<string, string>>,
allTokens: TokenWithChain[],
): Record<string, Record<string, Balances>> => {
const result: Record<string, Record<string, Balances>> = {};
const decimalsMap = {};
allTokens.forEach((token) => {
if (!decimalsMap[token.chainId]) {
decimalsMap[token.chainId] = {};
}
decimalsMap[token.chainId][token.address] = token.decimals;
});
for (const chainId in tokensBalances) {
result[chainId] = {};
if (!decimalsMap[chainId]) {
continue;
}
for (const tokenAddress in tokensBalances[chainId]) {
const wei = tokensBalances[chainId][tokenAddress];
const humanReadable = weiToHumanReadable({
amount: wei || "0",
decimals: decimalsMap[chainId][tokenAddress] || 18,
precisionFractionalPlaces: decimalsMap[chainId][tokenAddress] || 18,
});
const abbreviated = abbreviateNumber(
humanReadable,
tokenAddress === CASH_TOKEN_ADDRESS_BY_CHAIN[chainId] ? 2 : undefined,
tokenAddress === CASH_TOKEN_ADDRESS_BY_CHAIN[chainId],
);
result[chainId][tokenAddress] = {
wei: wei || "0",
humanReadable,
abbreviated,
};
}
}
return result;
};