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 declare namespace IBancorExchangeProvider {
    type PoolExchangeStruct = {
        reserveAsset: PromiseOrValue<string>;
        tokenAddress: PromiseOrValue<string>;
        tokenSupply: PromiseOrValue<BigNumberish>;
        reserveBalance: PromiseOrValue<BigNumberish>;
        reserveRatio: PromiseOrValue<BigNumberish>;
        exitContribution: PromiseOrValue<BigNumberish>;
    };
    type PoolExchangeStructOutput = [
        string,
        string,
        BigNumber,
        BigNumber,
        number,
        number
    ] & {
        reserveAsset: string;
        tokenAddress: string;
        tokenSupply: BigNumber;
        reserveBalance: BigNumber;
        reserveRatio: number;
        exitContribution: number;
    };
}
export interface IBancorExchangeProviderInterface extends utils.Interface {
    functions: {
        "createExchange((address,address,uint256,uint256,uint32,uint32))": FunctionFragment;
        "currentPrice(bytes32)": FunctionFragment;
        "destroyExchange(bytes32,uint256)": FunctionFragment;
        "getExchangeIds()": FunctionFragment;
        "getPoolExchange(bytes32)": FunctionFragment;
        "initialize(address,address)": FunctionFragment;
        "setBroker(address)": FunctionFragment;
        "setExitContribution(bytes32,uint32)": FunctionFragment;
        "setReserve(address)": FunctionFragment;
    };
    getFunction(nameOrSignatureOrTopic: "createExchange" | "currentPrice" | "destroyExchange" | "getExchangeIds" | "getPoolExchange" | "initialize" | "setBroker" | "setExitContribution" | "setReserve"): FunctionFragment;
    encodeFunctionData(functionFragment: "createExchange", values: [IBancorExchangeProvider.PoolExchangeStruct]): string;
    encodeFunctionData(functionFragment: "currentPrice", values: [PromiseOrValue<BytesLike>]): string;
    encodeFunctionData(functionFragment: "destroyExchange", values: [PromiseOrValue<BytesLike>, PromiseOrValue<BigNumberish>]): string;
    encodeFunctionData(functionFragment: "getExchangeIds", values?: undefined): string;
    encodeFunctionData(functionFragment: "getPoolExchange", values: [PromiseOrValue<BytesLike>]): string;
    encodeFunctionData(functionFragment: "initialize", values: [PromiseOrValue<string>, PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: "setBroker", values: [PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: "setExitContribution", values: [PromiseOrValue<BytesLike>, PromiseOrValue<BigNumberish>]): string;
    encodeFunctionData(functionFragment: "setReserve", values: [PromiseOrValue<string>]): string;
    decodeFunctionResult(functionFragment: "createExchange", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "currentPrice", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "destroyExchange", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "getExchangeIds", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "getPoolExchange", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "initialize", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "setBroker", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "setExitContribution", data: BytesLike): Result;
    decodeFunctionResult(functionFragment: "setReserve", data: BytesLike): Result;
    events: {
        "BrokerUpdated(address)": EventFragment;
        "ExchangeCreated(bytes32,address,address)": EventFragment;
        "ExchangeDestroyed(bytes32,address,address)": EventFragment;
        "ExitContributionSet(bytes32,uint256)": EventFragment;
        "ReserveUpdated(address)": EventFragment;
    };
    getEvent(nameOrSignatureOrTopic: "BrokerUpdated"): EventFragment;
    getEvent(nameOrSignatureOrTopic: "ExchangeCreated"): EventFragment;
    getEvent(nameOrSignatureOrTopic: "ExchangeDestroyed"): EventFragment;
    getEvent(nameOrSignatureOrTopic: "ExitContributionSet"): EventFragment;
    getEvent(nameOrSignatureOrTopic: "ReserveUpdated"): EventFragment;
}
export interface BrokerUpdatedEventObject {
    newBroker: string;
}
export type BrokerUpdatedEvent = TypedEvent<[string], BrokerUpdatedEventObject>;
export type BrokerUpdatedEventFilter = TypedEventFilter<BrokerUpdatedEvent>;
export interface ExchangeCreatedEventObject {
    exchangeId: string;
    reserveAsset: string;
    tokenAddress: string;
}
export type ExchangeCreatedEvent = TypedEvent<[
    string,
    string,
    string
], ExchangeCreatedEventObject>;
export type ExchangeCreatedEventFilter = TypedEventFilter<ExchangeCreatedEvent>;
export interface ExchangeDestroyedEventObject {
    exchangeId: string;
    reserveAsset: string;
    tokenAddress: string;
}
export type ExchangeDestroyedEvent = TypedEvent<[
    string,
    string,
    string
], ExchangeDestroyedEventObject>;
export type ExchangeDestroyedEventFilter = TypedEventFilter<ExchangeDestroyedEvent>;
export interface ExitContributionSetEventObject {
    exchangeId: string;
    exitContribution: BigNumber;
}
export type ExitContributionSetEvent = TypedEvent<[
    string,
    BigNumber
], ExitContributionSetEventObject>;
export type ExitContributionSetEventFilter = TypedEventFilter<ExitContributionSetEvent>;
export interface ReserveUpdatedEventObject {
    newReserve: string;
}
export type ReserveUpdatedEvent = TypedEvent<[
    string
], ReserveUpdatedEventObject>;
export type ReserveUpdatedEventFilter = TypedEventFilter<ReserveUpdatedEvent>;
export interface IBancorExchangeProvider extends BaseContract {
    connect(signerOrProvider: Signer | Provider | string): this;
    attach(addressOrName: string): this;
    deployed(): Promise<this>;
    interface: IBancorExchangeProviderInterface;
    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: {
        createExchange(exchange: IBancorExchangeProvider.PoolExchangeStruct, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        currentPrice(exchangeId: PromiseOrValue<BytesLike>, overrides?: CallOverrides): Promise<[BigNumber] & {
            price: BigNumber;
        }>;
        destroyExchange(exchangeId: PromiseOrValue<BytesLike>, exchangeIdIndex: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        getExchangeIds(overrides?: CallOverrides): Promise<[string[]] & {
            exchangeIds: string[];
        }>;
        getPoolExchange(exchangeId: PromiseOrValue<BytesLike>, overrides?: CallOverrides): Promise<[
            IBancorExchangeProvider.PoolExchangeStructOutput
        ] & {
            exchange: IBancorExchangeProvider.PoolExchangeStructOutput;
        }>;
        initialize(_broker: PromiseOrValue<string>, _reserve: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        setBroker(_broker: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        setExitContribution(exchangeId: PromiseOrValue<BytesLike>, exitContribution: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        setReserve(_reserve: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
    };
    createExchange(exchange: IBancorExchangeProvider.PoolExchangeStruct, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    currentPrice(exchangeId: PromiseOrValue<BytesLike>, overrides?: CallOverrides): Promise<BigNumber>;
    destroyExchange(exchangeId: PromiseOrValue<BytesLike>, exchangeIdIndex: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    getExchangeIds(overrides?: CallOverrides): Promise<string[]>;
    getPoolExchange(exchangeId: PromiseOrValue<BytesLike>, overrides?: CallOverrides): Promise<IBancorExchangeProvider.PoolExchangeStructOutput>;
    initialize(_broker: PromiseOrValue<string>, _reserve: PromiseOrValue<string>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    setBroker(_broker: PromiseOrValue<string>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    setExitContribution(exchangeId: PromiseOrValue<BytesLike>, exitContribution: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    setReserve(_reserve: PromiseOrValue<string>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    callStatic: {
        createExchange(exchange: IBancorExchangeProvider.PoolExchangeStruct, overrides?: CallOverrides): Promise<string>;
        currentPrice(exchangeId: PromiseOrValue<BytesLike>, overrides?: CallOverrides): Promise<BigNumber>;
        destroyExchange(exchangeId: PromiseOrValue<BytesLike>, exchangeIdIndex: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<boolean>;
        getExchangeIds(overrides?: CallOverrides): Promise<string[]>;
        getPoolExchange(exchangeId: PromiseOrValue<BytesLike>, overrides?: CallOverrides): Promise<IBancorExchangeProvider.PoolExchangeStructOutput>;
        initialize(_broker: PromiseOrValue<string>, _reserve: PromiseOrValue<string>, overrides?: CallOverrides): Promise<void>;
        setBroker(_broker: PromiseOrValue<string>, overrides?: CallOverrides): Promise<void>;
        setExitContribution(exchangeId: PromiseOrValue<BytesLike>, exitContribution: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<void>;
        setReserve(_reserve: PromiseOrValue<string>, overrides?: CallOverrides): Promise<void>;
    };
    filters: {
        "BrokerUpdated(address)"(newBroker?: PromiseOrValue<string> | null): BrokerUpdatedEventFilter;
        BrokerUpdated(newBroker?: PromiseOrValue<string> | null): BrokerUpdatedEventFilter;
        "ExchangeCreated(bytes32,address,address)"(exchangeId?: PromiseOrValue<BytesLike> | null, reserveAsset?: PromiseOrValue<string> | null, tokenAddress?: PromiseOrValue<string> | null): ExchangeCreatedEventFilter;
        ExchangeCreated(exchangeId?: PromiseOrValue<BytesLike> | null, reserveAsset?: PromiseOrValue<string> | null, tokenAddress?: PromiseOrValue<string> | null): ExchangeCreatedEventFilter;
        "ExchangeDestroyed(bytes32,address,address)"(exchangeId?: PromiseOrValue<BytesLike> | null, reserveAsset?: PromiseOrValue<string> | null, tokenAddress?: PromiseOrValue<string> | null): ExchangeDestroyedEventFilter;
        ExchangeDestroyed(exchangeId?: PromiseOrValue<BytesLike> | null, reserveAsset?: PromiseOrValue<string> | null, tokenAddress?: PromiseOrValue<string> | null): ExchangeDestroyedEventFilter;
        "ExitContributionSet(bytes32,uint256)"(exchangeId?: PromiseOrValue<BytesLike> | null, exitContribution?: null): ExitContributionSetEventFilter;
        ExitContributionSet(exchangeId?: PromiseOrValue<BytesLike> | null, exitContribution?: null): ExitContributionSetEventFilter;
        "ReserveUpdated(address)"(newReserve?: PromiseOrValue<string> | null): ReserveUpdatedEventFilter;
        ReserveUpdated(newReserve?: PromiseOrValue<string> | null): ReserveUpdatedEventFilter;
    };
    estimateGas: {
        createExchange(exchange: IBancorExchangeProvider.PoolExchangeStruct, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        currentPrice(exchangeId: PromiseOrValue<BytesLike>, overrides?: CallOverrides): Promise<BigNumber>;
        destroyExchange(exchangeId: PromiseOrValue<BytesLike>, exchangeIdIndex: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        getExchangeIds(overrides?: CallOverrides): Promise<BigNumber>;
        getPoolExchange(exchangeId: PromiseOrValue<BytesLike>, overrides?: CallOverrides): Promise<BigNumber>;
        initialize(_broker: PromiseOrValue<string>, _reserve: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        setBroker(_broker: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        setExitContribution(exchangeId: PromiseOrValue<BytesLike>, exitContribution: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        setReserve(_reserve: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
    };
    populateTransaction: {
        createExchange(exchange: IBancorExchangeProvider.PoolExchangeStruct, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        currentPrice(exchangeId: PromiseOrValue<BytesLike>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        destroyExchange(exchangeId: PromiseOrValue<BytesLike>, exchangeIdIndex: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        getExchangeIds(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        getPoolExchange(exchangeId: PromiseOrValue<BytesLike>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        initialize(_broker: PromiseOrValue<string>, _reserve: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        setBroker(_broker: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        setExitContribution(exchangeId: PromiseOrValue<BytesLike>, exitContribution: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        setReserve(_reserve: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
    };
}
