import { useState } from "react"; import Web3 from "web3"; import { Button } from "./Button"; import { Input } from "./Input"; interface RevealProps { account: string; contract: any; config: Config | null; web3: Web3 | null; setStatus: (status: string) => void; } export default function Reveal({ account, contract, config, web3, setStatus, }: Readonly) { const [loading, setLoading] = useState(false); const [revealMove, setRevealMove] = useState(""); const [bothRevealed, setBothRevealed] = useState(""); const [playerARevealed, setPlayerARevealed] = useState(""); const [playerBRevealed, setPlayerBRevealed] = useState(""); const [revealTimeLeft, setRevealTimeLeft] = useState(""); // Reveal phase read-only handlers const handleBothRevealed = async () => { if (!contract) return; setLoading(true); try { const res = await contract.methods.bothRevealed().call(); setBothRevealed(res ? "true" : "false"); } catch (err: any) { setStatus("Failed to fetch bothRevealed: " + err.message); } finally { setLoading(false); } }; const handlePlayerARevealed = async () => { if (!contract) return; setLoading(true); try { const res = await contract.methods.playerARevealed().call(); setPlayerARevealed(res ? "true" : "false"); } catch (err: any) { setStatus("Failed to fetch playerARevealed: " + err.message); } finally { setLoading(false); } }; const handlePlayerBRevealed = async () => { if (!contract) return; setLoading(true); try { const res = await contract.methods.playerBRevealed().call(); setPlayerBRevealed(res ? "true" : "false"); } catch (err: any) { setStatus("Failed to fetch playerBRevealed: " + err.message); } finally { setLoading(false); } }; const handleRevealTimeLeft = async () => { if (!contract) return; setLoading(true); try { const res = await contract.methods.revealTimeLeft().call(); setRevealTimeLeft(res.toString()); } catch (err: any) { setStatus("Failed to fetch revealTimeLeft: " + err.message); } finally { setLoading(false); } }; const handleReveal = async () => { if (!contract || !web3 || !account) return; setLoading(true); setStatus(""); try { const tx = contract.methods.reveal(revealMove); const gas = await tx.estimateGas({ from: account }); const result = await (globalThis as any).ethereum.request({ method: "eth_sendTransaction", params: [ { from: account, to: config?.GAME_CONTRACT_ADDRESS, data: tx.encodeABI(), gas: web3.utils.toHex(gas), chainId: web3.utils.toHex(await web3.eth.net.getId()), }, ], }); setStatus("Reveal tx sent: " + result); } catch (err: any) { setStatus("Reveal failed: " + err.message); } finally { setLoading(false); } }; return (

reveal(string clearMove)

setRevealMove(e.target.value)} className="mr-2" />
{bothRevealed}
{playerARevealed}
{playerBRevealed}
{revealTimeLeft}
); }