diff --git a/crypto_clash_frontend/app/clash/Commit.tsx b/crypto_clash_frontend/app/clash/Commit.tsx index 0c474f4..b29ffe6 100644 --- a/crypto_clash_frontend/app/clash/Commit.tsx +++ b/crypto_clash_frontend/app/clash/Commit.tsx @@ -1,28 +1,66 @@ +import { useState } from "react"; +import Web3 from "web3"; + interface CommitProps { - playMove: string; - setPlayMove: (v: string) => void; - handlePlay: () => void; - loading: boolean; account: string; contract: any; - bothPlayed: string; - handleBothPlayed: () => void; - revealTimeLeft: string; - handleRevealTimeLeft: () => void; + config: Config | null; + web3: Web3 | null; + setStatus: (status: string) => void; } export default function Commit({ - playMove, - setPlayMove, - handlePlay, - loading, account, contract, - bothPlayed, - handleBothPlayed, - revealTimeLeft, - handleRevealTimeLeft, + config, + web3, + setStatus, }: Readonly) { + const [loading, setLoading] = useState(false); + const [playMove, setPlayMove] = useState(""); + const [bothPlayed, setBothPlayed] = useState(""); + + // Commit phase read-only handlers + const handleBothPlayed = async () => { + if (!contract) return; + setLoading(true); + try { + const res = await contract.methods.bothPlayed().call(); + setBothPlayed(res ? "true" : "false"); + } catch (err: any) { + setStatus("Failed to fetch bothPlayed: " + err.message); + } finally { + setLoading(false); + } + }; + + const handlePlay = async () => { + if (!contract || !web3 || !account) return; + setLoading(true); + setStatus(""); + try { + // playMove should be a hex string (bytes32) + const tx = contract.methods.play(playMove); + 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("Play tx sent: " + result); + } catch (err: any) { + setStatus("Play failed: " + err.message); + } finally { + setLoading(false); + } + }; return (

play(bytes32 encrMove)

@@ -42,11 +80,14 @@ export default function Commit({
- + {bothPlayed}
- - {revealTimeLeft}
); diff --git a/crypto_clash_frontend/app/clash/Reveal.tsx b/crypto_clash_frontend/app/clash/Reveal.tsx index 7fe31c7..45f6aab 100644 --- a/crypto_clash_frontend/app/clash/Reveal.tsx +++ b/crypto_clash_frontend/app/clash/Reveal.tsx @@ -1,3 +1,5 @@ +import { useState } from "react"; + interface RevealProps { revealMove: string; setRevealMove: (v: string) => void; @@ -11,8 +13,6 @@ interface RevealProps { handlePlayerARevealed: () => void; playerBRevealed: string; handlePlayerBRevealed: () => void; - revealTimeLeft: string; - handleRevealTimeLeft: () => void; } export default function Reveal({ @@ -28,9 +28,18 @@ export default function Reveal({ handlePlayerARevealed, playerBRevealed, handlePlayerBRevealed, - revealTimeLeft, - handleRevealTimeLeft, }: Readonly) { + const [revealTimeLeft, setRevealTimeLeft] = useState(""); + + const handleRevealTimeLeft = async () => { + if (!contract) return; + try { + const res = await contract.methods.revealTimeLeft().call(); + setRevealTimeLeft(res.toString()); + } catch (err: any) { + console.error("Failed to fetch revealTimeLeft: " + err.message); + } + }; return (

reveal(string clearMove)

@@ -50,16 +59,36 @@ export default function Reveal({
- + {bothRevealed}
- + {playerARevealed}
- + {playerBRevealed}
- + {revealTimeLeft}
diff --git a/crypto_clash_frontend/app/clash/page.tsx b/crypto_clash_frontend/app/clash/page.tsx index d6f102b..60db0f6 100644 --- a/crypto_clash_frontend/app/clash/page.tsx +++ b/crypto_clash_frontend/app/clash/page.tsx @@ -19,7 +19,6 @@ export default function Clash() { const [registerGameId, setRegisterGameId] = useState("0"); const [registerBet, setRegisterBet] = useState(""); - const [playMove, setPlayMove] = useState(""); const [revealMove, setRevealMove] = useState(""); // State for read-only contract calls const [betMin, setBetMin] = useState(""); @@ -32,8 +31,6 @@ export default function Clash() { const [pastGame, setPastGame] = useState(null); const [pastGamesCount, setPastGamesCount] = useState(""); const [whoAmI, setWhoAmI] = useState(""); - const [bothPlayed, setBothPlayed] = useState(""); - const [revealTimeLeft, setRevealTimeLeft] = useState(""); const [bothRevealed, setBothRevealed] = useState(""); const [playerARevealed, setPlayerARevealed] = useState(""); const [playerBRevealed, setPlayerBRevealed] = useState(""); @@ -70,33 +67,6 @@ export default function Clash() { setPlayerBRevealed(res ? "true" : "false"); } catch (err: any) { setStatus("Failed to fetch playerBRevealed: " + err.message); - const [bothRevealed, setBothRevealed] = useState(""); - const [playerARevealed, setPlayerARevealed] = useState(""); - const [playerBRevealed, setPlayerBRevealed] = useState(""); - setLoading(false); - } - }; - // Commit phase read-only handlers - const handleBothPlayed = async () => { - if (!contract) return; - setLoading(true); - try { - const res = await contract.methods.bothPlayed().call(); - setBothPlayed(res ? "true" : "false"); - } catch (err: any) { - setStatus("Failed to fetch bothPlayed: " + 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); } @@ -167,43 +137,6 @@ export default function Clash() { } }; const handleGetPastGame = async () => { - // 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); - } - }; if (!contract) return; setLoading(true); try { @@ -312,34 +245,6 @@ export default function Clash() { } }; - const handlePlay = async () => { - if (!contract || !web3 || !account) return; - setLoading(true); - setStatus(""); - try { - // playMove should be a hex string (bytes32) - const tx = contract.methods.play(playMove); - 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("Play tx sent: " + result); - } catch (err: any) { - setStatus("Play failed: " + err.message); - } finally { - setLoading(false); - } - }; - const handleReveal = async () => { if (!contract || !web3 || !account) return; setLoading(true); @@ -458,16 +363,11 @@ export default function Clash() { )} {phase === "commit" && ( )} {phase === "reveal" && ( @@ -484,8 +384,6 @@ export default function Clash() { handlePlayerARevealed={handlePlayerARevealed} playerBRevealed={playerBRevealed} handlePlayerBRevealed={handlePlayerBRevealed} - revealTimeLeft={revealTimeLeft} - handleRevealTimeLeft={handleRevealTimeLeft} /> )}