import { useReadContract, useAccount } from "wagmi";
import { CONTRACTS, VAULT_ABI, ROUTER_ABI } from "@/lib/contracts";
export function VaultDashboard() {
const { address } = useAccount();
// Fetch vault statistics
const { data: totalAssets } = useReadContract({
address: CONTRACTS.VAULT,
abi: VAULT_ABI,
functionName: "totalManagedAssets"
});
const { data: userShares } = useReadContract({
address: CONTRACTS.VAULT,
abi: VAULT_ABI,
functionName: "balanceOf",
args: [address!],
query: { enabled: !!address }
});
const { data: userValue } = useReadContract({
address: CONTRACTS.VAULT,
abi: VAULT_ABI,
functionName: "convertToAssets",
args: [userShares || 0n]
});
// Fetch strategy allocations
const { data: portfolioState } = useReadContract({
address: CONTRACTS.ROUTER,
abi: ROUTER_ABI,
functionName: "getPortfolioState"
});
// Fetch APY from API route
const { data: apyData } = useQuery({
queryKey: ["apy"],
queryFn: () => fetch("/api/vault/apy").then(res => res.json())
});
return (
<div>
{/* Stats cards */}
<div className="grid grid-cols-3 gap-4">
<StatCard title="TVL" value={formatEther(totalAssets)} />
<StatCard title="APY" value={`${apyData?.apy}%`} />
<StatCard title="Your Shares" value={formatEther(userShares)} />
</div>
{/* Strategy allocations */}
<div className="grid grid-cols-2 gap-4">
{portfolioState?.strats.map((strat, i) => (
<StrategyCard
key={strat}
address={strat}
balance={portfolioState.balances[i]}
target={portfolioState.targets[i]}
/>
))}
</div>
{/* Actions */}
<div>
<DepositModal />
<WithdrawModal />
</div>
</div>
);
}