2021-10-28 20:31:57 +00:00
|
|
|
import React, { useContext } from "react";
|
2021-10-27 01:10:37 +00:00
|
|
|
import AddressHighlighter from "../components/AddressHighlighter";
|
|
|
|
|
import DecoratedAddressLink from "../components/DecoratedAddressLink";
|
|
|
|
|
import ContentFrame from "../ContentFrame";
|
2021-11-01 20:09:47 +00:00
|
|
|
import TraceItem from "./TraceItem";
|
2021-10-27 01:10:37 +00:00
|
|
|
import { TransactionData } from "../types";
|
2021-10-28 20:31:57 +00:00
|
|
|
import { useBatch4Bytes } from "../use4Bytes";
|
|
|
|
|
import { useTraceTransaction, useUniqueSignatures } from "../useErigonHooks";
|
2021-10-27 01:10:37 +00:00
|
|
|
import { RuntimeContext } from "../useRuntime";
|
2021-11-01 20:09:47 +00:00
|
|
|
import { ResolvedAddresses } from "../api/address-resolver";
|
2021-10-27 01:10:37 +00:00
|
|
|
|
|
|
|
|
type TraceProps = {
|
|
|
|
|
txData: TransactionData;
|
2021-11-01 20:09:47 +00:00
|
|
|
resolvedAddresses: ResolvedAddresses | undefined;
|
2021-10-27 01:10:37 +00:00
|
|
|
};
|
|
|
|
|
|
2021-11-01 20:09:47 +00:00
|
|
|
const Trace: React.FC<TraceProps> = ({ txData, resolvedAddresses }) => {
|
2021-10-27 01:10:37 +00:00
|
|
|
const { provider } = useContext(RuntimeContext);
|
|
|
|
|
const traces = useTraceTransaction(provider, txData.transactionHash);
|
2021-10-28 20:21:01 +00:00
|
|
|
const uniqueSignatures = useUniqueSignatures(traces);
|
|
|
|
|
const sigMap = useBatch4Bytes(uniqueSignatures);
|
2021-10-27 01:10:37 +00:00
|
|
|
|
|
|
|
|
return (
|
|
|
|
|
<ContentFrame tabs>
|
2021-10-27 04:34:44 +00:00
|
|
|
<div className="mt-4 mb-5 space-y-3 font-code text-sm flex flex-col items-start overflow-x-auto">
|
2021-10-27 04:14:42 +00:00
|
|
|
<div className="flex items-baseline border rounded px-1 py-px">
|
2021-10-27 01:10:37 +00:00
|
|
|
<AddressHighlighter address={txData.from}>
|
|
|
|
|
<DecoratedAddressLink
|
|
|
|
|
address={txData.from}
|
|
|
|
|
miner={txData.from === txData.confirmedData?.miner}
|
|
|
|
|
txFrom
|
|
|
|
|
txTo={txData.from === txData.to}
|
2021-11-01 20:09:47 +00:00
|
|
|
resolvedAddresses={resolvedAddresses}
|
2021-10-27 01:10:37 +00:00
|
|
|
/>
|
|
|
|
|
</AddressHighlighter>
|
|
|
|
|
</div>
|
2021-10-27 04:14:42 +00:00
|
|
|
<div className="flex">
|
|
|
|
|
<div className="w-5"></div>
|
|
|
|
|
<div className="space-y-3">
|
|
|
|
|
{traces?.map((t, i, a) => (
|
|
|
|
|
<TraceItem
|
|
|
|
|
key={i}
|
|
|
|
|
t={t}
|
|
|
|
|
txData={txData}
|
|
|
|
|
last={i === a.length - 1}
|
2021-10-28 20:21:01 +00:00
|
|
|
fourBytesMap={sigMap}
|
2021-11-01 20:09:47 +00:00
|
|
|
resolvedAddresses={resolvedAddresses}
|
2021-10-27 04:14:42 +00:00
|
|
|
/>
|
|
|
|
|
))}
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
2021-10-27 01:10:37 +00:00
|
|
|
</div>
|
|
|
|
|
</ContentFrame>
|
|
|
|
|
);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
export default React.memo(Trace);
|