import type { BaseContract, BigNumberish, BytesLike, FunctionFragment, Result, Interface, EventFragment, AddressLike, ContractRunner, ContractMethod, Listener } from "ethers";
import type { TypedContractEvent, TypedDeferredTopicFilter, TypedEventLog, TypedLogDescription, TypedListener, TypedContractMethod } from "../common";
export interface ExampleVRFConsumerInterface extends Interface {
    getFunction(nameOrSignature: "CALLBACK_GAS_LIMIT" | "MAX_WORDS_PER_REQUEST" | "allRequestIds" | "checkContractFunds" | "fulfilledRequests" | "fundVRF" | "getRequestPrice" | "getRequestStatus" | "getRequestsByRequester" | "getStats" | "getVRFCoordinator" | "rawFulfillRandomWords" | "requestRandomWords" | "requestRandomWordsFromContract" | "requests" | "totalRequests"): FunctionFragment;
    getEvent(nameOrSignatureOrTopic: "FundsDeposited" | "RandomDiceRoll" | "RandomLotteryNumbers" | "RandomPercentage" | "RandomnessFulfilled" | "RandomnessRequested"): EventFragment;
    encodeFunctionData(functionFragment: "CALLBACK_GAS_LIMIT", values?: undefined): string;
    encodeFunctionData(functionFragment: "MAX_WORDS_PER_REQUEST", values?: undefined): string;
    encodeFunctionData(functionFragment: "allRequestIds", values: [BigNumberish]): string;
    encodeFunctionData(functionFragment: "checkContractFunds", values?: undefined): string;
    encodeFunctionData(functionFragment: "fulfilledRequests", values?: undefined): string;
    encodeFunctionData(functionFragment: "fundVRF", values?: undefined): string;
    encodeFunctionData(functionFragment: "getRequestPrice", values: [BigNumberish]): string;
    encodeFunctionData(functionFragment: "getRequestStatus", values: [BigNumberish]): string;
    encodeFunctionData(functionFragment: "getRequestsByRequester", values: [AddressLike]): string;
    encodeFunctionData(functionFragment: "getStats", values?: undefined): string;
    encodeFunctionData(functionFragment: "getVRFCoordinator", values?: undefined): string;
    encodeFunctionData(functionFragment: "rawFulfillRandomWords", values: [BigNumberish, BigNumberish[]]): string;
    encodeFunctionData(functionFragment: "requestRandomWords", values: [BigNumberish]): string;
    encodeFunctionData(functionFragment: "requestRandomWordsFromContract", values: [BigNumberish]): string;
    encodeFunctionData(functionFragment: "requests", values: [BigNumberish]): string;
    encodeFunctionData(functionFragment: "totalRequests", values?: undefined): string;
    decodeFunctionResult(functionFragment: "CALLBACK_GAS_LIMIT", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "MAX_WORDS_PER_REQUEST", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "allRequestIds", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "checkContractFunds", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "fulfilledRequests", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "fundVRF", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "getRequestPrice", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "getRequestStatus", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "getRequestsByRequester", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "getStats", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "getVRFCoordinator", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "rawFulfillRandomWords", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "requestRandomWords", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "requestRandomWordsFromContract", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "requests", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "totalRequests", data: BytesLike): Result;
}
export declare namespace FundsDepositedEvent {
    type InputTuple = [depositor: AddressLike, amount: BigNumberish];
    type OutputTuple = [depositor: string, amount: bigint];
    interface OutputObject {
        depositor: string;
        amount: bigint;
    }
    type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
    type Filter = TypedDeferredTopicFilter<Event>;
    type Log = TypedEventLog<Event>;
    type LogDescription = TypedLogDescription<Event>;
}
export declare namespace RandomDiceRollEvent {
    type InputTuple = [
        requestId: BigNumberish,
        requester: AddressLike,
        roll: BigNumberish
    ];
    type OutputTuple = [
        requestId: bigint,
        requester: string,
        roll: bigint
    ];
    interface OutputObject {
        requestId: bigint;
        requester: string;
        roll: bigint;
    }
    type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
    type Filter = TypedDeferredTopicFilter<Event>;
    type Log = TypedEventLog<Event>;
    type LogDescription = TypedLogDescription<Event>;
}
export declare namespace RandomLotteryNumbersEvent {
    type InputTuple = [
        requestId: BigNumberish,
        requester: AddressLike,
        numbers: BigNumberish[]
    ];
    type OutputTuple = [
        requestId: bigint,
        requester: string,
        numbers: bigint[]
    ];
    interface OutputObject {
        requestId: bigint;
        requester: string;
        numbers: bigint[];
    }
    type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
    type Filter = TypedDeferredTopicFilter<Event>;
    type Log = TypedEventLog<Event>;
    type LogDescription = TypedLogDescription<Event>;
}
export declare namespace RandomPercentageEvent {
    type InputTuple = [
        requestId: BigNumberish,
        requester: AddressLike,
        percentage: BigNumberish
    ];
    type OutputTuple = [
        requestId: bigint,
        requester: string,
        percentage: bigint
    ];
    interface OutputObject {
        requestId: bigint;
        requester: string;
        percentage: bigint;
    }
    type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
    type Filter = TypedDeferredTopicFilter<Event>;
    type Log = TypedEventLog<Event>;
    type LogDescription = TypedLogDescription<Event>;
}
export declare namespace RandomnessFulfilledEvent {
    type InputTuple = [
        requestId: BigNumberish,
        requester: AddressLike,
        randomWords: BigNumberish[],
        timestamp: BigNumberish
    ];
    type OutputTuple = [
        requestId: bigint,
        requester: string,
        randomWords: bigint[],
        timestamp: bigint
    ];
    interface OutputObject {
        requestId: bigint;
        requester: string;
        randomWords: bigint[];
        timestamp: bigint;
    }
    type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
    type Filter = TypedDeferredTopicFilter<Event>;
    type Log = TypedEventLog<Event>;
    type LogDescription = TypedLogDescription<Event>;
}
export declare namespace RandomnessRequestedEvent {
    type InputTuple = [
        requestId: BigNumberish,
        requester: AddressLike,
        numWords: BigNumberish,
        timestamp: BigNumberish,
        paidFromContract: boolean
    ];
    type OutputTuple = [
        requestId: bigint,
        requester: string,
        numWords: bigint,
        timestamp: bigint,
        paidFromContract: boolean
    ];
    interface OutputObject {
        requestId: bigint;
        requester: string;
        numWords: bigint;
        timestamp: bigint;
        paidFromContract: boolean;
    }
    type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>;
    type Filter = TypedDeferredTopicFilter<Event>;
    type Log = TypedEventLog<Event>;
    type LogDescription = TypedLogDescription<Event>;
}
export interface ExampleVRFConsumer extends BaseContract {
    connect(runner?: ContractRunner | null): ExampleVRFConsumer;
    waitForDeployment(): Promise<this>;
    interface: ExampleVRFConsumerInterface;
    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>;
    CALLBACK_GAS_LIMIT: TypedContractMethod<[], [bigint], "view">;
    MAX_WORDS_PER_REQUEST: TypedContractMethod<[], [bigint], "view">;
    allRequestIds: TypedContractMethod<[arg0: BigNumberish], [bigint], "view">;
    checkContractFunds: TypedContractMethod<[
    ], [
        [
            boolean,
            bigint,
            bigint
        ] & {
            sufficient: boolean;
            available: bigint;
            required: bigint;
        }
    ], "view">;
    fulfilledRequests: TypedContractMethod<[], [bigint], "view">;
    fundVRF: TypedContractMethod<[], [void], "payable">;
    getRequestPrice: TypedContractMethod<[
        numWords: BigNumberish
    ], [
        bigint
    ], "view">;
    getRequestStatus: TypedContractMethod<[
        requestId: BigNumberish
    ], [
        [
            boolean,
            boolean,
            string,
            bigint,
            string,
            bigint,
            bigint[]
        ] & {
            exists: boolean;
            fulfilled: boolean;
            requester: string;
            numWords: bigint;
            refundee: string;
            requestedAt: bigint;
            randomWords: bigint[];
        }
    ], "view">;
    getRequestsByRequester: TypedContractMethod<[
        requester: AddressLike
    ], [
        bigint[]
    ], "view">;
    getStats: TypedContractMethod<[
    ], [
        [
            bigint,
            bigint,
            bigint
        ] & {
            total: bigint;
            fulfilled: bigint;
            pending: bigint;
        }
    ], "view">;
    getVRFCoordinator: TypedContractMethod<[], [string], "view">;
    rawFulfillRandomWords: TypedContractMethod<[
        requestId: BigNumberish,
        randomWords: BigNumberish[]
    ], [
        void
    ], "nonpayable">;
    requestRandomWords: TypedContractMethod<[
        numWords: BigNumberish
    ], [
        bigint
    ], "payable">;
    requestRandomWordsFromContract: TypedContractMethod<[
        numWords: BigNumberish
    ], [
        bigint
    ], "nonpayable">;
    requests: TypedContractMethod<[
        arg0: BigNumberish
    ], [
        [
            string,
            bigint,
            bigint,
            boolean
        ] & {
            requester: string;
            numWords: bigint;
            requestedAt: bigint;
            fulfilled: boolean;
        }
    ], "view">;
    totalRequests: TypedContractMethod<[], [bigint], "view">;
    getFunction<T extends ContractMethod = ContractMethod>(key: string | FunctionFragment): T;
    getFunction(nameOrSignature: "CALLBACK_GAS_LIMIT"): TypedContractMethod<[], [bigint], "view">;
    getFunction(nameOrSignature: "MAX_WORDS_PER_REQUEST"): TypedContractMethod<[], [bigint], "view">;
    getFunction(nameOrSignature: "allRequestIds"): TypedContractMethod<[arg0: BigNumberish], [bigint], "view">;
    getFunction(nameOrSignature: "checkContractFunds"): TypedContractMethod<[
    ], [
        [
            boolean,
            bigint,
            bigint
        ] & {
            sufficient: boolean;
            available: bigint;
            required: bigint;
        }
    ], "view">;
    getFunction(nameOrSignature: "fulfilledRequests"): TypedContractMethod<[], [bigint], "view">;
    getFunction(nameOrSignature: "fundVRF"): TypedContractMethod<[], [void], "payable">;
    getFunction(nameOrSignature: "getRequestPrice"): TypedContractMethod<[numWords: BigNumberish], [bigint], "view">;
    getFunction(nameOrSignature: "getRequestStatus"): TypedContractMethod<[
        requestId: BigNumberish
    ], [
        [
            boolean,
            boolean,
            string,
            bigint,
            string,
            bigint,
            bigint[]
        ] & {
            exists: boolean;
            fulfilled: boolean;
            requester: string;
            numWords: bigint;
            refundee: string;
            requestedAt: bigint;
            randomWords: bigint[];
        }
    ], "view">;
    getFunction(nameOrSignature: "getRequestsByRequester"): TypedContractMethod<[requester: AddressLike], [bigint[]], "view">;
    getFunction(nameOrSignature: "getStats"): TypedContractMethod<[
    ], [
        [
            bigint,
            bigint,
            bigint
        ] & {
            total: bigint;
            fulfilled: bigint;
            pending: bigint;
        }
    ], "view">;
    getFunction(nameOrSignature: "getVRFCoordinator"): TypedContractMethod<[], [string], "view">;
    getFunction(nameOrSignature: "rawFulfillRandomWords"): TypedContractMethod<[
        requestId: BigNumberish,
        randomWords: BigNumberish[]
    ], [
        void
    ], "nonpayable">;
    getFunction(nameOrSignature: "requestRandomWords"): TypedContractMethod<[numWords: BigNumberish], [bigint], "payable">;
    getFunction(nameOrSignature: "requestRandomWordsFromContract"): TypedContractMethod<[numWords: BigNumberish], [bigint], "nonpayable">;
    getFunction(nameOrSignature: "requests"): TypedContractMethod<[
        arg0: BigNumberish
    ], [
        [
            string,
            bigint,
            bigint,
            boolean
        ] & {
            requester: string;
            numWords: bigint;
            requestedAt: bigint;
            fulfilled: boolean;
        }
    ], "view">;
    getFunction(nameOrSignature: "totalRequests"): TypedContractMethod<[], [bigint], "view">;
    getEvent(key: "FundsDeposited"): TypedContractEvent<FundsDepositedEvent.InputTuple, FundsDepositedEvent.OutputTuple, FundsDepositedEvent.OutputObject>;
    getEvent(key: "RandomDiceRoll"): TypedContractEvent<RandomDiceRollEvent.InputTuple, RandomDiceRollEvent.OutputTuple, RandomDiceRollEvent.OutputObject>;
    getEvent(key: "RandomLotteryNumbers"): TypedContractEvent<RandomLotteryNumbersEvent.InputTuple, RandomLotteryNumbersEvent.OutputTuple, RandomLotteryNumbersEvent.OutputObject>;
    getEvent(key: "RandomPercentage"): TypedContractEvent<RandomPercentageEvent.InputTuple, RandomPercentageEvent.OutputTuple, RandomPercentageEvent.OutputObject>;
    getEvent(key: "RandomnessFulfilled"): TypedContractEvent<RandomnessFulfilledEvent.InputTuple, RandomnessFulfilledEvent.OutputTuple, RandomnessFulfilledEvent.OutputObject>;
    getEvent(key: "RandomnessRequested"): TypedContractEvent<RandomnessRequestedEvent.InputTuple, RandomnessRequestedEvent.OutputTuple, RandomnessRequestedEvent.OutputObject>;
    filters: {
        "FundsDeposited(address,uint256)": TypedContractEvent<FundsDepositedEvent.InputTuple, FundsDepositedEvent.OutputTuple, FundsDepositedEvent.OutputObject>;
        FundsDeposited: TypedContractEvent<FundsDepositedEvent.InputTuple, FundsDepositedEvent.OutputTuple, FundsDepositedEvent.OutputObject>;
        "RandomDiceRoll(uint256,address,uint256)": TypedContractEvent<RandomDiceRollEvent.InputTuple, RandomDiceRollEvent.OutputTuple, RandomDiceRollEvent.OutputObject>;
        RandomDiceRoll: TypedContractEvent<RandomDiceRollEvent.InputTuple, RandomDiceRollEvent.OutputTuple, RandomDiceRollEvent.OutputObject>;
        "RandomLotteryNumbers(uint256,address,uint256[])": TypedContractEvent<RandomLotteryNumbersEvent.InputTuple, RandomLotteryNumbersEvent.OutputTuple, RandomLotteryNumbersEvent.OutputObject>;
        RandomLotteryNumbers: TypedContractEvent<RandomLotteryNumbersEvent.InputTuple, RandomLotteryNumbersEvent.OutputTuple, RandomLotteryNumbersEvent.OutputObject>;
        "RandomPercentage(uint256,address,uint256)": TypedContractEvent<RandomPercentageEvent.InputTuple, RandomPercentageEvent.OutputTuple, RandomPercentageEvent.OutputObject>;
        RandomPercentage: TypedContractEvent<RandomPercentageEvent.InputTuple, RandomPercentageEvent.OutputTuple, RandomPercentageEvent.OutputObject>;
        "RandomnessFulfilled(uint256,address,uint256[],uint256)": TypedContractEvent<RandomnessFulfilledEvent.InputTuple, RandomnessFulfilledEvent.OutputTuple, RandomnessFulfilledEvent.OutputObject>;
        RandomnessFulfilled: TypedContractEvent<RandomnessFulfilledEvent.InputTuple, RandomnessFulfilledEvent.OutputTuple, RandomnessFulfilledEvent.OutputObject>;
        "RandomnessRequested(uint256,address,uint256,uint256,bool)": TypedContractEvent<RandomnessRequestedEvent.InputTuple, RandomnessRequestedEvent.OutputTuple, RandomnessRequestedEvent.OutputObject>;
        RandomnessRequested: TypedContractEvent<RandomnessRequestedEvent.InputTuple, RandomnessRequestedEvent.OutputTuple, RandomnessRequestedEvent.OutputObject>;
    };
}
//# sourceMappingURL=ExampleVRFConsumer.d.ts.map