import React, { useState, useEffect } from "react"; import ContentFrame from "../ContentFrame"; import Highlight from "react-highlight"; import "highlight.js/styles/stackoverflow-light.css"; import hljs from "highlight.js"; import hljsDefineSolidity from "highlightjs-solidity"; hljsDefineSolidity(hljs); hljs.initHighlightingOnLoad(); type ContractProps = { checksummedAddress: string; }; const Contract: React.FC = ({ checksummedAddress }) => { const [sources, setSources] = useState< { [fileName: string]: any } | undefined | null >(undefined); useEffect(() => { if (!checksummedAddress) { return; } const fetchMetadata = async () => { try { const result = await fetch( `https://repo.sourcify.dev/contracts/full_match/1/${checksummedAddress}/metadata.json` ); if (result.ok) { const json = await result.json(); console.log(json); setSources(json.sources); setSelected(Object.keys(json.sources)[0]); } else { setSources(null); } } catch (err) { console.error(err); setSources(null); } }; fetchMetadata(); }, [checksummedAddress]); const [selected, setSelected] = useState(); return (
{sources === null && ( Couldn't find contract metadata in Sourcify repository. )} {sources !== undefined && sources !== null && ( <> {Object.entries(sources).map(([k]) => ( ))} {selected && ( {sources[selected].content} )} )}
); }; export default React.memo(Contract);