import React, { useContext, useMemo } from "react"; import ContentFrame from "../ContentFrame"; import TransactionAddress from "../components/TransactionAddress"; import TraceItem from "./TraceItem"; import { TransactionData } from "../types"; import { useBatch4Bytes } from "../use4Bytes"; import { useTraceTransaction, useUniqueSignatures } from "../useErigonHooks"; import { RuntimeContext } from "../useRuntime"; import { ResolvedAddresses } from "../api/address-resolver"; import { tracesCollector, useResolvedAddresses } from "../useResolvedAddresses"; type TraceProps = { txData: TransactionData; resolvedAddresses: ResolvedAddresses | undefined; }; const Trace: React.FC = ({ txData, resolvedAddresses }) => { const { provider } = useContext(RuntimeContext); const traces = useTraceTransaction(provider, txData.transactionHash); const uniqueSignatures = useUniqueSignatures(traces); const sigMap = useBatch4Bytes(uniqueSignatures); const addrCollector = useMemo(() => tracesCollector(traces), [traces]); const traceResolvedAddresses = useResolvedAddresses(provider, addrCollector); const mergedResolvedAddresses = useMemo(() => { const merge = {}; if (resolvedAddresses) { Object.assign(merge, resolvedAddresses); } if (traceResolvedAddresses) { Object.assign(merge, traceResolvedAddresses); } return merge; }, [resolvedAddresses, traceResolvedAddresses]); return (
{traces ? ( <>
{traces.map((t, i, a) => ( ))}
) : (
)}
); }; export default React.memo(Trace);