"use client"; import { useEffect, useState } from "react"; import { AddressCodeTab } from "./AddressCodeTab"; import { AddressLogsTab } from "./AddressLogsTab"; import { AddressStorageTab } from "./AddressStorageTab"; import { PaginationButton } from "./PaginationButton"; import { TransactionsTable } from "./TransactionsTable"; import { Address, createPublicClient, http } from "viem"; import { hardhat } from "viem/chains"; import { useFetchBlocks } from "~~/hooks/scaffold-eth"; type AddressCodeTabProps = { bytecode: string; assembly: string; }; type PageProps = { address: Address; contractData: AddressCodeTabProps | null; }; const publicClient = createPublicClient({ chain: hardhat, transport: http(), }); export const ContractTabs = ({ address, contractData }: PageProps) => { const { blocks, transactionReceipts, currentPage, totalBlocks, setCurrentPage } = useFetchBlocks(); const [activeTab, setActiveTab] = useState("transactions"); const [isContract, setIsContract] = useState(false); useEffect(() => { const checkIsContract = async () => { const contractCode = await publicClient.getBytecode({ address: address }); setIsContract(contractCode !== undefined && contractCode !== "0x"); }; checkIsContract(); }, [address]); const filteredBlocks = blocks.filter(block => block.transactions.some(tx => { if (typeof tx === "string") { return false; } return tx.from.toLowerCase() === address.toLowerCase() || tx.to?.toLowerCase() === address.toLowerCase(); }), ); return ( <> {isContract && (
)} {activeTab === "transactions" && (
)} {activeTab === "code" && contractData && ( )} {activeTab === "storage" && } {activeTab === "logs" && } ); };