import { IUniswapV3Pool } from '../../typechain';
import { IChain } from '../constants';
import { UniV3Range } from './uniV3Range';
import { Contract, Signer } from 'ethers';
import { RebalanceStruct } from '../../typechain/src/market-maker/src/interfaces/arrakis/IArrakisV2';
import { UniV3MMOptions } from './types';
export declare const defaultConfig: UniV3MMOptions;
export declare abstract class UniV3MM {
    vault: Contract;
    wallet: Signer;
    feeTier: number;
    chain: IChain;
    useMovingAvg: boolean;
    lastTimestamp: number;
    ranges: UniV3Range[];
    price: number;
    inventory: number[];
    allocated: number[];
    mainRangeOffset: number;
    secondaryRangeOffset: number;
    rebalanceWeight: number;
    mainRangeShare: number;
    secRangeShare: number;
    prevReb: number;
    movingAvg: number;
    token0: string;
    token1: string;
    dec0: number;
    dec1: number;
    ma_interval: number;
    reverse: boolean;
    rebalanceLow: number;
    rebalanceHigh: number;
    isRebalancing: boolean;
    constructor(vault: Contract, wallet: Signer, feeTier: number, // uniswap fee tier
    chain: IChain, options?: UniV3MMOptions, useMovingAvg?: boolean);
    init(baseToken: string, price?: number): Promise<void>;
    getClosePositionParams(): Promise<any>;
    rebalanceRanges(): Promise<any>;
    getRangeAmounts(mainLp: number, extraBase: number, extraQuote: number): {
        secBaseValue: number;
        secQuoteValue: number;
    };
    getCurrentRange(direction: 1 | -1, price: number): UniV3Range | undefined;
    update(): Promise<void>;
    updateMovingAvg(reInit?: boolean): Promise<number>;
    getRebalancePoints(prevReb?: number): Promise<{
        rebalanceLow: number;
        rebalanceHigh: number;
    }>;
    logRanges(): void;
    getRanges: (price: number) => {
        mainLow: number;
        mainHigh: number;
        secRangeLow: number;
        secRangeHigh: number;
        rebalanceLow: number;
        rebalanceHigh: number;
    };
    getPrice: (twapInterval: number) => Promise<any>;
    getBidAsk: (price?: number) => {
        bid: number;
        ask: number;
    };
    syncToDB(): Promise<void>;
    syncFromDB(): Promise<void>;
    abstract initPosition(): Promise<void>;
    abstract updateRanges(): Promise<void>;
    abstract executeRebalance(rebalanceParams: RebalanceStruct): Promise<boolean>;
    abstract getUniV3Pool(): Promise<IUniswapV3Pool>;
    abstract getRebalanceParams(burnRanges: UniV3Range[]): any;
    abstract getBalances(): Promise<{
        totals: [number, number];
        allocated: [number, number];
    }>;
}
