Replace Sourcify metadata reading by SWR; 2nd batch of refactorings
This commit is contained in:
parent
0b210fd446
commit
39c11a1ed4
|
@ -6,28 +6,20 @@ import TransactionAddress from "./components/TransactionAddress";
|
||||||
import ValueHighlighter from "./components/ValueHighlighter";
|
import ValueHighlighter from "./components/ValueHighlighter";
|
||||||
import FormattedBalance from "./components/FormattedBalance";
|
import FormattedBalance from "./components/FormattedBalance";
|
||||||
import USDAmount from "./components/USDAmount";
|
import USDAmount from "./components/USDAmount";
|
||||||
import {
|
import { AddressContext, TokenMeta, TokenTransfer } from "./types";
|
||||||
AddressContext,
|
|
||||||
ChecksummedAddress,
|
|
||||||
TokenMeta,
|
|
||||||
TokenTransfer,
|
|
||||||
} from "./types";
|
|
||||||
import { RuntimeContext } from "./useRuntime";
|
import { RuntimeContext } from "./useRuntime";
|
||||||
import { useBlockNumberContext } from "./useBlockTagContext";
|
import { useBlockNumberContext } from "./useBlockTagContext";
|
||||||
import { Metadata } from "./sourcify/useSourcify";
|
|
||||||
import { useTokenUSDOracle } from "./usePriceOracle";
|
import { useTokenUSDOracle } from "./usePriceOracle";
|
||||||
|
|
||||||
type TokenTransferItemProps = {
|
type TokenTransferItemProps = {
|
||||||
t: TokenTransfer;
|
t: TokenTransfer;
|
||||||
tokenMeta?: TokenMeta | null | undefined;
|
tokenMeta?: TokenMeta | null | undefined;
|
||||||
metadatas: Record<ChecksummedAddress, Metadata | null | undefined>;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// TODO: handle partial
|
// TODO: handle partial
|
||||||
const TokenTransferItem: React.FC<TokenTransferItemProps> = ({
|
const TokenTransferItem: React.FC<TokenTransferItemProps> = ({
|
||||||
t,
|
t,
|
||||||
tokenMeta,
|
tokenMeta,
|
||||||
metadatas,
|
|
||||||
}) => {
|
}) => {
|
||||||
const { provider } = useContext(RuntimeContext);
|
const { provider } = useContext(RuntimeContext);
|
||||||
const blockNumber = useBlockNumberContext();
|
const blockNumber = useBlockNumberContext();
|
||||||
|
@ -40,7 +32,6 @@ const TokenTransferItem: React.FC<TokenTransferItemProps> = ({
|
||||||
<TransactionAddress
|
<TransactionAddress
|
||||||
address={t.from}
|
address={t.from}
|
||||||
addressCtx={AddressContext.FROM}
|
addressCtx={AddressContext.FROM}
|
||||||
metadata={metadatas[t.from]}
|
|
||||||
showCodeIndicator
|
showCodeIndicator
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
@ -51,7 +42,6 @@ const TokenTransferItem: React.FC<TokenTransferItemProps> = ({
|
||||||
<TransactionAddress
|
<TransactionAddress
|
||||||
address={t.to}
|
address={t.to}
|
||||||
addressCtx={AddressContext.TO}
|
addressCtx={AddressContext.TO}
|
||||||
metadata={metadatas[t.to]}
|
|
||||||
showCodeIndicator
|
showCodeIndicator
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
@ -67,7 +57,7 @@ const TokenTransferItem: React.FC<TokenTransferItemProps> = ({
|
||||||
/>
|
/>
|
||||||
</ValueHighlighter>
|
</ValueHighlighter>
|
||||||
</span>
|
</span>
|
||||||
<TransactionAddress address={t.token} metadata={metadatas[t.token]} />
|
<TransactionAddress address={t.token} />
|
||||||
{tokenMeta && quote !== undefined && decimals !== undefined && (
|
{tokenMeta && quote !== undefined && decimals !== undefined && (
|
||||||
<span className="px-2 border-gray-200 border rounded-lg bg-gray-100 text-gray-600">
|
<span className="px-2 border-gray-200 border rounded-lg bg-gray-100 text-gray-600">
|
||||||
<USDAmount
|
<USDAmount
|
||||||
|
|
|
@ -18,7 +18,6 @@ import { useMultipleETHUSDOracle } from "../usePriceOracle";
|
||||||
import { RuntimeContext } from "../useRuntime";
|
import { RuntimeContext } from "../useRuntime";
|
||||||
import { useParams, useSearchParams } from "react-router-dom";
|
import { useParams, useSearchParams } from "react-router-dom";
|
||||||
import { ChecksummedAddress, ProcessedTransaction } from "../types";
|
import { ChecksummedAddress, ProcessedTransaction } from "../types";
|
||||||
import { useContractsMetadata } from "../hooks";
|
|
||||||
import { useAddressBalance, useContractCreator } from "../useErigonHooks";
|
import { useAddressBalance, useContractCreator } from "../useErigonHooks";
|
||||||
import { BlockNumberContext } from "../useBlockTagContext";
|
import { BlockNumberContext } from "../useBlockTagContext";
|
||||||
|
|
||||||
|
@ -112,22 +111,6 @@ const AddressTransactionResults: React.FC<AddressTransactionResultsProps> = ({
|
||||||
}, [page]);
|
}, [page]);
|
||||||
const priceMap = useMultipleETHUSDOracle(provider, blockTags);
|
const priceMap = useMultipleETHUSDOracle(provider, blockTags);
|
||||||
|
|
||||||
// Calculate Sourcify metadata for all addresses that appear on this page results
|
|
||||||
const addresses = useMemo(() => {
|
|
||||||
const _addresses = [address];
|
|
||||||
if (page) {
|
|
||||||
for (const t of page) {
|
|
||||||
if (t.to) {
|
|
||||||
_addresses.push(t.to);
|
|
||||||
}
|
|
||||||
if (t.createdContractAddress) {
|
|
||||||
_addresses.push(t.createdContractAddress);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return _addresses;
|
|
||||||
}, [address, page]);
|
|
||||||
const metadatas = useContractsMetadata(addresses, provider);
|
|
||||||
const balance = useAddressBalance(provider, address);
|
const balance = useAddressBalance(provider, address);
|
||||||
const creator = useContractCreator(provider, address);
|
const creator = useContractCreator(provider, address);
|
||||||
|
|
||||||
|
@ -181,7 +164,6 @@ const AddressTransactionResults: React.FC<AddressTransactionResultsProps> = ({
|
||||||
selectedAddress={address}
|
selectedAddress={address}
|
||||||
feeDisplay={feeDisplay}
|
feeDisplay={feeDisplay}
|
||||||
priceMap={priceMap}
|
priceMap={priceMap}
|
||||||
metadatas={metadatas}
|
|
||||||
/>
|
/>
|
||||||
))}
|
))}
|
||||||
<NavBar address={address} page={page} controller={controller} />
|
<NavBar address={address} page={page} controller={controller} />
|
||||||
|
|
|
@ -8,10 +8,9 @@ import TransactionItem from "../search/TransactionItem";
|
||||||
import { useFeeToggler } from "../search/useFeeToggler";
|
import { useFeeToggler } from "../search/useFeeToggler";
|
||||||
import { RuntimeContext } from "../useRuntime";
|
import { RuntimeContext } from "../useRuntime";
|
||||||
import { SelectionContext, useSelection } from "../useSelection";
|
import { SelectionContext, useSelection } from "../useSelection";
|
||||||
import { ChecksummedAddress, ProcessedTransaction } from "../types";
|
import { ProcessedTransaction } from "../types";
|
||||||
import { PAGE_SIZE } from "../params";
|
import { PAGE_SIZE } from "../params";
|
||||||
import { useMultipleETHUSDOracle } from "../usePriceOracle";
|
import { useMultipleETHUSDOracle } from "../usePriceOracle";
|
||||||
import { useContractsMetadata } from "../hooks";
|
|
||||||
|
|
||||||
type BlockTransactionResultsProps = {
|
type BlockTransactionResultsProps = {
|
||||||
blockTag: BlockTag;
|
blockTag: BlockTag;
|
||||||
|
@ -32,24 +31,6 @@ const BlockTransactionResults: React.FC<BlockTransactionResultsProps> = ({
|
||||||
const blockTags = useMemo(() => [blockTag], [blockTag]);
|
const blockTags = useMemo(() => [blockTag], [blockTag]);
|
||||||
const priceMap = useMultipleETHUSDOracle(provider, blockTags);
|
const priceMap = useMultipleETHUSDOracle(provider, blockTags);
|
||||||
|
|
||||||
const addresses = useMemo((): ChecksummedAddress[] => {
|
|
||||||
if (!page) {
|
|
||||||
return [];
|
|
||||||
}
|
|
||||||
|
|
||||||
const _addresses: ChecksummedAddress[] = [];
|
|
||||||
for (const t of page) {
|
|
||||||
if (t.to) {
|
|
||||||
_addresses.push(t.to);
|
|
||||||
}
|
|
||||||
if (t.createdContractAddress) {
|
|
||||||
_addresses.push(t.createdContractAddress);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return _addresses;
|
|
||||||
}, [page]);
|
|
||||||
const metadatas = useContractsMetadata(addresses, provider);
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<ContentFrame>
|
<ContentFrame>
|
||||||
<div className="flex justify-between items-baseline py-3">
|
<div className="flex justify-between items-baseline py-3">
|
||||||
|
@ -78,7 +59,6 @@ const BlockTransactionResults: React.FC<BlockTransactionResultsProps> = ({
|
||||||
tx={tx}
|
tx={tx}
|
||||||
feeDisplay={feeDisplay}
|
feeDisplay={feeDisplay}
|
||||||
priceMap={priceMap}
|
priceMap={priceMap}
|
||||||
metadatas={metadatas}
|
|
||||||
/>
|
/>
|
||||||
))}
|
))}
|
||||||
<div className="flex justify-between items-baseline py-3">
|
<div className="flex justify-between items-baseline py-3">
|
||||||
|
|
|
@ -8,8 +8,9 @@ import { faBurn } from "@fortawesome/free-solid-svg-icons/faBurn";
|
||||||
import { faCoins } from "@fortawesome/free-solid-svg-icons/faCoins";
|
import { faCoins } from "@fortawesome/free-solid-svg-icons/faCoins";
|
||||||
import SourcifyLogo from "../sourcify/SourcifyLogo";
|
import SourcifyLogo from "../sourcify/SourcifyLogo";
|
||||||
import PlainAddress from "./PlainAddress";
|
import PlainAddress from "./PlainAddress";
|
||||||
import { Metadata } from "../sourcify/useSourcify";
|
|
||||||
import { RuntimeContext } from "../useRuntime";
|
import { RuntimeContext } from "../useRuntime";
|
||||||
|
import { useAppConfigContext } from "../useAppConfig";
|
||||||
|
import { useSourcifyMetadata } from "../sourcify/useSourcify";
|
||||||
import { useResolvedAddress } from "../useResolvedAddresses";
|
import { useResolvedAddress } from "../useResolvedAddresses";
|
||||||
import { AddressContext, ChecksummedAddress, ZERO_ADDRESS } from "../types";
|
import { AddressContext, ChecksummedAddress, ZERO_ADDRESS } from "../types";
|
||||||
import { resolverRendererRegistry } from "../api/address-resolver";
|
import { resolverRendererRegistry } from "../api/address-resolver";
|
||||||
|
@ -23,7 +24,6 @@ type DecoratedAddressLinkProps = {
|
||||||
selfDestruct?: boolean | undefined;
|
selfDestruct?: boolean | undefined;
|
||||||
txFrom?: boolean | undefined;
|
txFrom?: boolean | undefined;
|
||||||
txTo?: boolean | undefined;
|
txTo?: boolean | undefined;
|
||||||
metadata?: Metadata | null | undefined;
|
|
||||||
eoa?: boolean | undefined;
|
eoa?: boolean | undefined;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -36,9 +36,16 @@ const DecoratedAddressLink: React.FC<DecoratedAddressLinkProps> = ({
|
||||||
selfDestruct,
|
selfDestruct,
|
||||||
txFrom,
|
txFrom,
|
||||||
txTo,
|
txTo,
|
||||||
metadata,
|
|
||||||
eoa,
|
eoa,
|
||||||
}) => {
|
}) => {
|
||||||
|
const { provider } = useContext(RuntimeContext);
|
||||||
|
const { sourcifySource } = useAppConfigContext();
|
||||||
|
const metadata = useSourcifyMetadata(
|
||||||
|
address,
|
||||||
|
provider?.network.chainId,
|
||||||
|
sourcifySource
|
||||||
|
);
|
||||||
|
|
||||||
const mint = addressCtx === AddressContext.FROM && address === ZERO_ADDRESS;
|
const mint = addressCtx === AddressContext.FROM && address === ZERO_ADDRESS;
|
||||||
const burn = addressCtx === AddressContext.TO && address === ZERO_ADDRESS;
|
const burn = addressCtx === AddressContext.TO && address === ZERO_ADDRESS;
|
||||||
|
|
||||||
|
|
|
@ -5,20 +5,17 @@ import { useSelectedTransaction } from "../useSelectedTransaction";
|
||||||
import { useBlockNumberContext } from "../useBlockTagContext";
|
import { useBlockNumberContext } from "../useBlockTagContext";
|
||||||
import { RuntimeContext } from "../useRuntime";
|
import { RuntimeContext } from "../useRuntime";
|
||||||
import { useHasCode } from "../useErigonHooks";
|
import { useHasCode } from "../useErigonHooks";
|
||||||
import { Metadata } from "../sourcify/useSourcify";
|
|
||||||
import { AddressContext, ChecksummedAddress } from "../types";
|
import { AddressContext, ChecksummedAddress } from "../types";
|
||||||
|
|
||||||
type TransactionAddressProps = {
|
type TransactionAddressProps = {
|
||||||
address: ChecksummedAddress;
|
address: ChecksummedAddress;
|
||||||
addressCtx?: AddressContext | undefined;
|
addressCtx?: AddressContext | undefined;
|
||||||
metadata?: Metadata | null | undefined;
|
|
||||||
showCodeIndicator?: boolean;
|
showCodeIndicator?: boolean;
|
||||||
};
|
};
|
||||||
|
|
||||||
const TransactionAddress: React.FC<TransactionAddressProps> = ({
|
const TransactionAddress: React.FC<TransactionAddressProps> = ({
|
||||||
address,
|
address,
|
||||||
addressCtx,
|
addressCtx,
|
||||||
metadata,
|
|
||||||
showCodeIndicator = false,
|
showCodeIndicator = false,
|
||||||
}) => {
|
}) => {
|
||||||
const txData = useSelectedTransaction();
|
const txData = useSelectedTransaction();
|
||||||
|
@ -46,7 +43,6 @@ const TransactionAddress: React.FC<TransactionAddressProps> = ({
|
||||||
txFrom={address === txData?.from}
|
txFrom={address === txData?.from}
|
||||||
txTo={address === txData?.to || creation}
|
txTo={address === txData?.to || creation}
|
||||||
creation={creation}
|
creation={creation}
|
||||||
metadata={metadata}
|
|
||||||
eoa={
|
eoa={
|
||||||
showCodeIndicator && blockNumber !== undefined
|
showCodeIndicator && blockNumber !== undefined
|
||||||
? !toHasCode
|
? !toHasCode
|
||||||
|
|
|
@ -14,20 +14,18 @@ import TransactionDirection, {
|
||||||
Flags,
|
Flags,
|
||||||
} from "../components/TransactionDirection";
|
} from "../components/TransactionDirection";
|
||||||
import TransactionValue from "../components/TransactionValue";
|
import TransactionValue from "../components/TransactionValue";
|
||||||
import { ChecksummedAddress, ProcessedTransaction } from "../types";
|
import { ProcessedTransaction } from "../types";
|
||||||
import { FeeDisplay } from "./useFeeToggler";
|
import { FeeDisplay } from "./useFeeToggler";
|
||||||
import { RuntimeContext } from "../useRuntime";
|
import { RuntimeContext } from "../useRuntime";
|
||||||
import { useHasCode } from "../useErigonHooks";
|
import { useHasCode } from "../useErigonHooks";
|
||||||
import { formatValue } from "../components/formatter";
|
import { formatValue } from "../components/formatter";
|
||||||
import ETH2USDValue from "../components/ETH2USDValue";
|
import ETH2USDValue from "../components/ETH2USDValue";
|
||||||
import { Metadata } from "../sourcify/useSourcify";
|
|
||||||
|
|
||||||
type TransactionItemProps = {
|
type TransactionItemProps = {
|
||||||
tx: ProcessedTransaction;
|
tx: ProcessedTransaction;
|
||||||
selectedAddress?: string;
|
selectedAddress?: string;
|
||||||
feeDisplay: FeeDisplay;
|
feeDisplay: FeeDisplay;
|
||||||
priceMap: Record<BlockTag, BigNumber>;
|
priceMap: Record<BlockTag, BigNumber>;
|
||||||
metadatas: Record<ChecksummedAddress, Metadata | null | undefined>;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const TransactionItem: React.FC<TransactionItemProps> = ({
|
const TransactionItem: React.FC<TransactionItemProps> = ({
|
||||||
|
@ -35,7 +33,6 @@ const TransactionItem: React.FC<TransactionItemProps> = ({
|
||||||
selectedAddress,
|
selectedAddress,
|
||||||
feeDisplay,
|
feeDisplay,
|
||||||
priceMap,
|
priceMap,
|
||||||
metadatas,
|
|
||||||
}) => {
|
}) => {
|
||||||
const { provider } = useContext(RuntimeContext);
|
const { provider } = useContext(RuntimeContext);
|
||||||
const toHasCode = useHasCode(
|
const toHasCode = useHasCode(
|
||||||
|
@ -113,7 +110,6 @@ const TransactionItem: React.FC<TransactionItemProps> = ({
|
||||||
address={tx.to}
|
address={tx.to}
|
||||||
selectedAddress={selectedAddress}
|
selectedAddress={selectedAddress}
|
||||||
miner={tx.miner === tx.to}
|
miner={tx.miner === tx.to}
|
||||||
metadata={metadatas[tx.to]}
|
|
||||||
eoa={toHasCode === undefined ? undefined : !toHasCode}
|
eoa={toHasCode === undefined ? undefined : !toHasCode}
|
||||||
/>
|
/>
|
||||||
</AddressHighlighter>
|
</AddressHighlighter>
|
||||||
|
@ -123,7 +119,6 @@ const TransactionItem: React.FC<TransactionItemProps> = ({
|
||||||
address={tx.createdContractAddress!}
|
address={tx.createdContractAddress!}
|
||||||
selectedAddress={selectedAddress}
|
selectedAddress={selectedAddress}
|
||||||
creation
|
creation
|
||||||
metadata={metadatas[tx.createdContractAddress!]}
|
|
||||||
eoa={false}
|
eoa={false}
|
||||||
/>
|
/>
|
||||||
</AddressHighlighter>
|
</AddressHighlighter>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import React, { useContext, useMemo, useState } from "react";
|
import React, { useContext, useState } from "react";
|
||||||
import { Tab } from "@headlessui/react";
|
import { Tab } from "@headlessui/react";
|
||||||
import { TransactionDescription } from "@ethersproject/abi";
|
import { TransactionDescription } from "@ethersproject/abi";
|
||||||
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
||||||
|
@ -25,11 +25,7 @@ import USDValue from "../components/USDValue";
|
||||||
import FormattedBalance from "../components/FormattedBalance";
|
import FormattedBalance from "../components/FormattedBalance";
|
||||||
import ETH2USDValue from "../components/ETH2USDValue";
|
import ETH2USDValue from "../components/ETH2USDValue";
|
||||||
import TokenTransferItem from "../TokenTransferItem";
|
import TokenTransferItem from "../TokenTransferItem";
|
||||||
import {
|
import { TransactionData, InternalOperation } from "../types";
|
||||||
TransactionData,
|
|
||||||
InternalOperation,
|
|
||||||
ChecksummedAddress,
|
|
||||||
} from "../types";
|
|
||||||
import PercentageBar from "../components/PercentageBar";
|
import PercentageBar from "../components/PercentageBar";
|
||||||
import ExternalLink from "../components/ExternalLink";
|
import ExternalLink from "../components/ExternalLink";
|
||||||
import RelativePosition from "../components/RelativePosition";
|
import RelativePosition from "../components/RelativePosition";
|
||||||
|
@ -43,7 +39,6 @@ import {
|
||||||
} from "../use4Bytes";
|
} from "../use4Bytes";
|
||||||
import { DevDoc, Metadata, useError, UserDoc } from "../sourcify/useSourcify";
|
import { DevDoc, Metadata, useError, UserDoc } from "../sourcify/useSourcify";
|
||||||
import { RuntimeContext } from "../useRuntime";
|
import { RuntimeContext } from "../useRuntime";
|
||||||
import { useContractsMetadata } from "../hooks";
|
|
||||||
import { useTransactionError } from "../useErigonHooks";
|
import { useTransactionError } from "../useErigonHooks";
|
||||||
import { useChainInfo } from "../useChainInfo";
|
import { useChainInfo } from "../useChainInfo";
|
||||||
import { useETHUSDOracle } from "../usePriceOracle";
|
import { useETHUSDOracle } from "../usePriceOracle";
|
||||||
|
@ -94,22 +89,6 @@ const Details: React.FC<DetailsProps> = ({
|
||||||
txData?.confirmedData?.blockNumber
|
txData?.confirmedData?.blockNumber
|
||||||
);
|
);
|
||||||
|
|
||||||
const addresses = useMemo(() => {
|
|
||||||
const _addresses: ChecksummedAddress[] = [];
|
|
||||||
if (txData.to) {
|
|
||||||
_addresses.push(txData.to);
|
|
||||||
}
|
|
||||||
if (txData.confirmedData?.createdContractAddress) {
|
|
||||||
_addresses.push(txData.confirmedData.createdContractAddress);
|
|
||||||
}
|
|
||||||
for (const t of txData.tokenTransfers) {
|
|
||||||
_addresses.push(t.from);
|
|
||||||
_addresses.push(t.to);
|
|
||||||
_addresses.push(t.token);
|
|
||||||
}
|
|
||||||
return _addresses;
|
|
||||||
}, [txData]);
|
|
||||||
const metadatas = useContractsMetadata(addresses, provider);
|
|
||||||
const [errorMsg, outputData, isCustomError] = useTransactionError(
|
const [errorMsg, outputData, isCustomError] = useTransactionError(
|
||||||
provider,
|
provider,
|
||||||
txData.transactionHash
|
txData.transactionHash
|
||||||
|
@ -269,11 +248,7 @@ const Details: React.FC<DetailsProps> = ({
|
||||||
<InfoRow title={txData.to ? "Interacted With (To)" : "Contract Created"}>
|
<InfoRow title={txData.to ? "Interacted With (To)" : "Contract Created"}>
|
||||||
{txData.to ? (
|
{txData.to ? (
|
||||||
<div className="flex items-baseline space-x-2 -ml-1">
|
<div className="flex items-baseline space-x-2 -ml-1">
|
||||||
<TransactionAddress
|
<TransactionAddress address={txData.to} showCodeIndicator />
|
||||||
address={txData.to}
|
|
||||||
metadata={metadatas?.[txData.to]}
|
|
||||||
showCodeIndicator
|
|
||||||
/>
|
|
||||||
<Copy value={txData.to} />
|
<Copy value={txData.to} />
|
||||||
</div>
|
</div>
|
||||||
) : txData.confirmedData === undefined ? (
|
) : txData.confirmedData === undefined ? (
|
||||||
|
@ -284,9 +259,6 @@ const Details: React.FC<DetailsProps> = ({
|
||||||
<div className="flex items-baseline space-x-2 -ml-1">
|
<div className="flex items-baseline space-x-2 -ml-1">
|
||||||
<TransactionAddress
|
<TransactionAddress
|
||||||
address={txData.confirmedData?.createdContractAddress!}
|
address={txData.confirmedData?.createdContractAddress!}
|
||||||
metadata={
|
|
||||||
metadatas?.[txData.confirmedData?.createdContractAddress!]
|
|
||||||
}
|
|
||||||
/>
|
/>
|
||||||
<Copy value={txData.confirmedData.createdContractAddress!} />
|
<Copy value={txData.confirmedData.createdContractAddress!} />
|
||||||
</div>
|
</div>
|
||||||
|
@ -316,7 +288,6 @@ const Details: React.FC<DetailsProps> = ({
|
||||||
key={i}
|
key={i}
|
||||||
t={t}
|
t={t}
|
||||||
tokenMeta={txData.tokenMetas[t.token]}
|
tokenMeta={txData.tokenMetas[t.token]}
|
||||||
metadatas={metadatas}
|
|
||||||
/>
|
/>
|
||||||
))}
|
))}
|
||||||
</InfoRow>
|
</InfoRow>
|
||||||
|
|
|
@ -14,10 +14,9 @@ import { Metadata } from "../sourcify/useSourcify";
|
||||||
type LogEntryProps = {
|
type LogEntryProps = {
|
||||||
log: Log;
|
log: Log;
|
||||||
logDesc: LogDescription | null | undefined;
|
logDesc: LogDescription | null | undefined;
|
||||||
metadatas: Record<ChecksummedAddress, Metadata | null | undefined>;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const LogEntry: React.FC<LogEntryProps> = ({ log, logDesc, metadatas }) => {
|
const LogEntry: React.FC<LogEntryProps> = ({ log, logDesc }) => {
|
||||||
const rawTopic0 = log.topics[0];
|
const rawTopic0 = log.topics[0];
|
||||||
const topic0 = useTopic0(rawTopic0);
|
const topic0 = useTopic0(rawTopic0);
|
||||||
|
|
||||||
|
@ -56,10 +55,7 @@ const LogEntry: React.FC<LogEntryProps> = ({ log, logDesc, metadatas }) => {
|
||||||
<div className="font-bold text-right">Address</div>
|
<div className="font-bold text-right">Address</div>
|
||||||
<div className="col-span-11 mr-auto">
|
<div className="col-span-11 mr-auto">
|
||||||
<div className="flex items-baseline space-x-2 -ml-1 mr-3">
|
<div className="flex items-baseline space-x-2 -ml-1 mr-3">
|
||||||
<TransactionAddress
|
<TransactionAddress address={log.address} />
|
||||||
address={log.address}
|
|
||||||
metadata={metadatas[log.address]}
|
|
||||||
/>
|
|
||||||
<Copy value={log.address} />
|
<Copy value={log.address} />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -62,12 +62,7 @@ const Logs: React.FC<LogsProps> = ({ txData, metadata }) => {
|
||||||
{txData.confirmedData.logs.length > 0 ? (
|
{txData.confirmedData.logs.length > 0 ? (
|
||||||
<>
|
<>
|
||||||
{txData.confirmedData.logs.map((l, i) => (
|
{txData.confirmedData.logs.map((l, i) => (
|
||||||
<LogEntry
|
<LogEntry key={i} log={l} logDesc={logDescs?.[i]} />
|
||||||
key={i}
|
|
||||||
log={l}
|
|
||||||
logDesc={logDescs?.[i]}
|
|
||||||
metadatas={metadatas}
|
|
||||||
/>
|
|
||||||
))}
|
))}
|
||||||
</>
|
</>
|
||||||
) : (
|
) : (
|
||||||
|
|
Loading…
Reference in New Issue