import { useState } from 'react' import { useReadContract, useWriteContract, useWaitForTransactionReceipt } from 'wagmi' import { mainnet } from 'wagmi/chains' import { CONTRACT_ADDRESSES } from '../../config/contracts' import { MAINNET_TETHER_ABI } from '../../abis/MainnetTether' import toast from 'react-hot-toast' export default function MainnetTetherAdmin() { const [blockNumber, setBlockNumber] = useState('') const [newAdmin, setNewAdmin] = useState('') const contractAddress = CONTRACT_ADDRESSES.mainnet.MAINNET_TETHER // Read contract state const { data: admin, refetch: refetchAdmin } = useReadContract({ address: contractAddress, abi: MAINNET_TETHER_ABI, functionName: 'admin', chainId: mainnet.id, }) const { data: paused, refetch: refetchPaused } = useReadContract({ address: contractAddress, abi: MAINNET_TETHER_ABI, functionName: 'paused', chainId: mainnet.id, }) const { data: anchoredBlockCount } = useReadContract({ address: contractAddress, abi: MAINNET_TETHER_ABI, functionName: 'getAnchoredBlockCount', chainId: mainnet.id, }) // Write contract functions const { writeContract, data: hash, isPending } = useWriteContract() const { isLoading: isConfirming, isSuccess } = useWaitForTransactionReceipt({ hash, }) const handlePause = () => { writeContract( { address: contractAddress, abi: MAINNET_TETHER_ABI, functionName: 'pause', chainId: mainnet.id, }, { onSuccess: () => { toast.success('Pause transaction submitted') refetchPaused() }, onError: (error: any) => { toast.error(`Error: ${error.message || 'Transaction failed'}`) }, } ) } const handleUnpause = () => { writeContract( { address: contractAddress, abi: MAINNET_TETHER_ABI, functionName: 'unpause', chainId: mainnet.id, }, { onSuccess: () => { toast.success('Unpause transaction submitted') refetchPaused() }, onError: (error: any) => { toast.error(`Error: ${error.message || 'Transaction failed'}`) }, } ) } const handleSetAdmin = () => { if (!newAdmin || !/^0x[a-fA-F0-9]{40}$/.test(newAdmin)) { toast.error('Invalid admin address') return } writeContract( { address: contractAddress, abi: MAINNET_TETHER_ABI, functionName: 'setAdmin', args: [newAdmin as `0x${string}`], chainId: mainnet.id, }, { onSuccess: () => { toast.success('Admin change transaction submitted') setNewAdmin('') refetchAdmin() }, onError: (error: any) => { toast.error(`Error: ${error.message || 'Transaction failed'}`) }, } ) } const handleCheckBlock = () => { if (!blockNumber) { toast.error('Please enter a block number') return } // This would require a custom hook to read state proofs toast('Block checking feature - implement with custom hook', { icon: 'ℹ️' }) } return (
{/* Contract Info */}

Contract Information

Contract Address: {contractAddress}
Current Admin: {admin || 'Loading...'}
Status: {paused ? '⏸️ Paused' : '▶️ Active'}
Anchored Blocks: {anchoredBlockCount?.toString() || '0'}
{/* Admin Actions */}

Admin Actions

{/* Pause/Unpause */}
{/* Set Admin */}
setNewAdmin(e.target.value)} placeholder="0x..." className="flex-1 px-4 py-2 bg-white/10 border border-white/20 rounded-lg text-white placeholder-white/40 focus:outline-none focus:border-green-500" />
{/* Block Query */}

Query State Proof

setBlockNumber(e.target.value)} placeholder="Block number" className="flex-1 px-4 py-2 bg-white/10 border border-white/20 rounded-lg text-white placeholder-white/40 focus:outline-none focus:border-green-500" />
{/* Transaction Status */} {hash && (

Transaction: {hash}

{isConfirming &&

⏳ Confirming...

} {isSuccess && (

✅ Transaction confirmed!{' '} View on Etherscan

)}
)} {/* Explorer Link */}
View Contract on Etherscan →
) }