import type { BaseContract, BigNumber, BigNumberish, BytesLike, CallOverrides, ContractTransaction, Overrides, 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 IGoodDollarExchangeProviderInterface extends utils.Interface {
    functions: {
        "initialize(address,address,address,address)": FunctionFragment;
        "mintFromExpansion(bytes32,uint256)": FunctionFragment;
        "mintFromInterest(bytes32,uint256)": FunctionFragment;
        "pause()": FunctionFragment;
        "setAvatar(address)": FunctionFragment;
        "setExpansionController(address)": FunctionFragment;
        "unpause()": FunctionFragment;
        "updateRatioForReward(bytes32,uint256,uint256)": FunctionFragment;
    };
    getFunction(nameOrSignatureOrTopic: "initialize" | "mintFromExpansion" | "mintFromInterest" | "pause" | "setAvatar" | "setExpansionController" | "unpause" | "updateRatioForReward"): FunctionFragment;
    encodeFunctionData(functionFragment: "initialize", values: [
        PromiseOrValue<string>,
        PromiseOrValue<string>,
        PromiseOrValue<string>,
        PromiseOrValue<string>
    ]): string;
    encodeFunctionData(functionFragment: "mintFromExpansion", values: [PromiseOrValue<BytesLike>, PromiseOrValue<BigNumberish>]): string;
    encodeFunctionData(functionFragment: "mintFromInterest", values: [PromiseOrValue<BytesLike>, PromiseOrValue<BigNumberish>]): string;
    encodeFunctionData(functionFragment: "pause", values?: undefined): string;
    encodeFunctionData(functionFragment: "setAvatar", values: [PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: "setExpansionController", values: [PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: "unpause", values?: undefined): string;
    encodeFunctionData(functionFragment: "updateRatioForReward", values: [
        PromiseOrValue<BytesLike>,
        PromiseOrValue<BigNumberish>,
        PromiseOrValue<BigNumberish>
    ]): string;
    decodeFunctionResult(functionFragment: "initialize", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "mintFromExpansion", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "mintFromInterest", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "pause", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "setAvatar", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "setExpansionController", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "unpause", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "updateRatioForReward", data: BytesLike): Result;
    events: {
        "AvatarUpdated(address)": EventFragment;
        "ExpansionControllerUpdated(address)": EventFragment;
        "ReserveRatioUpdated(bytes32,uint32)": EventFragment;
    };
    getEvent(nameOrSignatureOrTopic: "AvatarUpdated"): EventFragment;
    getEvent(nameOrSignatureOrTopic: "ExpansionControllerUpdated"): EventFragment;
    getEvent(nameOrSignatureOrTopic: "ReserveRatioUpdated"): EventFragment;
}
export interface AvatarUpdatedEventObject {
    AVATAR: string;
}
export type AvatarUpdatedEvent = TypedEvent<[string], AvatarUpdatedEventObject>;
export type AvatarUpdatedEventFilter = TypedEventFilter<AvatarUpdatedEvent>;
export interface ExpansionControllerUpdatedEventObject {
    expansionController: string;
}
export type ExpansionControllerUpdatedEvent = TypedEvent<[
    string
], ExpansionControllerUpdatedEventObject>;
export type ExpansionControllerUpdatedEventFilter = TypedEventFilter<ExpansionControllerUpdatedEvent>;
export interface ReserveRatioUpdatedEventObject {
    exchangeId: string;
    reserveRatio: number;
}
export type ReserveRatioUpdatedEvent = TypedEvent<[
    string,
    number
], ReserveRatioUpdatedEventObject>;
export type ReserveRatioUpdatedEventFilter = TypedEventFilter<ReserveRatioUpdatedEvent>;
export interface IGoodDollarExchangeProvider extends BaseContract {
    connect(signerOrProvider: Signer | Provider | string): this;
    attach(addressOrName: string): this;
    deployed(): Promise<this>;
    interface: IGoodDollarExchangeProviderInterface;
    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: {
        initialize(_broker: PromiseOrValue<string>, _reserve: PromiseOrValue<string>, _expansionController: PromiseOrValue<string>, _avatar: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        mintFromExpansion(exchangeId: PromiseOrValue<BytesLike>, reserveRatioScalar: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        mintFromInterest(exchangeId: PromiseOrValue<BytesLike>, reserveInterest: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        pause(overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        setAvatar(_avatar: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        setExpansionController(_expansionController: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        unpause(overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        updateRatioForReward(exchangeId: PromiseOrValue<BytesLike>, reward: PromiseOrValue<BigNumberish>, maxSlippagePercentage: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
    };
    initialize(_broker: PromiseOrValue<string>, _reserve: PromiseOrValue<string>, _expansionController: PromiseOrValue<string>, _avatar: PromiseOrValue<string>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    mintFromExpansion(exchangeId: PromiseOrValue<BytesLike>, reserveRatioScalar: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    mintFromInterest(exchangeId: PromiseOrValue<BytesLike>, reserveInterest: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    pause(overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    setAvatar(_avatar: PromiseOrValue<string>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    setExpansionController(_expansionController: PromiseOrValue<string>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    unpause(overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    updateRatioForReward(exchangeId: PromiseOrValue<BytesLike>, reward: PromiseOrValue<BigNumberish>, maxSlippagePercentage: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    callStatic: {
        initialize(_broker: PromiseOrValue<string>, _reserve: PromiseOrValue<string>, _expansionController: PromiseOrValue<string>, _avatar: PromiseOrValue<string>, overrides?: CallOverrides): Promise<void>;
        mintFromExpansion(exchangeId: PromiseOrValue<BytesLike>, reserveRatioScalar: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<BigNumber>;
        mintFromInterest(exchangeId: PromiseOrValue<BytesLike>, reserveInterest: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<BigNumber>;
        pause(overrides?: CallOverrides): Promise<void>;
        setAvatar(_avatar: PromiseOrValue<string>, overrides?: CallOverrides): Promise<void>;
        setExpansionController(_expansionController: PromiseOrValue<string>, overrides?: CallOverrides): Promise<void>;
        unpause(overrides?: CallOverrides): Promise<void>;
        updateRatioForReward(exchangeId: PromiseOrValue<BytesLike>, reward: PromiseOrValue<BigNumberish>, maxSlippagePercentage: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<void>;
    };
    filters: {
        "AvatarUpdated(address)"(AVATAR?: PromiseOrValue<string> | null): AvatarUpdatedEventFilter;
        AvatarUpdated(AVATAR?: PromiseOrValue<string> | null): AvatarUpdatedEventFilter;
        "ExpansionControllerUpdated(address)"(expansionController?: PromiseOrValue<string> | null): ExpansionControllerUpdatedEventFilter;
        ExpansionControllerUpdated(expansionController?: PromiseOrValue<string> | null): ExpansionControllerUpdatedEventFilter;
        "ReserveRatioUpdated(bytes32,uint32)"(exchangeId?: PromiseOrValue<BytesLike> | null, reserveRatio?: null): ReserveRatioUpdatedEventFilter;
        ReserveRatioUpdated(exchangeId?: PromiseOrValue<BytesLike> | null, reserveRatio?: null): ReserveRatioUpdatedEventFilter;
    };
    estimateGas: {
        initialize(_broker: PromiseOrValue<string>, _reserve: PromiseOrValue<string>, _expansionController: PromiseOrValue<string>, _avatar: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        mintFromExpansion(exchangeId: PromiseOrValue<BytesLike>, reserveRatioScalar: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        mintFromInterest(exchangeId: PromiseOrValue<BytesLike>, reserveInterest: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        pause(overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        setAvatar(_avatar: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        setExpansionController(_expansionController: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        unpause(overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        updateRatioForReward(exchangeId: PromiseOrValue<BytesLike>, reward: PromiseOrValue<BigNumberish>, maxSlippagePercentage: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
    };
    populateTransaction: {
        initialize(_broker: PromiseOrValue<string>, _reserve: PromiseOrValue<string>, _expansionController: PromiseOrValue<string>, _avatar: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        mintFromExpansion(exchangeId: PromiseOrValue<BytesLike>, reserveRatioScalar: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        mintFromInterest(exchangeId: PromiseOrValue<BytesLike>, reserveInterest: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        pause(overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        setAvatar(_avatar: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        setExpansionController(_expansionController: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        unpause(overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        updateRatioForReward(exchangeId: PromiseOrValue<BytesLike>, reward: PromiseOrValue<BigNumberish>, maxSlippagePercentage: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
    };
}
