import { BigNumber } from '@ethersproject/bignumber';
import { PoolBase, PoolTypes, SubgraphPoolBase, SubgraphToken, SwapTypes } from '../../../../types/balancer';
import { BigNumber as OldBigNumber } from '../../../../utils/balancer/bignumber';
import { StablePoolPairData } from '../stablePool';
export declare enum PairTypes {
    BptToToken = 0,
    TokenToBpt = 1,
    TokenToToken = 2
}
export declare type PhantomStablePoolToken = Pick<SubgraphToken, 'address' | 'balance' | 'decimals' | 'priceRate'>;
export declare type MetaStablePoolPairData = StablePoolPairData & {
    tokenInPriceRate: BigNumber;
    tokenOutPriceRate: BigNumber;
};
export declare type PhantomStablePoolPairData = MetaStablePoolPairData & {
    pairType: PairTypes;
    bptIndex: number;
    virtualBptSupply: BigNumber;
};
export declare class PhantomStablePool implements PoolBase<PhantomStablePoolPairData> {
    poolType: PoolTypes;
    id: string;
    address: string;
    amp: BigNumber;
    swapFee: BigNumber;
    totalShares: BigNumber;
    tokens: PhantomStablePoolToken[];
    tokensList: string[];
    ALMOST_ONE: BigNumber;
    static AMP_DECIMALS: number;
    static fromPool(pool: SubgraphPoolBase): PhantomStablePool;
    static removeBPT(poolPairData: PhantomStablePoolPairData): PhantomStablePoolPairData;
    constructor(id: string, address: string, amp: string, swapFee: string, totalShares: string, tokens: PhantomStablePoolToken[], tokensList: string[]);
    parsePoolPairData(tokenIn: string, tokenOut: string): PhantomStablePoolPairData;
    getNormalizedLiquidity(poolPairData: PhantomStablePoolPairData): OldBigNumber;
    getLimitAmountSwap(poolPairData: PhantomStablePoolPairData, swapType: SwapTypes): OldBigNumber;
    updateTokenBalanceForPool(token: string, newBalance: BigNumber): void;
    updateTotalShares(newTotalShares: BigNumber): void;
    _exactTokenInForTokenOut(poolPairData: PhantomStablePoolPairData, amount: OldBigNumber): OldBigNumber;
    _tokenInForExactTokenOut(poolPairData: PhantomStablePoolPairData, 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: PhantomStablePoolPairData, amount: OldBigNumber): OldBigNumber;
    _spotPriceExactTokenInForTokenOut(poolPairData: PhantomStablePoolPairData): OldBigNumber;
    _spotPriceAfterSwapTokenInForExactTokenOut(poolPairData: PhantomStablePoolPairData, amount: OldBigNumber): OldBigNumber;
    _derivativeSpotPriceAfterSwapExactTokenInForTokenOut(poolPairData: PhantomStablePoolPairData, amount: OldBigNumber): OldBigNumber;
    _derivativeSpotPriceAfterSwapTokenInForExactTokenOut(poolPairData: PhantomStablePoolPairData, amount: OldBigNumber): OldBigNumber;
    subtractSwapFeeAmount(amount: BigNumber, swapFee: BigNumber): BigNumber;
    addSwapFeeAmount(amount: BigNumber, swapFee: BigNumber): BigNumber;
}
