import { BigNumber } from '@ethersproject/bignumber';
import { PoolBase, PoolPairBase, PoolTypes, SubgraphPoolBase, SubgraphToken, SwapTypes } from '../../../../types/balancer';
import { BigNumber as OldBigNumber } from '../../../../utils/balancer/bignumber';
declare type StablePoolToken = Pick<SubgraphToken, 'address' | 'balance' | 'decimals'>;
export declare type StablePoolPairData = PoolPairBase & {
    allBalances: OldBigNumber[];
    allBalancesScaled: BigNumber[];
    amp: BigNumber;
    tokenIndexIn: number;
    tokenIndexOut: number;
};
export declare class StablePool implements PoolBase<StablePoolPairData> {
    poolType: PoolTypes;
    id: string;
    address: string;
    amp: BigNumber;
    swapFee: BigNumber;
    totalShares: BigNumber;
    tokens: StablePoolToken[];
    tokensList: string[];
    MAX_IN_RATIO: BigNumber;
    MAX_OUT_RATIO: BigNumber;
    static AMP_DECIMALS: number;
    static fromPool(pool: SubgraphPoolBase): StablePool;
    constructor(id: string, address: string, amp: string, swapFee: string, totalShares: string, tokens: StablePoolToken[], tokensList: string[]);
    getNormalizedLiquidity(poolPairData: StablePoolPairData): OldBigNumber;
    getLimitAmountSwap(poolPairData: PoolPairBase, swapType: SwapTypes): OldBigNumber;
    updateTokenBalanceForPool(token: string, newBalance: BigNumber): void;
    updateTotalShares(newTotalShares: BigNumber): void;
    _exactTokenInForTokenOut(poolPairData: StablePoolPairData, amount: OldBigNumber): OldBigNumber;
    _tokenInForExactTokenOut(poolPairData: StablePoolPairData, amount: OldBigNumber): OldBigNumber;
    /**
     * _calcTokensOutGivenExactBptIn
     * @param bptAmountIn EVM scale.
     * @returns EVM scale.
     */
    _calcTokensOutGivenExactBptIn(bptAmountIn: BigNumber): BigNumber[];
    /**
     * _calcBptOutGivenExactTokensIn
     * @param amountsIn EVM Scale
     * @returns EVM Scale
     */
    _calcBptOutGivenExactTokensIn(amountsIn: BigNumber[]): BigNumber;
    _spotPriceAfterSwapExactTokenInForTokenOut(poolPairData: StablePoolPairData, amount: OldBigNumber): OldBigNumber;
    _spotPriceAfterSwapTokenInForExactTokenOut(poolPairData: StablePoolPairData, amount: OldBigNumber): OldBigNumber;
    _derivativeSpotPriceAfterSwapExactTokenInForTokenOut(poolPairData: StablePoolPairData, amount: OldBigNumber): OldBigNumber;
    _derivativeSpotPriceAfterSwapTokenInForExactTokenOut(poolPairData: StablePoolPairData, amount: OldBigNumber): OldBigNumber;
    subtractSwapFeeAmount(amount: BigNumber, swapFee: BigNumber): BigNumber;
    addSwapFeeAmount(amount: BigNumber, swapFee: BigNumber): BigNumber;
}
export {};
