import type { BaseContract, BigNumberish, FunctionFragment, Interface, EventFragment, ContractRunner, ContractMethod, Listener } from "ethers";
import type { TypedContractEvent, TypedDeferredTopicFilter, TypedEventLog, TypedLogDescription, TypedListener } from "../../common";
export declare namespace RateLimiter {
    type ConfigStruct = {
        isEnabled: boolean;
        capacity: BigNumberish;
        rate: BigNumberish;
    };
    type ConfigStructOutput = [
        isEnabled: boolean,
        capacity: bigint,
        rate: bigint
    ] & {
        isEnabled: boolean;
        capacity: bigint;
        rate: bigint;
    };
}
export interface RateLimiterInterface extends Interface {
    getEvent(nameOrSignatureOrTopic: "ConfigChanged" | "TokensConsumed"): EventFragment;
}
export declare namespace ConfigChangedEvent {
    type InputTuple = [config: RateLimiter.ConfigStruct];
    type OutputTuple = [config: RateLimiter.ConfigStructOutput];
    interface OutputObject {
        config: RateLimiter.ConfigStructOutput;
    }
    type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
    type Filter = TypedDeferredTopicFilter<Event>;
    type Log = TypedEventLog<Event>;
    type LogDescription = TypedLogDescription<Event>;
}
export declare namespace TokensConsumedEvent {
    type InputTuple = [tokens: BigNumberish];
    type OutputTuple = [tokens: bigint];
    interface OutputObject {
        tokens: bigint;
    }
    type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
    type Filter = TypedDeferredTopicFilter<Event>;
    type Log = TypedEventLog<Event>;
    type LogDescription = TypedLogDescription<Event>;
}
export interface RateLimiter extends BaseContract {
    connect(runner?: ContractRunner | null): RateLimiter;
    waitForDeployment(): Promise<this>;
    interface: RateLimiterInterface;
    queryFilter<TCEvent extends TypedContractEvent>(event: TCEvent, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined): Promise<Array<TypedEventLog<TCEvent>>>;
    queryFilter<TCEvent extends TypedContractEvent>(filter: TypedDeferredTopicFilter<TCEvent>, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined): Promise<Array<TypedEventLog<TCEvent>>>;
    on<TCEvent extends TypedContractEvent>(event: TCEvent, listener: TypedListener<TCEvent>): Promise<this>;
    on<TCEvent extends TypedContractEvent>(filter: TypedDeferredTopicFilter<TCEvent>, listener: TypedListener<TCEvent>): Promise<this>;
    once<TCEvent extends TypedContractEvent>(event: TCEvent, listener: TypedListener<TCEvent>): Promise<this>;
    once<TCEvent extends TypedContractEvent>(filter: TypedDeferredTopicFilter<TCEvent>, listener: TypedListener<TCEvent>): Promise<this>;
    listeners<TCEvent extends TypedContractEvent>(event: TCEvent): Promise<Array<TypedListener<TCEvent>>>;
    listeners(eventName?: string): Promise<Array<Listener>>;
    removeAllListeners<TCEvent extends TypedContractEvent>(event?: TCEvent): Promise<this>;
    getFunction<T extends ContractMethod = ContractMethod>(key: string | FunctionFragment): T;
    getEvent(key: "ConfigChanged"): TypedContractEvent<ConfigChangedEvent.InputTuple, ConfigChangedEvent.OutputTuple, ConfigChangedEvent.OutputObject>;
    getEvent(key: "TokensConsumed"): TypedContractEvent<TokensConsumedEvent.InputTuple, TokensConsumedEvent.OutputTuple, TokensConsumedEvent.OutputObject>;
    filters: {
        "ConfigChanged(tuple)": TypedContractEvent<ConfigChangedEvent.InputTuple, ConfigChangedEvent.OutputTuple, ConfigChangedEvent.OutputObject>;
        ConfigChanged: TypedContractEvent<ConfigChangedEvent.InputTuple, ConfigChangedEvent.OutputTuple, ConfigChangedEvent.OutputObject>;
        "TokensConsumed(uint256)": TypedContractEvent<TokensConsumedEvent.InputTuple, TokensConsumedEvent.OutputTuple, TokensConsumedEvent.OutputObject>;
        TokensConsumed: TypedContractEvent<TokensConsumedEvent.InputTuple, TokensConsumedEvent.OutputTuple, TokensConsumedEvent.OutputObject>;
    };
}
