"use client"; import { useState } from "react"; import { SettledRowProps } from "../types"; import { LoadingRow } from "./LoadingRow"; import { Address } from "@scaffold-ui/components"; import { formatEther } from "viem"; import { useScaffoldReadContract, useScaffoldWriteContract } from "~~/hooks/scaffold-eth"; import { ZERO_ADDRESS } from "~~/utils/scaffold-eth/common"; export const SettledRow = ({ assertionId }: SettledRowProps) => { const [isClaiming, setIsClaiming] = useState(false); const { data: assertionData, isLoading } = useScaffoldReadContract({ contractName: "OptimisticOracle", functionName: "getAssertion", args: [BigInt(assertionId)], }); const { writeContractAsync } = useScaffoldWriteContract({ contractName: "OptimisticOracle", }); if (isLoading) return ; if (!assertionData) return null; const handleClaim = async () => { try { setIsClaiming(true); const functionName = assertionData?.winner === ZERO_ADDRESS ? "claimUndisputedReward" : "claimDisputedReward"; await writeContractAsync({ functionName, args: [BigInt(assertionId)], }); } catch (error) { console.error(error); } finally { setIsClaiming(false); } }; const winner = assertionData?.winner === ZERO_ADDRESS ? assertionData?.proposer : assertionData?.winner; const outcome = assertionData?.winner === ZERO_ADDRESS ? assertionData?.proposedOutcome : assertionData?.resolvedOutcome; return ( {/* Query Column */} {assertionData?.description} {/* Answer Column */} {outcome ? "True" : "False"} {/* Winner Column */}
{/* Reward Column */} {formatEther(assertionData?.reward)} ETH {/* Claimed Column */} {assertionData?.claimed ? ( ) : ( )} ); };