import React, { useState, useEffect, useContext, Fragment } from "react"; import { commify } from "@ethersproject/units"; import { Menu } from "@headlessui/react"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { faChevronDown } from "@fortawesome/free-solid-svg-icons/faChevronDown"; import ContentFrame from "../ContentFrame"; import InfoRow from "../components/InfoRow"; import Copy from "../components/Copy"; import ABI from "./ABI"; import Contract from "./Contract"; import { RuntimeContext } from "../useRuntime"; import { Metadata } from "../useSourcify"; import ExternalLink from "../components/ExternalLink"; import { openInRemixURL } from "../url"; type ContractsProps = { checksummedAddress: string; rawMetadata: Metadata | null | undefined; }; const Contracts: React.FC = ({ checksummedAddress, rawMetadata, }) => { const { provider } = useContext(RuntimeContext); const [selected, setSelected] = useState(); useEffect(() => { if (rawMetadata) { setSelected(Object.keys(rawMetadata.sources)[0]); } }, [rawMetadata]); const optimizer = rawMetadata?.settings?.optimizer; return ( {rawMetadata && ( <> {rawMetadata.language} {rawMetadata.compiler.version} {optimizer?.enabled ? ( Yes with{" "} {commify(optimizer?.runs)} {" "} runs ) : ( No )} )}
{rawMetadata === undefined && ( Getting data from Sourcify repository... )} {rawMetadata === null && ( Address is not a contract or couldn't find contract metadata in Sourcify repository. )} {rawMetadata !== undefined && rawMetadata !== null && ( <> {rawMetadata.output.abi && (
ABI
)}
{selected} {provider && (
Open in Remix
)}
{Object.entries(rawMetadata.sources).map(([k]) => ( ))}
{selected && ( )}
)}
); }; export default React.memo(Contracts);