UNPKG

zerion-sdk

Version:
77 lines (76 loc) 2.89 kB
import { getAddress, parseUnits } from "viem"; // eslint-disable-next-line @typescript-eslint/no-explicit-any export function buildQueryString(params) { const query = {}; for (const [key, value] of Object.entries(params)) { if (value === undefined || value === null) continue; // Skip undefined or null values if (Array.isArray(value)) { query[key] = value.join(","); // Join arrays with commas } else { query[key] = value.toString(); } } return new URLSearchParams(query).toString(); } export function polygonNativeAssetImplementation() { // Skip Recognition of MRC20 Token Contract: // https://polygonscan.com/address/0x0000000000000000000000000000000000001010 // This token has a payable transfer function and messes shit up. return [ { chain_id: "polygon", address: null, decimals: 18, }, ]; } export function scientificToDecimal(num) { // If not in scientific notation, return as is if (!/^\d+\.?\d*e[+-]*\d+$/i.test(num.toString())) { return num.toString(); } const parts = num.toString().toLowerCase().split("e"); const mantissa = parts[0]; const exponent = parseInt(parts[1], 10); // Remove decimal point from mantissa if exists const [whole = "", decimal = ""] = mantissa.split("."); const mantissaWithoutPoint = whole + decimal; if (exponent > 0) { const zerosToAdd = exponent - decimal.length; return mantissaWithoutPoint + "0".repeat(Math.max(0, zerosToAdd)); } else { const absExponent = Math.abs(exponent); return `0.${"0".repeat(absExponent - 1)}${mantissaWithoutPoint}`; } } export function zerionToTokenBalance(userToken) { const { meta, balances } = userToken; const chainId = userToken.chain.chainId; return { ...(chainId ? { chainId } : {}), tokenAddress: meta.contractAddress || null, token: { name: meta.name, symbol: meta.symbol, decimals: meta.decimals, logoUri: meta.tokenIcon || "", }, balance: parseUnits(scientificToDecimal(balances.balance), meta.decimals).toString(), fiatBalance: balances.usdBalance.toFixed(2), fiatConversion: (balances.price || 0).toFixed(2), }; } // Helper function to convert array of UserTokens to TokenBalances export function zerionToTokenBalances(userTokens) { return userTokens .filter((token) => !token.meta.isSpam) // Filter out spam tokens .map(zerionToTokenBalance); } // CoW (and many other Dex Protocols use this to represent native asset). export const NATIVE_ASSET = getAddress("0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE"); export function isNativeAsset(token) { return token.toLowerCase() === NATIVE_ASSET.toLowerCase(); }