import { BN } from "@coral-xyz/anchor";
import type { AdaptiveFeeInfo } from "../public";
import type { AdaptiveFeeConstantsData, AdaptiveFeeVariablesData } from "../../types/public";
export declare abstract class FeeRateManager {
    static new(aToB: boolean, currentTickIndex: number, timestamp: BN, staticFeeRate: number, adaptiveFeeInfo: AdaptiveFeeInfo | null): FeeRateManager;
    abstract updateVolatilityAccumulator(): void;
    abstract getTotalFeeRate(): number;
    abstract getBoundedSqrtPriceTarget(sqrtPrice: BN, currLiquidity: BN): {
        boundedSqrtPriceTarget: BN;
        adaptiveFeeUpdateSkipped: boolean;
    };
    abstract advanceTickGroup(): void;
    abstract advanceTickGroupAfterSkip(sqrtPrice: BN, nextTickSqrtPrice: BN, nextTickIndex: number): void;
    abstract updateMajorSwapTimestamp(preSqrtPrice: BN, postSqrtPrice: BN): void;
    abstract getNextAdaptiveFeeInfo(): AdaptiveFeeInfo | null;
}
export declare class AdaptiveFeeVariables {
    private lastReferenceUpdateTimestamp;
    private lastMajorSwapTimestamp;
    private tickGroupIndexReference;
    private volatilityReference;
    private volatilityAccumulator;
    constructor(lastReferenceUpdateTimestamp: BN, lastMajorSwapTimestamp: BN, tickGroupIndexReference: number, volatilityReference: number, volatilityAccumulator: number);
    getCoreTickGroupRange(adaptiveFeeConstants: AdaptiveFeeConstantsData): {
        coreTickGroupRangeLowerBound: {
            tickGroupIndex: number;
            sqrtPrice: BN;
        } | null;
        coreTickGroupRangeUpperBound: {
            tickGroupIndex: number;
            sqrtPrice: BN;
        } | null;
    };
    updateReference(tickGroupIndex: number, timestamp: BN, adaptiveFeeConstants: AdaptiveFeeConstantsData): void;
    updateVolatilityAccumulator(tickGroupIndex: number, adaptiveFeeConstants: AdaptiveFeeConstantsData): void;
    updateMajorSwapTimestamp(preSqrtPrice: BN, postSqrtPrice: BN, timestamp: BN, adaptiveFeeConstants: AdaptiveFeeConstantsData): void;
    computeAdaptiveFeeRate(adaptiveFeeConstants: AdaptiveFeeConstantsData): number;
    toData(): AdaptiveFeeVariablesData;
    static isMajorSwap(preSqrtPrice: BN, postSqrtPrice: BN, majorSwapThresholdTicks: number): boolean;
}
