EVM MCP Server

by mcpdotdirect
Verified
import { normalize } from 'viem/ens'; import { getPublicClient } from './clients.js'; import { type Address } from 'viem'; /** * Resolves an ENS name to an Ethereum address or returns the original address if it's already valid * @param addressOrEns An Ethereum address or ENS name * @param network The network to use for ENS resolution (defaults to Ethereum mainnet) * @returns The resolved Ethereum address */ export async function resolveAddress( addressOrEns: string, network = 'ethereum' ): Promise<Address> { // If it's already a valid Ethereum address (0x followed by 40 hex chars), return it if (/^0x[a-fA-F0-9]{40}$/.test(addressOrEns)) { return addressOrEns as Address; } // If it looks like an ENS name (contains a dot), try to resolve it if (addressOrEns.includes('.')) { try { // Normalize the ENS name first const normalizedEns = normalize(addressOrEns); // Get the public client for the network const publicClient = getPublicClient(network); // Resolve the ENS name to an address const address = await publicClient.getEnsAddress({ name: normalizedEns, }); if (!address) { throw new Error(`ENS name ${addressOrEns} could not be resolved to an address`); } return address; } catch (error: any) { throw new Error(`Failed to resolve ENS name ${addressOrEns}: ${error.message}`); } } // If it's neither a valid address nor an ENS name, throw an error throw new Error(`Invalid address or ENS name: ${addressOrEns}`); }