import { Abi, Address } from "viem";
import { Permit2RpcManager } from "./permit2-rpc-manager.ts";
type LoggerFn = (level: "debug" | "info" | "warn" | "error", message: string, ...optionalParams: any[]) => void;
/**
 * Options for calling a read-only contract function.
 */
export interface ReadContractOptions {
    manager: Permit2RpcManager;
    chainId: number;
    address: Address;
    abi: Abi;
    functionName: string;
    args?: any[];
    logger?: LoggerFn;
}
/**
 * Calls a read-only smart contract function using eth_call via the Permit2RpcManager.
 *
 * @param options - The options for the contract call.
 * @returns The decoded result of the function call.
 * @throws If the function doesn't exist in the ABI, the call reverts, or the Permit2RpcManager fails.
 */
export declare function readContract<T = any>({ manager, chainId, address, abi, functionName, args, logger, }: ReadContractOptions): Promise<T>;
export {};
//# sourceMappingURL=contract-utils.d.ts.map