import React, { useState, useEffect, useContext } from "react"; import { ethers } from "ethers"; import ContentFrame from "../ContentFrame"; import InfoRow from "../components/InfoRow"; import Contract from "./Contract"; import { RuntimeContext } from "../useRuntime"; import { useSourcify } from "../useSourcify"; type ContractsProps = { checksummedAddress: string; }; const Contracts: React.FC = ({ checksummedAddress }) => { const { provider } = useContext(RuntimeContext); const rawMetadata = useSourcify( checksummedAddress, provider?.network.chainId ); 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{" "} {ethers.utils.commify(optimizer?.runs)} {" "} runs ) : ( No )} )}
{rawMetadata === null && ( Couldn't find contract metadata in Sourcify repository. )} {rawMetadata !== undefined && rawMetadata !== null && (
{Object.entries(rawMetadata.sources).map(([k]) => ( ))}
{selected && ( )}
)}
); }; export default React.memo(Contracts);