import { useTransactionReceipt } from 'wagmi'; import { decodeEventLog } from 'viem'; import { useMemo } from "react"; import ArrowRightIcon from '@mui/icons-material/ArrowRight'; import { Box, Typography, Link } from "@mui/material"; import Token from "../../components/Token/Token"; import Modal from "../../components/Modal/Modal"; import GhostStyledIcon from "../../components/Icon/GhostIcon"; import { PrimaryButton } from "../../components/Button"; import { abi as StakingAbi } from "../../abi/GhostStaking.json"; import { DecimalBigNumber } from "../../helpers/DecimalBigNumber"; import { formatNumber, shorten } from "../../helpers"; import { useTokenSymbol } from "../../hooks/tokens"; import { getTokenDecimals } from "../../hooks/helpers"; const TokenBox = ({ tokenAmount, tokenSymbol, decimals, chainTokenSymbol }) => { return ( {tokenSymbol} {formatNumber( new DecimalBigNumber(tokenAmount ? tokenAmount : 0n, decimals), 5 )} ) } const StakingViewModal = ({ chainId, isOpen, close, config, historyRecord }) => { if (historyRecord === null) return null; const { data: receipt, isLoading, error } = useTransactionReceipt({ hash: historyRecord?.txHash, query: { enabled: !!historyRecord?.txHash && isOpen, } }); const allDecodedLogs = useMemo(() => { if (!receipt?.logs) return []; return receipt.logs.map((log) => { try { const decoded = decodeEventLog({ abi: StakingAbi, data: log.data, topics: log.topics, }); return { eventName: decoded.eventName, args: decoded.args, address: log.address }; } catch (e) { return null; } }).filter(Boolean); }, [receipt]); const stakeInfo = useMemo(() => { return allDecodedLogs.find(l => l.eventName === 'Staked'); }, [allDecodedLogs]); const { symbol: ftsoSymbol } = useTokenSymbol(chainId, "FTSO"); const ftsoDecimals = getTokenDecimals("FTSO"); const chainInfo = useMemo(() => { const client = config?.getClient(); return { url: client?.chain?.blockExplorers?.default?.url, symbol: client?.chain?.nativeCurrency?.symbol, }; }, [config]); return ( {stakeInfo && "Staked"} {!stakeInfo && "Parsing Transaction Hash"} } onClose={() => close()} > {stakeInfo && Receiver {shorten(stakeInfo.args.receiver, 9, -7)} Amount {formatNumber( new DecimalBigNumber(stakeInfo ? stakeInfo.args.amount : 0n, ftsoDecimals), 5 )} {ftsoSymbol} View Transaction Details } ) } export default StakingViewModal;