Use useHasCode hook instead
This commit is contained in:
parent
003d0ae5b8
commit
d316f30f50
@ -1,4 +1,4 @@
|
||||
import React, { useEffect, useContext, useCallback, useMemo } from "react";
|
||||
import React, { useEffect, useContext, useCallback } from "react";
|
||||
import {
|
||||
useParams,
|
||||
useNavigate,
|
||||
@ -25,7 +25,7 @@ import { useAppConfigContext } from "./useAppConfig";
|
||||
import { useAddressOrENS } from "./useResolvedAddresses";
|
||||
import { useSourcifyMetadata } from "./sourcify/useSourcify";
|
||||
import { ChecksummedAddress } from "./types";
|
||||
import { useAddressesWithCode } from "./useErigonHooks";
|
||||
import { useHasCode } from "./useErigonHooks";
|
||||
import { useChainInfo } from "./useChainInfo";
|
||||
|
||||
const AddressTransactionByNonce = React.lazy(
|
||||
@ -65,18 +65,10 @@ const Address: React.FC = () => {
|
||||
}
|
||||
}, [addressOrName, checksummedAddress, isENS]);
|
||||
|
||||
const checksummedAddressAsArray = useMemo(
|
||||
() => (checksummedAddress !== undefined ? [checksummedAddress] : []),
|
||||
[checksummedAddress]
|
||||
);
|
||||
const contractAddresses = useAddressesWithCode(
|
||||
provider,
|
||||
checksummedAddressAsArray
|
||||
);
|
||||
// TODO: restore filter to only check Sourcify metadata if the address is a contract (hasCode)
|
||||
const hasCode = useHasCode(provider, checksummedAddress, "latest");
|
||||
const { sourcifySource } = useAppConfigContext();
|
||||
const addressMetadata = useSourcifyMetadata(
|
||||
checksummedAddress,
|
||||
hasCode ? checksummedAddress : undefined,
|
||||
provider?.network.chainId,
|
||||
sourcifySource
|
||||
);
|
||||
@ -130,7 +122,7 @@ const Address: React.FC = () => {
|
||||
<Tab.Group>
|
||||
<Tab.List className="flex space-x-2 border-l border-r border-t rounded-t-lg bg-white">
|
||||
<NavTab href={`/address/${addressOrName}`}>Overview</NavTab>
|
||||
{(contractAddresses?.length ?? 0) > 0 && (
|
||||
{hasCode && (
|
||||
<NavTab href={`/address/${addressOrName}/contract`}>
|
||||
<span
|
||||
className={`flex items-baseline space-x-2 ${
|
||||
@ -177,12 +169,7 @@ const Address: React.FC = () => {
|
||||
element={
|
||||
<Contracts
|
||||
checksummedAddress={checksummedAddress}
|
||||
rawMetadata={
|
||||
contractAddresses !== undefined &&
|
||||
contractAddresses.length === 0
|
||||
? null
|
||||
: addressMetadata
|
||||
}
|
||||
rawMetadata={addressMetadata}
|
||||
/>
|
||||
}
|
||||
/>
|
||||
|
@ -427,44 +427,6 @@ export const useTraceTransaction = (
|
||||
return traceGroups;
|
||||
};
|
||||
|
||||
const hasCode = async (
|
||||
provider: JsonRpcProvider,
|
||||
address: ChecksummedAddress
|
||||
): Promise<boolean> => {
|
||||
const result = await provider.send("ots_hasCode", [address, "latest"]);
|
||||
return result as boolean;
|
||||
};
|
||||
|
||||
export const useAddressesWithCode = (
|
||||
provider: JsonRpcProvider | undefined,
|
||||
addresses: ChecksummedAddress[]
|
||||
): ChecksummedAddress[] | undefined => {
|
||||
const [results, setResults] = useState<ChecksummedAddress[] | undefined>();
|
||||
|
||||
useEffect(() => {
|
||||
// Reset
|
||||
setResults(undefined);
|
||||
|
||||
if (provider === undefined) {
|
||||
return;
|
||||
}
|
||||
|
||||
const readCodes = async () => {
|
||||
const checkers: Promise<boolean>[] = [];
|
||||
for (const a of addresses) {
|
||||
checkers.push(hasCode(provider, a));
|
||||
}
|
||||
|
||||
const result = await Promise.all(checkers);
|
||||
const filtered = addresses.filter((_, i) => result[i]);
|
||||
setResults(filtered);
|
||||
};
|
||||
readCodes();
|
||||
}, [provider, addresses]);
|
||||
|
||||
return results;
|
||||
};
|
||||
|
||||
// Error(string)
|
||||
const ERROR_MESSAGE_SELECTOR = "0x08c379a0";
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user