import { BigNumberish, BN } from "../utils";
export interface RateModel {
    UBar: BigNumberish;
    R0: BigNumberish;
    R1: BigNumberish;
    R2: BigNumberish;
}
export declare function truncate18DecimalBN(input: BN, digits: number): import("ethers").BigNumber;
export declare class LPFeeCalculator {
    private readonly rateModel;
    constructor(rateModel: RateModel);
    /**
     * Compute area under curve of the piece-wise linear rate model.
     * @param rateModel Rate model to be used in this calculation.
     * @param utilization The current utilization of the pool.
     * @returns The area under the curve of the piece-wise linear rate model.
     */
    calculateAreaUnderRateCurve(utilization: BN): import("ethers").BigNumber;
    /**
     * Calculate the instantaneous rate for a 0 sized deposit (infinitesimally small).
     * @param utilization The current utilization of the pool.
     * @returns The instantaneous rate for a 0 sized deposit.
     */
    calculateInstantaneousRate(utilization: BigNumberish): import("ethers").BigNumber;
    /**
     * Calculate the realized LP Fee Percent for a given rate model, utilization before and after the deposit.
     * @param rateModel Rate model to be used in this calculation.
     * @param utilizationBeforeDeposit The utilization of the pool before the deposit.
     * @param utilizationAfterDeposit The utilization of the pool after the deposit.
     * @param truncateDecimals Whether to truncate the decimals to 6.
     * @returns The realized LP fee percent.
     */
    calculateRealizedLpFeePct(utilizationBeforeDeposit: BigNumberish, utilizationAfterDeposit: BigNumberish, truncateDecimals?: boolean): import("ethers").BigNumber;
    /**
     * Calculate the realized yearly LP Fee APY Percent for a given rate model, utilization before and after the deposit.
     * @param rateModel Rate model to be used in this calculation.
     * @param utilizationBeforeDeposit The utilization of the pool before the deposit.
     * @param utilizationAfterDeposit The utilization of the pool after the deposit.
     * @returns The realized LP fee APY percent.
     */
    calculateApyFromUtilization(utilizationBeforeDeposit: BN, utilizationAfterDeposit: BN): import("ethers").BigNumber;
}
/**
 * Calculate the instantaneous rate for a 0 sized deposit (infinitesimally small).
 * @param rateModel Rate model to be used in this calculation.
 * @param utilization The current utilization of the pool.
 * @returns The instantaneous rate for a 0 sized deposit.
 */
export declare function calculateInstantaneousRate(rateModel: RateModel, utilization: BigNumberish): import("ethers").BigNumber;
/**
 * Calculate the realized yearly LP Fee APY Percent for a given rate model, utilization before and after the deposit.
 * @param rateModel Rate model to be used in this calculation.
 * @param utilizationBeforeDeposit The utilization of the pool before the deposit.
 * @param utilizationAfterDeposit The utilization of the pool after the deposit.
 * @returns The realized LP fee APY percent.
 */
export declare function calculateApyFromUtilization(rateModel: RateModel, utilizationBeforeDeposit: BN, utilizationAfterDeposit: BN): import("ethers").BigNumber;
/**
 * Calculate the realized LP Fee Percent for a given rate model, utilization before and after the deposit.
 * @param rateModel Rate model to be used in this calculation.
 * @param utilizationBeforeDeposit The utilization of the pool before the deposit.
 * @param utilizationAfterDeposit The utilization of the pool after the deposit.
 * @param truncateDecimals Whether to truncate the decimals to 6.
 * @returns The realized LP fee percent.
 */
export declare function calculateRealizedLpFeePct(rateModel: RateModel, utilizationBeforeDeposit: BigNumberish, utilizationAfterDeposit: BigNumberish, truncateDecimals?: boolean): import("ethers").BigNumber;
