/** * Chain Management Dashboard * Admin UI for managing all supported chains, adapters, and deployments */ import { useState, useEffect } from 'react'; import { useAccount } from 'wagmi'; import { ethers } from 'ethers'; import toast from 'react-hot-toast'; interface ChainMetadata { chainId: number; chainIdentifier: string; chainType: string; adapter: string; isActive: boolean; explorerUrl: string; minConfirmations: number; avgBlockTime: number; } export default function ChainManagementDashboard() { const { address, isConnected } = useAccount(); const [chains, setChains] = useState([]); const [loading, setLoading] = useState(true); const [selectedChain, setSelectedChain] = useState(''); useEffect(() => { if (isConnected) { loadChains(); } }, [isConnected, address]); const loadChains = async () => { try { setLoading(true); // TODO: Connect to ChainRegistry contract // const provider = new ethers.JsonRpcProvider(process.env.NEXT_PUBLIC_RPC_URL); // const registry = new ethers.Contract(REGISTRY_ADDRESS, REGISTRY_ABI, provider); // const [evmChainIds, evmChains] = await registry.getAllEVMChains(); // const [nonEvmIds, nonEvmChains] = await registry.getAllNonEVMChains(); // Mock data for now setChains([ { chainId: 138, chainIdentifier: 'EVM-138', chainType: 'EVM', adapter: '0x...', isActive: true, explorerUrl: 'https://explorer.d-bis.org', minConfirmations: 12, avgBlockTime: 2 }, { chainId: 50, chainIdentifier: 'EVM-50', chainType: 'XDC', adapter: '0x...', isActive: true, explorerUrl: 'https://explorer.xdc.network', minConfirmations: 12, avgBlockTime: 2 } ]); } catch (error: any) { toast.error(`Failed to load chains: ${error.message}`); } finally { setLoading(false); } }; const toggleChain = async (chainId: number, chainIdentifier: string, currentStatus: boolean) => { try { // TODO: Call ChainRegistry.setChainActive() toast.success(`Chain ${currentStatus ? 'disabled' : 'enabled'}`); loadChains(); } catch (error: any) { toast.error(`Failed to toggle chain: ${error.message}`); } }; if (!isConnected) { return (

Please connect your wallet to manage chains.

); } return (

Chain Management

{loading ? (
Loading chains...
) : (
{chains.map((chain) => (

{chain.chainIdentifier} ({chain.chainType})

Adapter: {chain.adapter.slice(0, 10)}...

Explorer: {chain.explorerUrl}

{chain.isActive ? 'Active' : 'Inactive'}
))}
)}

Add New Chain

); }