import type { TraceCall } from "./types";
import { ethers } from "ethers";
export declare const COINGECKO_API_KEY: string | undefined;
export declare const ETHERSCAN_API_KEY: string | undefined;
/**
 * Get the implementation address of a proxy contract
 */
export declare function getImplementationAddress(proxyAddress: string): Promise<string | null>;
/**
 * Check if a token is WETH-like by examining its contract code
 */
export declare function isWethLikeToken(tokenAddress: string): Promise<boolean>;
/**
 * Get all WETH-like tokens from a transaction's trace
 */
export declare function findWethLikeTokens(trace: TraceCall[]): Promise<void>;
/**
 * Get event name from event topic and ABI
 * @param eventTopic The event topic (signature hash)
 * @param abi The contract ABI containing event definitions
 * @returns The event name or null if not found
 */
export declare function getEventNameFromTopic(eventTopic: string, abi: any[]): string | null;
/**
 * Get event name and decode parameters from log data
 * @param log The raw log object with topics and data
 * @param abi The contract ABI containing event definitions
 * @returns Decoded event information or null if not found
 */
export declare function decodeEventLog(log: {
    topics: string[];
    data: string;
}, abi: any[]): {
    name: string;
    args: ethers.Result;
    signature: string;
} | null;
/**
 * Generate event signature hash from event name and parameter types
 * @param eventName The name of the event
 * @param paramTypes Array of parameter types (e.g., ['address', 'uint256'])
 * @returns The keccak256 hash of the event signature
 */
export declare function generateEventSignature(eventName: string, paramTypes: string[]): string;
/**
 * Fetch contract ABI from Etherscan API
 * @param contractAddress The contract address to get ABI for
 * @param apiKey Optional Etherscan API key (uses env var if not provided)
 * @returns The contract ABI as JSON array or null if not found/error
 */
export declare function getContractABI(contractAddress: string, apiKey?: string): Promise<any[] | null>;
export declare function getABIAndDecodeLog(contractAddress: string, log: {
    topics: string[];
    data: string;
}, apiKey?: string): Promise<{
    name: string;
    args: ethers.Result | null;
    signature: string;
    raw: {
        topics: string[];
        data: string;
    };
}>;
