import { formatUnits } from 'viem'; /** Convert wei (bigint or string) to a JS number. Core primitive. */ export function weiToNumber(value: bigint | string, decimals = 18): number { const bi = typeof value === 'string' ? BigInt(value || '0') : (value ?? 0n); return Number(formatUnits(bi, decimals)); } /** Format wei to fixed decimal string (e.g. "0.00123") */ export function formatWei(value: bigint | string, decimals = 18, digits = 5): string { const num = weiToNumber(value, decimals); return num === 0 ? '0' : num.toFixed(digits); } /** Format number to compact display (e.g. "1.23K", "4.56M") */ export function compactNumber(value: number): string { return Intl.NumberFormat('en-US', { notation: 'compact', maximumFractionDigits: 2, }).format(value); } /** Format number with commas (e.g. "1,234,567") */ export function commaNumber(value: number): string { if (!Number.isFinite(value)) return '0'; return value.toLocaleString('en-US'); } /** Format a token amount with comma grouping and 2 decimal places (e.g. "1,234.56") */ export function formatTokenAmount(value: number): string { if (!isFinite(value)) return '0.00'; return value.toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2 }); }