"use client"; import { useState } from "react"; import { AssertionWithIdAndState } from "../types"; import { Address } from "@scaffold-ui/components"; import { formatEther } from "viem"; import { useScaffoldWriteContract } from "~~/hooks/scaffold-eth"; import { useChallengeState } from "~~/services/store/challengeStore"; import { ZERO_ADDRESS } from "~~/utils/scaffold-eth/common"; const getStateName = (state: number) => { switch (state) { case 0: return "Invalid"; case 1: return "Asserted"; case 2: return "Proposed"; case 3: return "Disputed"; case 4: return "Settled"; case 5: return "Expired"; default: return "Invalid"; } }; // Helper function to format timestamp to UTC const formatTimestamp = (timestamp: bigint | string | number) => { const timestampNumber = Number(timestamp); const date = new Date(timestampNumber * 1000); // Convert from seconds to milliseconds return date.toLocaleString(); }; const Description = ({ assertion }: { assertion: AssertionWithIdAndState }) => { return (
AssertionId: {assertion.assertionId}
Description: {assertion.description}
Bond: {formatEther(assertion.bond)} ETH
Reward: {formatEther(assertion.reward)} ETH
Start Time: UTC: {formatTimestamp(assertion.startTime)} Timestamp: {assertion.startTime}
End Time: UTC: {formatTimestamp(assertion.endTime)} Timestamp: {assertion.endTime}
{assertion.proposer !== ZERO_ADDRESS && (
Proposed Outcome: {assertion.proposedOutcome ? "True" : "False"}
)} {assertion.proposer !== ZERO_ADDRESS && (
Proposer:{" "}
)} {assertion.disputer !== ZERO_ADDRESS && (
Disputer:{" "}
)}
); }; export const AssertionModal = () => { const [isActionPending, setIsActionPending] = useState(false); const { refetchAssertionStates, openAssertion, closeAssertionModal } = useChallengeState(); const isOpen = !!openAssertion; const { writeContractAsync: writeOOContractAsync } = useScaffoldWriteContract({ contractName: "OptimisticOracle", }); const { writeContractAsync: writeDeciderContractAsync } = useScaffoldWriteContract({ contractName: "Decider", }); const handleAction = async (args: any) => { if (!openAssertion) return; try { setIsActionPending(true); if (args.functionName === "settleDispute") { await writeDeciderContractAsync(args); } else { await writeOOContractAsync(args); } refetchAssertionStates(); closeAssertionModal(); } catch (error) { console.log(error); } finally { setIsActionPending(false); } }; if (!openAssertion) return null; return ( <> ); };