import React, { useState, useEffect, useContext, Fragment } from "react"; import { commify } from "@ethersproject/units"; import { Tab } from "@headlessui/react"; import ContentFrame from "../ContentFrame"; import InfoRow from "../components/InfoRow"; 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 === null && ( Couldn't find contract metadata in Sourcify repository. )} {rawMetadata !== undefined && rawMetadata !== null && (
{provider && (
Open in Remix
)} {Object.entries(rawMetadata.sources).map(([k]) => ( ))} {selected && ( )}
)}
); }; export default React.memo(Contracts);