import { ethers } from 'ethers';
import { FunctionMetadata, EventMetadata } from './types';
export declare class ContractInterface {
    private contract;
    private readonly metadata;
    constructor(address: string, abi: any[], signerOrProvider: ethers.Signer | ethers.providers.Provider, metadata: {
        functions: FunctionMetadata[];
        events: EventMetadata[];
    });
    /**
     * Get the underlying ethers contract
     */
    getContract(): ethers.Contract;
    /**
     * Get function metadata by name or selector
     */
    getFunctionMetadata(nameOrSelector: string): FunctionMetadata | undefined;
    /**
     * Get all function metadata
     */
    getFunctions(): FunctionMetadata[];
    /**
     * Get event metadata by name or signature
     */
    getEventMetadata(nameOrSignature: string): EventMetadata | undefined;
    /**
     * Get all event metadata
     */
    getEvents(): EventMetadata[];
    /**
     * Call a contract function
     */
    call(functionNameOrSelector: string, args?: any[], overrides?: ethers.CallOverrides): Promise<any>;
    /**
     * Listen to contract events
     */
    on(eventNameOrSignature: string, listener: (event: any) => void): void;
    /**
     * Remove event listener
     */
    off(eventNameOrSignature: string, listener: (event: any) => void): void;
    /**
     * Connect contract to a new signer
     */
    connect(signerOrProvider: ethers.Signer | ethers.providers.Provider): ContractInterface;
}
//# sourceMappingURL=interface.d.ts.map