import React, { useEffect, useState } from 'react'; import { usePolkadot } from '@/contexts/PolkadotContext'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { Badge } from '@/components/ui/badge'; import { Activity, Wifi, WifiOff, Users, Box, TrendingUp } from 'lucide-react'; export const NetworkStats: React.FC = () => { const { api, isApiReady, error } = usePolkadot(); const [blockNumber, setBlockNumber] = useState(0); const [blockHash, setBlockHash] = useState(''); const [finalizedBlock, setFinalizedBlock] = useState(0); const [validatorCount, setValidatorCount] = useState(0); const [peers, setPeers] = useState(0); useEffect(() => { if (!api || !isApiReady) return; let unsubscribeNewHeads: () => void; let unsubscribeFinalizedHeads: () => void; const subscribeToBlocks = async () => { try { // Subscribe to new blocks unsubscribeNewHeads = await api.rpc.chain.subscribeNewHeads((header) => { setBlockNumber(header.number.toNumber()); setBlockHash(header.hash.toHex()); }); // Subscribe to finalized blocks unsubscribeFinalizedHeads = await api.rpc.chain.subscribeFinalizedHeads((header) => { setFinalizedBlock(header.number.toNumber()); }); // Get validator count const validators = await api.query.session.validators(); setValidatorCount(validators.length); // Get peer count const health = await api.rpc.system.health(); setPeers(health.peers.toNumber()); } catch (err) { console.error('Failed to subscribe to blocks:', err); } }; subscribeToBlocks(); return () => { if (unsubscribeNewHeads) unsubscribeNewHeads(); if (unsubscribeFinalizedHeads) unsubscribeFinalizedHeads(); }; }, [api, isApiReady]); if (error) { return ( Network Disconnected

{error}

Make sure your validator node is running at ws://127.0.0.1:9944

); } if (!isApiReady) { return ( Connecting to Network... ); } return (
{/* Connection Status */} Network Status
Connected {peers} peers
{/* Latest Block */} Latest Block
#{blockNumber.toLocaleString()}
{blockHash.slice(0, 10)}...{blockHash.slice(-8)}
{/* Finalized Block */} Finalized Block
#{finalizedBlock.toLocaleString()}
{blockNumber - finalizedBlock} blocks behind
{/* Validators */} Active Validators
{validatorCount}
Securing the network
); };