diff --git a/src/components/WriterTradingStats.tsx b/src/components/WriterTradingStats.tsx index 369cb6e7..621f9c1f 100644 --- a/src/components/WriterTradingStats.tsx +++ b/src/components/WriterTradingStats.tsx @@ -13,30 +13,32 @@ interface WriterTradingStatsProps { export function WriterTradingStats({ storyline }: WriterTradingStatsProps) { const tokenAddress = storyline.token_address as Address; - // Fetch token price - const { data: price } = useQuery({ - queryKey: ["writer-price", tokenAddress], + + // Fetch price + TVL together so they succeed/fail atomically + const { data } = useQuery({ + queryKey: ["writer-stats", tokenAddress], queryFn: async () => { - const result = await publicClient.readContract({ - address: MCV2_BOND, - abi: mcv2BondAbi, - functionName: "priceForNextMint", - args: [tokenAddress], - }); - return result; + const [priceRaw, tvlData] = await Promise.all([ + publicClient.readContract({ + address: MCV2_BOND, + abi: mcv2BondAbi, + functionName: "priceForNextMint", + args: [tokenAddress], + }), + getTokenTVL(tokenAddress), + ]); + const decimals = tvlData?.decimals ?? 18; + return { + price: formatUnits(BigInt(priceRaw), decimals), + tvl: tvlData?.tvl ?? formatUnits(BigInt(0), decimals), + decimals, + }; }, enabled: !!tokenAddress, + retry: 2, + refetchInterval: 30000, }); - // Fetch TVL via getTokenTVL (uses correct reserve token decimals) - const { data: tvlData } = useQuery({ - queryKey: ["writer-tvl", tokenAddress], - queryFn: () => getTokenTVL(tokenAddress), - enabled: !!tokenAddress, - }); - - const decimals = tvlData?.decimals; - return (