"use client"; import { useEffect, useRef } from "react"; import { gsap } from "gsap"; import { CONTRACT_ADDRESSES } from "@/lib/web3/contracts"; import { CHAIN138_TOKENS, formatTokenAmount } from "@/lib/tokens"; import { useTokenBalances } from "@/lib/hooks/useTokenBalances"; import { formatUsd, tokenUsdValue, useUsdPrices } from "@/lib/prices"; import { formatAddress } from "@/lib/utils"; import { CHAIN138_ID } from "@/lib/constants/chain138"; export function BalanceDisplay() { const treasuryAddress = CONTRACT_ADDRESSES.TreasuryWallet as `0x${string}` | undefined; const displayRef = useRef(null); const { ethUsd, isLoading: pricesLoading } = useUsdPrices(); const { nativeBalance, cusdtRaw, cusdcRaw, erc20Tokens, isLoading: balancesLoading, } = useTokenBalances(treasuryAddress); const loading = balancesLoading || pricesLoading; useEffect(() => { if (displayRef.current && nativeBalance) { gsap.from(displayRef.current, { opacity: 0, y: 20, duration: 0.8, ease: "power3.out", }); } }, [nativeBalance]); if (loading && !nativeBalance && cusdtRaw === undefined) { return (

Loading treasury balance…

); } if (!treasuryAddress) { return (

Treasury wallet not configured

); } const ethRaw = nativeBalance?.value; const ethUsdVal = tokenUsdValue(ethRaw, 18, "ETH", ethUsd); const cusdtUsd = tokenUsdValue(cusdtRaw, erc20Tokens[0].decimals, "cUSDT", ethUsd); const cusdcUsd = tokenUsdValue(cusdcRaw, erc20Tokens[1].decimals, "cUSDC", ethUsd); const totalUsd = [ethUsdVal, cusdtUsd, cusdcUsd].reduce((sum, v) => { if (v == null) return sum; return (sum ?? 0) + v; }, null) ?? 0; const formattedNative = nativeBalance?.formatted ?? "0"; return (

Treasury Balance

Multisig · {formatAddress(treasuryAddress)} · Chain {CHAIN138_ID}

Estimated total

{formatUsd(totalUsd)}

{formattedNative}

{nativeBalance?.symbol ?? "ETH"}

{formatUsd(ethUsdVal)}

{cusdtRaw !== undefined && (
{formatTokenAmount(cusdtRaw.toString(), erc20Tokens[0])} {formatUsd(cusdtUsd)}
)} {cusdcRaw !== undefined && (
{formatTokenAmount(cusdcRaw.toString(), erc20Tokens[1])} {formatUsd(cusdcUsd)}
)}
); }