EVM MCP Server

by mcpdotdirect
Verified
import { type Address, type Hash, type Hex, type ReadContractParameters, type GetLogsParameters, type Log } from 'viem'; import { getPublicClient, getWalletClient } from './clients.js'; import { resolveAddress } from './ens.js'; /** * Read from a contract for a specific network */ export async function readContract(params: ReadContractParameters, network = 'ethereum') { const client = getPublicClient(network); return await client.readContract(params); } /** * Write to a contract for a specific network */ export async function writeContract( privateKey: Hex, params: Record<string, any>, network = 'ethereum' ): Promise<Hash> { const client = getWalletClient(privateKey, network); return await client.writeContract(params as any); } /** * Get logs for a specific network */ export async function getLogs(params: GetLogsParameters, network = 'ethereum'): Promise<Log[]> { const client = getPublicClient(network); return await client.getLogs(params); } /** * Check if an address is a contract * @param addressOrEns Address or ENS name to check * @param network Network name or chain ID * @returns True if the address is a contract, false if it's an EOA */ export async function isContract(addressOrEns: string, network = 'ethereum'): Promise<boolean> { // Resolve ENS name to address if needed const address = await resolveAddress(addressOrEns, network); const client = getPublicClient(network); const code = await client.getBytecode({ address }); return code !== undefined && code !== '0x'; }