import type { SupportedChain } from "../../types/index.js"; export interface ContractInfo { address: `0x${string}`; chain: SupportedChain; isVerified: boolean; isProxy: boolean; implementation?: `0x${string}`; /** * Etherscan-reported contract name. This is attacker-controllable at deploy * time — a malicious contract can set ContractName = "Aave V3 Pool" or bury * prompt-injection payloads in it. We sanitize to a short, safe subset * (alphanumerics / dots / underscores / dashes, ≤64 chars) and callers * should NOT display this field without that sanitization. */ contractName?: string; compilerVersion?: string; abi?: unknown[]; } /** * Sanitize a free-form name from Etherscan for agent/user display. Strips * anything that could carry a newline or steer the model (markdown fences, * angle brackets, braces, quotes) and caps length. We never want the raw * string hitting the agent transcript — it's attacker-controlled. */ export declare function sanitizeContractName(raw: string | undefined): string | undefined; /** * Fetch contract verification info from Etherscan / Arbiscan. * Cached for 24 hours — verification state rarely changes. */ export declare function getContractInfo(address: `0x${string}`, chain: SupportedChain): Promise;