import type { BaseContract, BigNumber, BigNumberish, BytesLike, CallOverrides, ContractTransaction, Overrides, PayableOverrides, PopulatedTransaction, Signer, utils } from "ethers";
import type { FunctionFragment, Result, EventFragment } from "@ethersproject/abi";
import type { Listener, Provider } from "@ethersproject/providers";
import type { TypedEventFilter, TypedEvent, TypedListener, OnEvent, PromiseOrValue } from "../../../common";
export interface GelatoInterface extends utils.Interface {
    functions: {
        "addWhitelistedService(address)": FunctionFragment;
        "depositFunds(address,address,uint256)": FunctionFragment;
        "gelato()": FunctionFragment;
        "getCreditTokensByUser(address)": FunctionFragment;
        "getWhitelistedServices()": FunctionFragment;
        "maxFee()": FunctionFragment;
        "owner()": FunctionFragment;
        "removeWhitelistedService(address)": FunctionFragment;
        "renounceOwnership()": FunctionFragment;
        "setMaxFee(uint256)": FunctionFragment;
        "transferOwnership(address)": FunctionFragment;
        "useFunds(address,uint256,address)": FunctionFragment;
        "userTokenBalance(address,address)": FunctionFragment;
        "withdrawFunds(address,address,uint256)": FunctionFragment;
    };
    getFunction(nameOrSignatureOrTopic: "addWhitelistedService" | "depositFunds" | "gelato" | "getCreditTokensByUser" | "getWhitelistedServices" | "maxFee" | "owner" | "removeWhitelistedService" | "renounceOwnership" | "setMaxFee" | "transferOwnership" | "useFunds" | "userTokenBalance" | "withdrawFunds"): FunctionFragment;
    encodeFunctionData(functionFragment: "addWhitelistedService", values: [PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: "depositFunds", values: [
        PromiseOrValue<string>,
        PromiseOrValue<string>,
        PromiseOrValue<BigNumberish>
    ]): string;
    encodeFunctionData(functionFragment: "gelato", values?: undefined): string;
    encodeFunctionData(functionFragment: "getCreditTokensByUser", values: [PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: "getWhitelistedServices", values?: undefined): string;
    encodeFunctionData(functionFragment: "maxFee", values?: undefined): string;
    encodeFunctionData(functionFragment: "owner", values?: undefined): string;
    encodeFunctionData(functionFragment: "removeWhitelistedService", values: [PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: "renounceOwnership", values?: undefined): string;
    encodeFunctionData(functionFragment: "setMaxFee", values: [PromiseOrValue<BigNumberish>]): string;
    encodeFunctionData(functionFragment: "transferOwnership", values: [PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: "useFunds", values: [
        PromiseOrValue<string>,
        PromiseOrValue<BigNumberish>,
        PromiseOrValue<string>
    ]): string;
    encodeFunctionData(functionFragment: "userTokenBalance", values: [PromiseOrValue<string>, PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: "withdrawFunds", values: [
        PromiseOrValue<string>,
        PromiseOrValue<string>,
        PromiseOrValue<BigNumberish>
    ]): string;
    decodeFunctionResult(functionFragment: "addWhitelistedService", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "depositFunds", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "gelato", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "getCreditTokensByUser", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "getWhitelistedServices", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "maxFee", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "owner", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "removeWhitelistedService", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "renounceOwnership", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "setMaxFee", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "transferOwnership", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "useFunds", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "userTokenBalance", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "withdrawFunds", data: BytesLike): Result;
    events: {
        "FundsDeposited(address,address,uint256)": EventFragment;
        "FundsWithdrawn(address,address,address,uint256)": EventFragment;
        "OwnershipTransferred(address,address)": EventFragment;
    };
    getEvent(nameOrSignatureOrTopic: "FundsDeposited"): EventFragment;
    getEvent(nameOrSignatureOrTopic: "FundsWithdrawn"): EventFragment;
    getEvent(nameOrSignatureOrTopic: "OwnershipTransferred"): EventFragment;
}
export interface FundsDepositedEventObject {
    sender: string;
    token: string;
    amount: BigNumber;
}
export type FundsDepositedEvent = TypedEvent<[
    string,
    string,
    BigNumber
], FundsDepositedEventObject>;
export type FundsDepositedEventFilter = TypedEventFilter<FundsDepositedEvent>;
export interface FundsWithdrawnEventObject {
    receiver: string;
    initiator: string;
    token: string;
    amount: BigNumber;
}
export type FundsWithdrawnEvent = TypedEvent<[
    string,
    string,
    string,
    BigNumber
], FundsWithdrawnEventObject>;
export type FundsWithdrawnEventFilter = TypedEventFilter<FundsWithdrawnEvent>;
export interface OwnershipTransferredEventObject {
    previousOwner: string;
    newOwner: string;
}
export type OwnershipTransferredEvent = TypedEvent<[
    string,
    string
], OwnershipTransferredEventObject>;
export type OwnershipTransferredEventFilter = TypedEventFilter<OwnershipTransferredEvent>;
export interface Gelato extends BaseContract {
    connect(signerOrProvider: Signer | Provider | string): this;
    attach(addressOrName: string): this;
    deployed(): Promise<this>;
    interface: GelatoInterface;
    queryFilter<TEvent extends TypedEvent>(event: TypedEventFilter<TEvent>, fromBlockOrBlockhash?: string | number | undefined, toBlock?: string | number | undefined): Promise<Array<TEvent>>;
    listeners<TEvent extends TypedEvent>(eventFilter?: TypedEventFilter<TEvent>): Array<TypedListener<TEvent>>;
    listeners(eventName?: string): Array<Listener>;
    removeAllListeners<TEvent extends TypedEvent>(eventFilter: TypedEventFilter<TEvent>): this;
    removeAllListeners(eventName?: string): this;
    off: OnEvent<this>;
    on: OnEvent<this>;
    once: OnEvent<this>;
    removeListener: OnEvent<this>;
    functions: {
        addWhitelistedService(_service: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        depositFunds(_receiver: PromiseOrValue<string>, _token: PromiseOrValue<string>, _amount: PromiseOrValue<BigNumberish>, overrides?: PayableOverrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        gelato(overrides?: CallOverrides): Promise<[string]>;
        getCreditTokensByUser(_user: PromiseOrValue<string>, overrides?: CallOverrides): Promise<[string[]]>;
        getWhitelistedServices(overrides?: CallOverrides): Promise<[string[]]>;
        maxFee(overrides?: CallOverrides): Promise<[BigNumber]>;
        owner(overrides?: CallOverrides): Promise<[string]>;
        removeWhitelistedService(_service: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        renounceOwnership(overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        setMaxFee(_newMaxFee: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        transferOwnership(newOwner: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        useFunds(_token: PromiseOrValue<string>, _amount: PromiseOrValue<BigNumberish>, _user: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        userTokenBalance(arg0: PromiseOrValue<string>, arg1: PromiseOrValue<string>, overrides?: CallOverrides): Promise<[BigNumber]>;
        withdrawFunds(_receiver: PromiseOrValue<string>, _token: PromiseOrValue<string>, _amount: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
    };
    addWhitelistedService(_service: PromiseOrValue<string>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    depositFunds(_receiver: PromiseOrValue<string>, _token: PromiseOrValue<string>, _amount: PromiseOrValue<BigNumberish>, overrides?: PayableOverrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    gelato(overrides?: CallOverrides): Promise<string>;
    getCreditTokensByUser(_user: PromiseOrValue<string>, overrides?: CallOverrides): Promise<string[]>;
    getWhitelistedServices(overrides?: CallOverrides): Promise<string[]>;
    maxFee(overrides?: CallOverrides): Promise<BigNumber>;
    owner(overrides?: CallOverrides): Promise<string>;
    removeWhitelistedService(_service: PromiseOrValue<string>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    renounceOwnership(overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    setMaxFee(_newMaxFee: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    transferOwnership(newOwner: PromiseOrValue<string>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    useFunds(_token: PromiseOrValue<string>, _amount: PromiseOrValue<BigNumberish>, _user: PromiseOrValue<string>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    userTokenBalance(arg0: PromiseOrValue<string>, arg1: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
    withdrawFunds(_receiver: PromiseOrValue<string>, _token: PromiseOrValue<string>, _amount: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    callStatic: {
        addWhitelistedService(_service: PromiseOrValue<string>, overrides?: CallOverrides): Promise<void>;
        depositFunds(_receiver: PromiseOrValue<string>, _token: PromiseOrValue<string>, _amount: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<void>;
        gelato(overrides?: CallOverrides): Promise<string>;
        getCreditTokensByUser(_user: PromiseOrValue<string>, overrides?: CallOverrides): Promise<string[]>;
        getWhitelistedServices(overrides?: CallOverrides): Promise<string[]>;
        maxFee(overrides?: CallOverrides): Promise<BigNumber>;
        owner(overrides?: CallOverrides): Promise<string>;
        removeWhitelistedService(_service: PromiseOrValue<string>, overrides?: CallOverrides): Promise<void>;
        renounceOwnership(overrides?: CallOverrides): Promise<void>;
        setMaxFee(_newMaxFee: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<void>;
        transferOwnership(newOwner: PromiseOrValue<string>, overrides?: CallOverrides): Promise<void>;
        useFunds(_token: PromiseOrValue<string>, _amount: PromiseOrValue<BigNumberish>, _user: PromiseOrValue<string>, overrides?: CallOverrides): Promise<void>;
        userTokenBalance(arg0: PromiseOrValue<string>, arg1: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
        withdrawFunds(_receiver: PromiseOrValue<string>, _token: PromiseOrValue<string>, _amount: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<void>;
    };
    filters: {
        "FundsDeposited(address,address,uint256)"(sender?: PromiseOrValue<string> | null, token?: PromiseOrValue<string> | null, amount?: PromiseOrValue<BigNumberish> | null): FundsDepositedEventFilter;
        FundsDeposited(sender?: PromiseOrValue<string> | null, token?: PromiseOrValue<string> | null, amount?: PromiseOrValue<BigNumberish> | null): FundsDepositedEventFilter;
        "FundsWithdrawn(address,address,address,uint256)"(receiver?: PromiseOrValue<string> | null, initiator?: PromiseOrValue<string> | null, token?: PromiseOrValue<string> | null, amount?: null): FundsWithdrawnEventFilter;
        FundsWithdrawn(receiver?: PromiseOrValue<string> | null, initiator?: PromiseOrValue<string> | null, token?: PromiseOrValue<string> | null, amount?: null): FundsWithdrawnEventFilter;
        "OwnershipTransferred(address,address)"(previousOwner?: PromiseOrValue<string> | null, newOwner?: PromiseOrValue<string> | null): OwnershipTransferredEventFilter;
        OwnershipTransferred(previousOwner?: PromiseOrValue<string> | null, newOwner?: PromiseOrValue<string> | null): OwnershipTransferredEventFilter;
    };
    estimateGas: {
        addWhitelistedService(_service: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        depositFunds(_receiver: PromiseOrValue<string>, _token: PromiseOrValue<string>, _amount: PromiseOrValue<BigNumberish>, overrides?: PayableOverrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        gelato(overrides?: CallOverrides): Promise<BigNumber>;
        getCreditTokensByUser(_user: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
        getWhitelistedServices(overrides?: CallOverrides): Promise<BigNumber>;
        maxFee(overrides?: CallOverrides): Promise<BigNumber>;
        owner(overrides?: CallOverrides): Promise<BigNumber>;
        removeWhitelistedService(_service: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        renounceOwnership(overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        setMaxFee(_newMaxFee: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        transferOwnership(newOwner: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        useFunds(_token: PromiseOrValue<string>, _amount: PromiseOrValue<BigNumberish>, _user: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        userTokenBalance(arg0: PromiseOrValue<string>, arg1: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
        withdrawFunds(_receiver: PromiseOrValue<string>, _token: PromiseOrValue<string>, _amount: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
    };
    populateTransaction: {
        addWhitelistedService(_service: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        depositFunds(_receiver: PromiseOrValue<string>, _token: PromiseOrValue<string>, _amount: PromiseOrValue<BigNumberish>, overrides?: PayableOverrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        gelato(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        getCreditTokensByUser(_user: PromiseOrValue<string>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        getWhitelistedServices(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        maxFee(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        owner(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        removeWhitelistedService(_service: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        renounceOwnership(overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        setMaxFee(_newMaxFee: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        transferOwnership(newOwner: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        useFunds(_token: PromiseOrValue<string>, _amount: PromiseOrValue<BigNumberish>, _user: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        userTokenBalance(arg0: PromiseOrValue<string>, arg1: PromiseOrValue<string>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        withdrawFunds(_receiver: PromiseOrValue<string>, _token: PromiseOrValue<string>, _amount: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
    };
}
