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 type Fraction112Struct = {
    n: PromiseOrValue<BigNumberish>;
    d: PromiseOrValue<BigNumberish>;
};
export declare type Fraction112StructOutput = [BigNumber, BigNumber] & {
    n: BigNumber;
    d: BigNumber;
};
export declare type AverageRatesStruct = {
    blockNumber: PromiseOrValue<BigNumberish>;
    rate: Fraction112Struct;
    invRate: Fraction112Struct;
};
export declare type AverageRatesStructOutput = [number, Fraction112StructOutput, Fraction112StructOutput] & {
    blockNumber: number;
    rate: Fraction112StructOutput;
    invRate: Fraction112StructOutput;
};
export declare type PoolLiquidityStruct = {
    bntTradingLiquidity: PromiseOrValue<BigNumberish>;
    baseTokenTradingLiquidity: PromiseOrValue<BigNumberish>;
    stakedBalance: PromiseOrValue<BigNumberish>;
};
export declare type PoolLiquidityStructOutput = [BigNumber, BigNumber, BigNumber] & {
    bntTradingLiquidity: BigNumber;
    baseTokenTradingLiquidity: BigNumber;
    stakedBalance: BigNumber;
};
export declare type PoolStruct = {
    poolToken: PromiseOrValue<string>;
    tradingFeePPM: PromiseOrValue<BigNumberish>;
    tradingEnabled: PromiseOrValue<boolean>;
    depositingEnabled: PromiseOrValue<boolean>;
    averageRates: AverageRatesStruct;
    liquidity: PoolLiquidityStruct;
};
export declare type PoolStructOutput = [
    string,
    number,
    boolean,
    boolean,
    AverageRatesStructOutput,
    PoolLiquidityStructOutput
] & {
    poolToken: string;
    tradingFeePPM: number;
    tradingEnabled: boolean;
    depositingEnabled: boolean;
    averageRates: AverageRatesStructOutput;
    liquidity: PoolLiquidityStructOutput;
};
export declare type TradeAmountAndFeeStruct = {
    amount: PromiseOrValue<BigNumberish>;
    tradingFeeAmount: PromiseOrValue<BigNumberish>;
    networkFeeAmount: PromiseOrValue<BigNumberish>;
};
export declare type TradeAmountAndFeeStructOutput = [BigNumber, BigNumber, BigNumber] & {
    amount: BigNumber;
    tradingFeeAmount: BigNumber;
    networkFeeAmount: BigNumber;
};
export declare type WithdrawalAmountsStruct = {
    totalAmount: PromiseOrValue<BigNumberish>;
    baseTokenAmount: PromiseOrValue<BigNumberish>;
    bntAmount: PromiseOrValue<BigNumberish>;
};
export declare type WithdrawalAmountsStructOutput = [BigNumber, BigNumber, BigNumber] & {
    totalAmount: BigNumber;
    baseTokenAmount: BigNumber;
    bntAmount: BigNumber;
};
export interface PoolCollectionInterface extends utils.Interface {
    functions: {
        'acceptOwnership()': FunctionFragment;
        'createPool(address)': FunctionFragment;
        'defaultTradingFeePPM()': FunctionFragment;
        'depositFor(bytes32,address,address,uint256)': FunctionFragment;
        'depositingEnabled(address)': FunctionFragment;
        'disableTrading(address)': FunctionFragment;
        'enableDepositing(address,bool)': FunctionFragment;
        'enableTrading(address,uint256,uint256)': FunctionFragment;
        'isPoolStable(address)': FunctionFragment;
        'isPoolValid(address)': FunctionFragment;
        'migratePoolIn(address,(address,uint32,bool,bool,(uint32,(uint112,uint112),(uint112,uint112)),(uint128,uint128,uint256)))': FunctionFragment;
        'migratePoolOut(address,address)': FunctionFragment;
        'newOwner()': FunctionFragment;
        'onFeesCollected(address,uint256)': FunctionFragment;
        'owner()': FunctionFragment;
        'poolCount()': FunctionFragment;
        'poolData(address)': FunctionFragment;
        'poolLiquidity(address)': FunctionFragment;
        'poolToken(address)': FunctionFragment;
        'poolTokenAmountToBurn(address,uint256,uint256)': FunctionFragment;
        'poolTokenToUnderlying(address,uint256)': FunctionFragment;
        'poolType()': FunctionFragment;
        'pools()': FunctionFragment;
        'setDefaultTradingFeePPM(uint32)': FunctionFragment;
        'setTradingFeePPM(address,uint32)': FunctionFragment;
        'tradeBySourceAmount(bytes32,address,address,uint256,uint256)': FunctionFragment;
        'tradeByTargetAmount(bytes32,address,address,uint256,uint256)': FunctionFragment;
        'tradeInputAndFeeByTargetAmount(address,address,uint256)': FunctionFragment;
        'tradeOutputAndFeeBySourceAmount(address,address,uint256)': FunctionFragment;
        'tradingEnabled(address)': FunctionFragment;
        'tradingFeePPM(address)': FunctionFragment;
        'transferOwnership(address)': FunctionFragment;
        'underlyingToPoolToken(address,uint256)': FunctionFragment;
        'version()': FunctionFragment;
        'withdraw(bytes32,address,address,uint256,uint256)': FunctionFragment;
        'withdrawalAmounts(address,uint256)': FunctionFragment;
    };
    getFunction(nameOrSignatureOrTopic: 'acceptOwnership' | 'createPool' | 'defaultTradingFeePPM' | 'depositFor' | 'depositingEnabled' | 'disableTrading' | 'enableDepositing' | 'enableTrading' | 'isPoolStable' | 'isPoolValid' | 'migratePoolIn' | 'migratePoolOut' | 'newOwner' | 'onFeesCollected' | 'owner' | 'poolCount' | 'poolData' | 'poolLiquidity' | 'poolToken' | 'poolTokenAmountToBurn' | 'poolTokenToUnderlying' | 'poolType' | 'pools' | 'setDefaultTradingFeePPM' | 'setTradingFeePPM' | 'tradeBySourceAmount' | 'tradeByTargetAmount' | 'tradeInputAndFeeByTargetAmount' | 'tradeOutputAndFeeBySourceAmount' | 'tradingEnabled' | 'tradingFeePPM' | 'transferOwnership' | 'underlyingToPoolToken' | 'version' | 'withdraw' | 'withdrawalAmounts'): FunctionFragment;
    encodeFunctionData(functionFragment: 'acceptOwnership', values?: undefined): string;
    encodeFunctionData(functionFragment: 'createPool', values: [PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: 'defaultTradingFeePPM', values?: undefined): string;
    encodeFunctionData(functionFragment: 'depositFor', values: [PromiseOrValue<BytesLike>, PromiseOrValue<string>, PromiseOrValue<string>, PromiseOrValue<BigNumberish>]): string;
    encodeFunctionData(functionFragment: 'depositingEnabled', values: [PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: 'disableTrading', values: [PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: 'enableDepositing', values: [PromiseOrValue<string>, PromiseOrValue<boolean>]): string;
    encodeFunctionData(functionFragment: 'enableTrading', values: [PromiseOrValue<string>, PromiseOrValue<BigNumberish>, PromiseOrValue<BigNumberish>]): string;
    encodeFunctionData(functionFragment: 'isPoolStable', values: [PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: 'isPoolValid', values: [PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: 'migratePoolIn', values: [PromiseOrValue<string>, PoolStruct]): string;
    encodeFunctionData(functionFragment: 'migratePoolOut', values: [PromiseOrValue<string>, PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: 'newOwner', values?: undefined): string;
    encodeFunctionData(functionFragment: 'onFeesCollected', values: [PromiseOrValue<string>, PromiseOrValue<BigNumberish>]): string;
    encodeFunctionData(functionFragment: 'owner', values?: undefined): string;
    encodeFunctionData(functionFragment: 'poolCount', values?: undefined): string;
    encodeFunctionData(functionFragment: 'poolData', values: [PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: 'poolLiquidity', values: [PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: 'poolToken', values: [PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: 'poolTokenAmountToBurn', values: [PromiseOrValue<string>, PromiseOrValue<BigNumberish>, PromiseOrValue<BigNumberish>]): string;
    encodeFunctionData(functionFragment: 'poolTokenToUnderlying', values: [PromiseOrValue<string>, PromiseOrValue<BigNumberish>]): string;
    encodeFunctionData(functionFragment: 'poolType', values?: undefined): string;
    encodeFunctionData(functionFragment: 'pools', values?: undefined): string;
    encodeFunctionData(functionFragment: 'setDefaultTradingFeePPM', values: [PromiseOrValue<BigNumberish>]): string;
    encodeFunctionData(functionFragment: 'setTradingFeePPM', values: [PromiseOrValue<string>, PromiseOrValue<BigNumberish>]): string;
    encodeFunctionData(functionFragment: 'tradeBySourceAmount', values: [
        PromiseOrValue<BytesLike>,
        PromiseOrValue<string>,
        PromiseOrValue<string>,
        PromiseOrValue<BigNumberish>,
        PromiseOrValue<BigNumberish>
    ]): string;
    encodeFunctionData(functionFragment: 'tradeByTargetAmount', values: [
        PromiseOrValue<BytesLike>,
        PromiseOrValue<string>,
        PromiseOrValue<string>,
        PromiseOrValue<BigNumberish>,
        PromiseOrValue<BigNumberish>
    ]): string;
    encodeFunctionData(functionFragment: 'tradeInputAndFeeByTargetAmount', values: [PromiseOrValue<string>, PromiseOrValue<string>, PromiseOrValue<BigNumberish>]): string;
    encodeFunctionData(functionFragment: 'tradeOutputAndFeeBySourceAmount', values: [PromiseOrValue<string>, PromiseOrValue<string>, PromiseOrValue<BigNumberish>]): string;
    encodeFunctionData(functionFragment: 'tradingEnabled', values: [PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: 'tradingFeePPM', values: [PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: 'transferOwnership', values: [PromiseOrValue<string>]): string;
    encodeFunctionData(functionFragment: 'underlyingToPoolToken', values: [PromiseOrValue<string>, PromiseOrValue<BigNumberish>]): string;
    encodeFunctionData(functionFragment: 'version', values?: undefined): string;
    encodeFunctionData(functionFragment: 'withdraw', values: [
        PromiseOrValue<BytesLike>,
        PromiseOrValue<string>,
        PromiseOrValue<string>,
        PromiseOrValue<BigNumberish>,
        PromiseOrValue<BigNumberish>
    ]): string;
    encodeFunctionData(functionFragment: 'withdrawalAmounts', values: [PromiseOrValue<string>, PromiseOrValue<BigNumberish>]): string;
    decodeFunctionResult(functionFragment: 'acceptOwnership', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'createPool', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'defaultTradingFeePPM', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'depositFor', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'depositingEnabled', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'disableTrading', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'enableDepositing', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'enableTrading', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'isPoolStable', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'isPoolValid', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'migratePoolIn', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'migratePoolOut', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'newOwner', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'onFeesCollected', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'owner', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'poolCount', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'poolData', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'poolLiquidity', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'poolToken', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'poolTokenAmountToBurn', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'poolTokenToUnderlying', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'poolType', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'pools', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'setDefaultTradingFeePPM', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'setTradingFeePPM', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'tradeBySourceAmount', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'tradeByTargetAmount', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'tradeInputAndFeeByTargetAmount', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'tradeOutputAndFeeBySourceAmount', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'tradingEnabled', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'tradingFeePPM', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'transferOwnership', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'underlyingToPoolToken', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'version', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'withdraw', data: BytesLike): Result;
    decodeFunctionResult(functionFragment: 'withdrawalAmounts', data: BytesLike): Result;
    events: {
        'DefaultTradingFeePPMUpdated(uint32,uint32)': EventFragment;
        'DepositingEnabled(address,bool)': EventFragment;
        'OwnerUpdate(address,address)': EventFragment;
        'TokensDeposited(bytes32,address,address,uint256,uint256)': EventFragment;
        'TokensWithdrawn(bytes32,address,address,uint256,uint256,uint256,uint256,uint256)': EventFragment;
        'TotalLiquidityUpdated(bytes32,address,uint256,uint256,uint256)': EventFragment;
        'TradingEnabled(address,bool,uint8)': EventFragment;
        'TradingFeePPMUpdated(address,uint32,uint32)': EventFragment;
        'TradingLiquidityUpdated(bytes32,address,address,uint256,uint256)': EventFragment;
    };
    getEvent(nameOrSignatureOrTopic: 'DefaultTradingFeePPMUpdated'): EventFragment;
    getEvent(nameOrSignatureOrTopic: 'DepositingEnabled'): EventFragment;
    getEvent(nameOrSignatureOrTopic: 'OwnerUpdate'): EventFragment;
    getEvent(nameOrSignatureOrTopic: 'TokensDeposited'): EventFragment;
    getEvent(nameOrSignatureOrTopic: 'TokensWithdrawn'): EventFragment;
    getEvent(nameOrSignatureOrTopic: 'TotalLiquidityUpdated'): EventFragment;
    getEvent(nameOrSignatureOrTopic: 'TradingEnabled'): EventFragment;
    getEvent(nameOrSignatureOrTopic: 'TradingFeePPMUpdated'): EventFragment;
    getEvent(nameOrSignatureOrTopic: 'TradingLiquidityUpdated'): EventFragment;
}
export interface DefaultTradingFeePPMUpdatedEventObject {
    prevFeePPM: number;
    newFeePPM: number;
}
export declare type DefaultTradingFeePPMUpdatedEvent = TypedEvent<[number, number], DefaultTradingFeePPMUpdatedEventObject>;
export declare type DefaultTradingFeePPMUpdatedEventFilter = TypedEventFilter<DefaultTradingFeePPMUpdatedEvent>;
export interface DepositingEnabledEventObject {
    pool: string;
    newStatus: boolean;
}
export declare type DepositingEnabledEvent = TypedEvent<[string, boolean], DepositingEnabledEventObject>;
export declare type DepositingEnabledEventFilter = TypedEventFilter<DepositingEnabledEvent>;
export interface OwnerUpdateEventObject {
    prevOwner: string;
    newOwner: string;
}
export declare type OwnerUpdateEvent = TypedEvent<[string, string], OwnerUpdateEventObject>;
export declare type OwnerUpdateEventFilter = TypedEventFilter<OwnerUpdateEvent>;
export interface TokensDepositedEventObject {
    contextId: string;
    provider: string;
    token: string;
    tokenAmount: BigNumber;
    poolTokenAmount: BigNumber;
}
export declare type TokensDepositedEvent = TypedEvent<[
    string,
    string,
    string,
    BigNumber,
    BigNumber
], TokensDepositedEventObject>;
export declare type TokensDepositedEventFilter = TypedEventFilter<TokensDepositedEvent>;
export interface TokensWithdrawnEventObject {
    contextId: string;
    provider: string;
    token: string;
    tokenAmount: BigNumber;
    poolTokenAmount: BigNumber;
    externalProtectionBaseTokenAmount: BigNumber;
    bntAmount: BigNumber;
    withdrawalFeeAmount: BigNumber;
}
export declare type TokensWithdrawnEvent = TypedEvent<[
    string,
    string,
    string,
    BigNumber,
    BigNumber,
    BigNumber,
    BigNumber,
    BigNumber
], TokensWithdrawnEventObject>;
export declare type TokensWithdrawnEventFilter = TypedEventFilter<TokensWithdrawnEvent>;
export interface TotalLiquidityUpdatedEventObject {
    contextId: string;
    pool: string;
    liquidity: BigNumber;
    stakedBalance: BigNumber;
    poolTokenSupply: BigNumber;
}
export declare type TotalLiquidityUpdatedEvent = TypedEvent<[
    string,
    string,
    BigNumber,
    BigNumber,
    BigNumber
], TotalLiquidityUpdatedEventObject>;
export declare type TotalLiquidityUpdatedEventFilter = TypedEventFilter<TotalLiquidityUpdatedEvent>;
export interface TradingEnabledEventObject {
    pool: string;
    newStatus: boolean;
    reason: number;
}
export declare type TradingEnabledEvent = TypedEvent<[string, boolean, number], TradingEnabledEventObject>;
export declare type TradingEnabledEventFilter = TypedEventFilter<TradingEnabledEvent>;
export interface TradingFeePPMUpdatedEventObject {
    pool: string;
    prevFeePPM: number;
    newFeePPM: number;
}
export declare type TradingFeePPMUpdatedEvent = TypedEvent<[string, number, number], TradingFeePPMUpdatedEventObject>;
export declare type TradingFeePPMUpdatedEventFilter = TypedEventFilter<TradingFeePPMUpdatedEvent>;
export interface TradingLiquidityUpdatedEventObject {
    contextId: string;
    pool: string;
    token: string;
    prevLiquidity: BigNumber;
    newLiquidity: BigNumber;
}
export declare type TradingLiquidityUpdatedEvent = TypedEvent<[
    string,
    string,
    string,
    BigNumber,
    BigNumber
], TradingLiquidityUpdatedEventObject>;
export declare type TradingLiquidityUpdatedEventFilter = TypedEventFilter<TradingLiquidityUpdatedEvent>;
export interface PoolCollection extends BaseContract {
    connect(signerOrProvider: Signer | Provider | string): this;
    attach(addressOrName: string): this;
    deployed(): Promise<this>;
    interface: PoolCollectionInterface;
    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: {
        acceptOwnership(overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        createPool(token: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        defaultTradingFeePPM(overrides?: CallOverrides): Promise<[number]>;
        depositFor(contextId: PromiseOrValue<BytesLike>, provider: PromiseOrValue<string>, pool: PromiseOrValue<string>, tokenAmount: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        depositingEnabled(pool: PromiseOrValue<string>, overrides?: CallOverrides): Promise<[boolean]>;
        disableTrading(pool: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        enableDepositing(pool: PromiseOrValue<string>, status: PromiseOrValue<boolean>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        enableTrading(pool: PromiseOrValue<string>, bntVirtualBalance: PromiseOrValue<BigNumberish>, baseTokenVirtualBalance: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        isPoolStable(pool: PromiseOrValue<string>, overrides?: CallOverrides): Promise<[boolean]>;
        isPoolValid(pool: PromiseOrValue<string>, overrides?: CallOverrides): Promise<[boolean]>;
        migratePoolIn(pool: PromiseOrValue<string>, data: PoolStruct, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        migratePoolOut(pool: PromiseOrValue<string>, targetPoolCollection: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        newOwner(overrides?: CallOverrides): Promise<[string]>;
        onFeesCollected(pool: PromiseOrValue<string>, feeAmount: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        owner(overrides?: CallOverrides): Promise<[string]>;
        poolCount(overrides?: CallOverrides): Promise<[BigNumber]>;
        poolData(pool: PromiseOrValue<string>, overrides?: CallOverrides): Promise<[PoolStructOutput]>;
        poolLiquidity(pool: PromiseOrValue<string>, overrides?: CallOverrides): Promise<[PoolLiquidityStructOutput]>;
        poolToken(pool: PromiseOrValue<string>, overrides?: CallOverrides): Promise<[string]>;
        poolTokenAmountToBurn(pool: PromiseOrValue<string>, tokenAmountToDistribute: PromiseOrValue<BigNumberish>, protocolPoolTokenAmount: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<[BigNumber]>;
        poolTokenToUnderlying(pool: PromiseOrValue<string>, poolTokenAmount: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<[BigNumber]>;
        poolType(overrides?: CallOverrides): Promise<[number]>;
        pools(overrides?: CallOverrides): Promise<[string[]]>;
        setDefaultTradingFeePPM(newDefaultTradingFeePPM: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        setTradingFeePPM(pool: PromiseOrValue<string>, newTradingFeePPM: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        tradeBySourceAmount(contextId: PromiseOrValue<BytesLike>, sourceToken: PromiseOrValue<string>, targetToken: PromiseOrValue<string>, sourceAmount: PromiseOrValue<BigNumberish>, minReturnAmount: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        tradeByTargetAmount(contextId: PromiseOrValue<BytesLike>, sourceToken: PromiseOrValue<string>, targetToken: PromiseOrValue<string>, targetAmount: PromiseOrValue<BigNumberish>, maxSourceAmount: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        tradeInputAndFeeByTargetAmount(sourceToken: PromiseOrValue<string>, targetToken: PromiseOrValue<string>, targetAmount: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<[TradeAmountAndFeeStructOutput]>;
        tradeOutputAndFeeBySourceAmount(sourceToken: PromiseOrValue<string>, targetToken: PromiseOrValue<string>, sourceAmount: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<[TradeAmountAndFeeStructOutput]>;
        tradingEnabled(pool: PromiseOrValue<string>, overrides?: CallOverrides): Promise<[boolean]>;
        tradingFeePPM(pool: PromiseOrValue<string>, overrides?: CallOverrides): Promise<[number]>;
        transferOwnership(ownerCandidate: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        underlyingToPoolToken(pool: PromiseOrValue<string>, tokenAmount: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<[BigNumber]>;
        version(overrides?: CallOverrides): Promise<[number]>;
        withdraw(contextId: PromiseOrValue<BytesLike>, provider: PromiseOrValue<string>, pool: PromiseOrValue<string>, poolTokenAmount: PromiseOrValue<BigNumberish>, baseTokenAmount: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<ContractTransaction>;
        withdrawalAmounts(pool: PromiseOrValue<string>, poolTokenAmount: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<[WithdrawalAmountsStructOutput]>;
    };
    acceptOwnership(overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    createPool(token: PromiseOrValue<string>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    defaultTradingFeePPM(overrides?: CallOverrides): Promise<number>;
    depositFor(contextId: PromiseOrValue<BytesLike>, provider: PromiseOrValue<string>, pool: PromiseOrValue<string>, tokenAmount: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    depositingEnabled(pool: PromiseOrValue<string>, overrides?: CallOverrides): Promise<boolean>;
    disableTrading(pool: PromiseOrValue<string>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    enableDepositing(pool: PromiseOrValue<string>, status: PromiseOrValue<boolean>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    enableTrading(pool: PromiseOrValue<string>, bntVirtualBalance: PromiseOrValue<BigNumberish>, baseTokenVirtualBalance: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    isPoolStable(pool: PromiseOrValue<string>, overrides?: CallOverrides): Promise<boolean>;
    isPoolValid(pool: PromiseOrValue<string>, overrides?: CallOverrides): Promise<boolean>;
    migratePoolIn(pool: PromiseOrValue<string>, data: PoolStruct, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    migratePoolOut(pool: PromiseOrValue<string>, targetPoolCollection: PromiseOrValue<string>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    newOwner(overrides?: CallOverrides): Promise<string>;
    onFeesCollected(pool: PromiseOrValue<string>, feeAmount: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    owner(overrides?: CallOverrides): Promise<string>;
    poolCount(overrides?: CallOverrides): Promise<BigNumber>;
    poolData(pool: PromiseOrValue<string>, overrides?: CallOverrides): Promise<PoolStructOutput>;
    poolLiquidity(pool: PromiseOrValue<string>, overrides?: CallOverrides): Promise<PoolLiquidityStructOutput>;
    poolToken(pool: PromiseOrValue<string>, overrides?: CallOverrides): Promise<string>;
    poolTokenAmountToBurn(pool: PromiseOrValue<string>, tokenAmountToDistribute: PromiseOrValue<BigNumberish>, protocolPoolTokenAmount: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<BigNumber>;
    poolTokenToUnderlying(pool: PromiseOrValue<string>, poolTokenAmount: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<BigNumber>;
    poolType(overrides?: CallOverrides): Promise<number>;
    pools(overrides?: CallOverrides): Promise<string[]>;
    setDefaultTradingFeePPM(newDefaultTradingFeePPM: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    setTradingFeePPM(pool: PromiseOrValue<string>, newTradingFeePPM: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    tradeBySourceAmount(contextId: PromiseOrValue<BytesLike>, sourceToken: PromiseOrValue<string>, targetToken: PromiseOrValue<string>, sourceAmount: PromiseOrValue<BigNumberish>, minReturnAmount: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    tradeByTargetAmount(contextId: PromiseOrValue<BytesLike>, sourceToken: PromiseOrValue<string>, targetToken: PromiseOrValue<string>, targetAmount: PromiseOrValue<BigNumberish>, maxSourceAmount: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    tradeInputAndFeeByTargetAmount(sourceToken: PromiseOrValue<string>, targetToken: PromiseOrValue<string>, targetAmount: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<TradeAmountAndFeeStructOutput>;
    tradeOutputAndFeeBySourceAmount(sourceToken: PromiseOrValue<string>, targetToken: PromiseOrValue<string>, sourceAmount: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<TradeAmountAndFeeStructOutput>;
    tradingEnabled(pool: PromiseOrValue<string>, overrides?: CallOverrides): Promise<boolean>;
    tradingFeePPM(pool: PromiseOrValue<string>, overrides?: CallOverrides): Promise<number>;
    transferOwnership(ownerCandidate: PromiseOrValue<string>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    underlyingToPoolToken(pool: PromiseOrValue<string>, tokenAmount: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<BigNumber>;
    version(overrides?: CallOverrides): Promise<number>;
    withdraw(contextId: PromiseOrValue<BytesLike>, provider: PromiseOrValue<string>, pool: PromiseOrValue<string>, poolTokenAmount: PromiseOrValue<BigNumberish>, baseTokenAmount: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
        from?: PromiseOrValue<string>;
    }): Promise<ContractTransaction>;
    withdrawalAmounts(pool: PromiseOrValue<string>, poolTokenAmount: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<WithdrawalAmountsStructOutput>;
    callStatic: {
        acceptOwnership(overrides?: CallOverrides): Promise<void>;
        createPool(token: PromiseOrValue<string>, overrides?: CallOverrides): Promise<void>;
        defaultTradingFeePPM(overrides?: CallOverrides): Promise<number>;
        depositFor(contextId: PromiseOrValue<BytesLike>, provider: PromiseOrValue<string>, pool: PromiseOrValue<string>, tokenAmount: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<BigNumber>;
        depositingEnabled(pool: PromiseOrValue<string>, overrides?: CallOverrides): Promise<boolean>;
        disableTrading(pool: PromiseOrValue<string>, overrides?: CallOverrides): Promise<void>;
        enableDepositing(pool: PromiseOrValue<string>, status: PromiseOrValue<boolean>, overrides?: CallOverrides): Promise<void>;
        enableTrading(pool: PromiseOrValue<string>, bntVirtualBalance: PromiseOrValue<BigNumberish>, baseTokenVirtualBalance: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<void>;
        isPoolStable(pool: PromiseOrValue<string>, overrides?: CallOverrides): Promise<boolean>;
        isPoolValid(pool: PromiseOrValue<string>, overrides?: CallOverrides): Promise<boolean>;
        migratePoolIn(pool: PromiseOrValue<string>, data: PoolStruct, overrides?: CallOverrides): Promise<void>;
        migratePoolOut(pool: PromiseOrValue<string>, targetPoolCollection: PromiseOrValue<string>, overrides?: CallOverrides): Promise<void>;
        newOwner(overrides?: CallOverrides): Promise<string>;
        onFeesCollected(pool: PromiseOrValue<string>, feeAmount: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<void>;
        owner(overrides?: CallOverrides): Promise<string>;
        poolCount(overrides?: CallOverrides): Promise<BigNumber>;
        poolData(pool: PromiseOrValue<string>, overrides?: CallOverrides): Promise<PoolStructOutput>;
        poolLiquidity(pool: PromiseOrValue<string>, overrides?: CallOverrides): Promise<PoolLiquidityStructOutput>;
        poolToken(pool: PromiseOrValue<string>, overrides?: CallOverrides): Promise<string>;
        poolTokenAmountToBurn(pool: PromiseOrValue<string>, tokenAmountToDistribute: PromiseOrValue<BigNumberish>, protocolPoolTokenAmount: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<BigNumber>;
        poolTokenToUnderlying(pool: PromiseOrValue<string>, poolTokenAmount: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<BigNumber>;
        poolType(overrides?: CallOverrides): Promise<number>;
        pools(overrides?: CallOverrides): Promise<string[]>;
        setDefaultTradingFeePPM(newDefaultTradingFeePPM: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<void>;
        setTradingFeePPM(pool: PromiseOrValue<string>, newTradingFeePPM: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<void>;
        tradeBySourceAmount(contextId: PromiseOrValue<BytesLike>, sourceToken: PromiseOrValue<string>, targetToken: PromiseOrValue<string>, sourceAmount: PromiseOrValue<BigNumberish>, minReturnAmount: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<TradeAmountAndFeeStructOutput>;
        tradeByTargetAmount(contextId: PromiseOrValue<BytesLike>, sourceToken: PromiseOrValue<string>, targetToken: PromiseOrValue<string>, targetAmount: PromiseOrValue<BigNumberish>, maxSourceAmount: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<TradeAmountAndFeeStructOutput>;
        tradeInputAndFeeByTargetAmount(sourceToken: PromiseOrValue<string>, targetToken: PromiseOrValue<string>, targetAmount: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<TradeAmountAndFeeStructOutput>;
        tradeOutputAndFeeBySourceAmount(sourceToken: PromiseOrValue<string>, targetToken: PromiseOrValue<string>, sourceAmount: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<TradeAmountAndFeeStructOutput>;
        tradingEnabled(pool: PromiseOrValue<string>, overrides?: CallOverrides): Promise<boolean>;
        tradingFeePPM(pool: PromiseOrValue<string>, overrides?: CallOverrides): Promise<number>;
        transferOwnership(ownerCandidate: PromiseOrValue<string>, overrides?: CallOverrides): Promise<void>;
        underlyingToPoolToken(pool: PromiseOrValue<string>, tokenAmount: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<BigNumber>;
        version(overrides?: CallOverrides): Promise<number>;
        withdraw(contextId: PromiseOrValue<BytesLike>, provider: PromiseOrValue<string>, pool: PromiseOrValue<string>, poolTokenAmount: PromiseOrValue<BigNumberish>, baseTokenAmount: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<BigNumber>;
        withdrawalAmounts(pool: PromiseOrValue<string>, poolTokenAmount: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<WithdrawalAmountsStructOutput>;
    };
    filters: {
        'DefaultTradingFeePPMUpdated(uint32,uint32)'(prevFeePPM?: null, newFeePPM?: null): DefaultTradingFeePPMUpdatedEventFilter;
        DefaultTradingFeePPMUpdated(prevFeePPM?: null, newFeePPM?: null): DefaultTradingFeePPMUpdatedEventFilter;
        'DepositingEnabled(address,bool)'(pool?: PromiseOrValue<string> | null, newStatus?: PromiseOrValue<boolean> | null): DepositingEnabledEventFilter;
        DepositingEnabled(pool?: PromiseOrValue<string> | null, newStatus?: PromiseOrValue<boolean> | null): DepositingEnabledEventFilter;
        'OwnerUpdate(address,address)'(prevOwner?: PromiseOrValue<string> | null, newOwner?: PromiseOrValue<string> | null): OwnerUpdateEventFilter;
        OwnerUpdate(prevOwner?: PromiseOrValue<string> | null, newOwner?: PromiseOrValue<string> | null): OwnerUpdateEventFilter;
        'TokensDeposited(bytes32,address,address,uint256,uint256)'(contextId?: PromiseOrValue<BytesLike> | null, provider?: PromiseOrValue<string> | null, token?: PromiseOrValue<string> | null, tokenAmount?: null, poolTokenAmount?: null): TokensDepositedEventFilter;
        TokensDeposited(contextId?: PromiseOrValue<BytesLike> | null, provider?: PromiseOrValue<string> | null, token?: PromiseOrValue<string> | null, tokenAmount?: null, poolTokenAmount?: null): TokensDepositedEventFilter;
        'TokensWithdrawn(bytes32,address,address,uint256,uint256,uint256,uint256,uint256)'(contextId?: PromiseOrValue<BytesLike> | null, provider?: PromiseOrValue<string> | null, token?: PromiseOrValue<string> | null, tokenAmount?: null, poolTokenAmount?: null, externalProtectionBaseTokenAmount?: null, bntAmount?: null, withdrawalFeeAmount?: null): TokensWithdrawnEventFilter;
        TokensWithdrawn(contextId?: PromiseOrValue<BytesLike> | null, provider?: PromiseOrValue<string> | null, token?: PromiseOrValue<string> | null, tokenAmount?: null, poolTokenAmount?: null, externalProtectionBaseTokenAmount?: null, bntAmount?: null, withdrawalFeeAmount?: null): TokensWithdrawnEventFilter;
        'TotalLiquidityUpdated(bytes32,address,uint256,uint256,uint256)'(contextId?: PromiseOrValue<BytesLike> | null, pool?: PromiseOrValue<string> | null, liquidity?: null, stakedBalance?: null, poolTokenSupply?: null): TotalLiquidityUpdatedEventFilter;
        TotalLiquidityUpdated(contextId?: PromiseOrValue<BytesLike> | null, pool?: PromiseOrValue<string> | null, liquidity?: null, stakedBalance?: null, poolTokenSupply?: null): TotalLiquidityUpdatedEventFilter;
        'TradingEnabled(address,bool,uint8)'(pool?: PromiseOrValue<string> | null, newStatus?: PromiseOrValue<boolean> | null, reason?: PromiseOrValue<BigNumberish> | null): TradingEnabledEventFilter;
        TradingEnabled(pool?: PromiseOrValue<string> | null, newStatus?: PromiseOrValue<boolean> | null, reason?: PromiseOrValue<BigNumberish> | null): TradingEnabledEventFilter;
        'TradingFeePPMUpdated(address,uint32,uint32)'(pool?: PromiseOrValue<string> | null, prevFeePPM?: null, newFeePPM?: null): TradingFeePPMUpdatedEventFilter;
        TradingFeePPMUpdated(pool?: PromiseOrValue<string> | null, prevFeePPM?: null, newFeePPM?: null): TradingFeePPMUpdatedEventFilter;
        'TradingLiquidityUpdated(bytes32,address,address,uint256,uint256)'(contextId?: PromiseOrValue<BytesLike> | null, pool?: PromiseOrValue<string> | null, token?: PromiseOrValue<string> | null, prevLiquidity?: null, newLiquidity?: null): TradingLiquidityUpdatedEventFilter;
        TradingLiquidityUpdated(contextId?: PromiseOrValue<BytesLike> | null, pool?: PromiseOrValue<string> | null, token?: PromiseOrValue<string> | null, prevLiquidity?: null, newLiquidity?: null): TradingLiquidityUpdatedEventFilter;
    };
    estimateGas: {
        acceptOwnership(overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        createPool(token: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        defaultTradingFeePPM(overrides?: CallOverrides): Promise<BigNumber>;
        depositFor(contextId: PromiseOrValue<BytesLike>, provider: PromiseOrValue<string>, pool: PromiseOrValue<string>, tokenAmount: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        depositingEnabled(pool: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
        disableTrading(pool: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        enableDepositing(pool: PromiseOrValue<string>, status: PromiseOrValue<boolean>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        enableTrading(pool: PromiseOrValue<string>, bntVirtualBalance: PromiseOrValue<BigNumberish>, baseTokenVirtualBalance: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        isPoolStable(pool: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
        isPoolValid(pool: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
        migratePoolIn(pool: PromiseOrValue<string>, data: PoolStruct, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        migratePoolOut(pool: PromiseOrValue<string>, targetPoolCollection: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        newOwner(overrides?: CallOverrides): Promise<BigNumber>;
        onFeesCollected(pool: PromiseOrValue<string>, feeAmount: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        owner(overrides?: CallOverrides): Promise<BigNumber>;
        poolCount(overrides?: CallOverrides): Promise<BigNumber>;
        poolData(pool: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
        poolLiquidity(pool: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
        poolToken(pool: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
        poolTokenAmountToBurn(pool: PromiseOrValue<string>, tokenAmountToDistribute: PromiseOrValue<BigNumberish>, protocolPoolTokenAmount: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<BigNumber>;
        poolTokenToUnderlying(pool: PromiseOrValue<string>, poolTokenAmount: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<BigNumber>;
        poolType(overrides?: CallOverrides): Promise<BigNumber>;
        pools(overrides?: CallOverrides): Promise<BigNumber>;
        setDefaultTradingFeePPM(newDefaultTradingFeePPM: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        setTradingFeePPM(pool: PromiseOrValue<string>, newTradingFeePPM: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        tradeBySourceAmount(contextId: PromiseOrValue<BytesLike>, sourceToken: PromiseOrValue<string>, targetToken: PromiseOrValue<string>, sourceAmount: PromiseOrValue<BigNumberish>, minReturnAmount: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        tradeByTargetAmount(contextId: PromiseOrValue<BytesLike>, sourceToken: PromiseOrValue<string>, targetToken: PromiseOrValue<string>, targetAmount: PromiseOrValue<BigNumberish>, maxSourceAmount: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        tradeInputAndFeeByTargetAmount(sourceToken: PromiseOrValue<string>, targetToken: PromiseOrValue<string>, targetAmount: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<BigNumber>;
        tradeOutputAndFeeBySourceAmount(sourceToken: PromiseOrValue<string>, targetToken: PromiseOrValue<string>, sourceAmount: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<BigNumber>;
        tradingEnabled(pool: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
        tradingFeePPM(pool: PromiseOrValue<string>, overrides?: CallOverrides): Promise<BigNumber>;
        transferOwnership(ownerCandidate: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        underlyingToPoolToken(pool: PromiseOrValue<string>, tokenAmount: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<BigNumber>;
        version(overrides?: CallOverrides): Promise<BigNumber>;
        withdraw(contextId: PromiseOrValue<BytesLike>, provider: PromiseOrValue<string>, pool: PromiseOrValue<string>, poolTokenAmount: PromiseOrValue<BigNumberish>, baseTokenAmount: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<BigNumber>;
        withdrawalAmounts(pool: PromiseOrValue<string>, poolTokenAmount: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<BigNumber>;
    };
    populateTransaction: {
        acceptOwnership(overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        createPool(token: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        defaultTradingFeePPM(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        depositFor(contextId: PromiseOrValue<BytesLike>, provider: PromiseOrValue<string>, pool: PromiseOrValue<string>, tokenAmount: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        depositingEnabled(pool: PromiseOrValue<string>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        disableTrading(pool: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        enableDepositing(pool: PromiseOrValue<string>, status: PromiseOrValue<boolean>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        enableTrading(pool: PromiseOrValue<string>, bntVirtualBalance: PromiseOrValue<BigNumberish>, baseTokenVirtualBalance: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        isPoolStable(pool: PromiseOrValue<string>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        isPoolValid(pool: PromiseOrValue<string>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        migratePoolIn(pool: PromiseOrValue<string>, data: PoolStruct, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        migratePoolOut(pool: PromiseOrValue<string>, targetPoolCollection: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        newOwner(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        onFeesCollected(pool: PromiseOrValue<string>, feeAmount: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        owner(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        poolCount(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        poolData(pool: PromiseOrValue<string>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        poolLiquidity(pool: PromiseOrValue<string>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        poolToken(pool: PromiseOrValue<string>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        poolTokenAmountToBurn(pool: PromiseOrValue<string>, tokenAmountToDistribute: PromiseOrValue<BigNumberish>, protocolPoolTokenAmount: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        poolTokenToUnderlying(pool: PromiseOrValue<string>, poolTokenAmount: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        poolType(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        pools(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        setDefaultTradingFeePPM(newDefaultTradingFeePPM: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        setTradingFeePPM(pool: PromiseOrValue<string>, newTradingFeePPM: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        tradeBySourceAmount(contextId: PromiseOrValue<BytesLike>, sourceToken: PromiseOrValue<string>, targetToken: PromiseOrValue<string>, sourceAmount: PromiseOrValue<BigNumberish>, minReturnAmount: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        tradeByTargetAmount(contextId: PromiseOrValue<BytesLike>, sourceToken: PromiseOrValue<string>, targetToken: PromiseOrValue<string>, targetAmount: PromiseOrValue<BigNumberish>, maxSourceAmount: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        tradeInputAndFeeByTargetAmount(sourceToken: PromiseOrValue<string>, targetToken: PromiseOrValue<string>, targetAmount: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        tradeOutputAndFeeBySourceAmount(sourceToken: PromiseOrValue<string>, targetToken: PromiseOrValue<string>, sourceAmount: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        tradingEnabled(pool: PromiseOrValue<string>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        tradingFeePPM(pool: PromiseOrValue<string>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        transferOwnership(ownerCandidate: PromiseOrValue<string>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        underlyingToPoolToken(pool: PromiseOrValue<string>, tokenAmount: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
        version(overrides?: CallOverrides): Promise<PopulatedTransaction>;
        withdraw(contextId: PromiseOrValue<BytesLike>, provider: PromiseOrValue<string>, pool: PromiseOrValue<string>, poolTokenAmount: PromiseOrValue<BigNumberish>, baseTokenAmount: PromiseOrValue<BigNumberish>, overrides?: Overrides & {
            from?: PromiseOrValue<string>;
        }): Promise<PopulatedTransaction>;
        withdrawalAmounts(pool: PromiseOrValue<string>, poolTokenAmount: PromiseOrValue<BigNumberish>, overrides?: CallOverrides): Promise<PopulatedTransaction>;
    };
}
