"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 ? (
) : (
)}
|
);
};