import { BigNumber } from "ethers";
import { ThresholdBoundType, FlowTupleParameters } from "./UBAFeeTypes";
declare type ChainId = number;
declare type RouteCombination = string;
declare type ChainTokenCombination = string;
declare type DefaultOverrideStructure<PrimaryValue, OverrideKeyType extends string | number | symbol> = {
    default: PrimaryValue;
    override?: Record<OverrideKeyType, PrimaryValue>;
};
/**
 * Defines the configuration needed to calculate the UBA fees
 */
declare class UBAConfig {
    /**
     * A baseline fee that is applied to all transactions to allow LPs to earn a fee
     */
    protected readonly baselineFee: DefaultOverrideStructure<BigNumber, RouteCombination>;
    /**
     * A record of piecewise functions for each chain and token that define the balancing fee to ensure
     * either a positive or negative penalty to bridging a token to a chain that is either under or
     * over utilized
     */
    protected readonly balancingFee: DefaultOverrideStructure<FlowTupleParameters, ChainId>;
    /**
     * A record of boundry values for each chain and token that define the threshold for when the
     * running balance should be balanced back to a fixed amount. Due to the fact that this type of
     * operation is based on a heuristic and is considered a non-event transient property of the
     * protocol, the threshold must be computed based on the current running balance of the spoke from
     * the last validated running balance.
     */
    protected readonly balanceTriggerThreshold: DefaultOverrideStructure<ThresholdBoundType, ChainTokenCombination>;
    /**
     * A record of piecewise functions for each chain that define the utilization fee to ensure that
     * the bridge responds to periods of high utilization. We can integrate over this function to
     * find the realized lp percent fee.
     */
    protected readonly lpGammaFunction: DefaultOverrideStructure<FlowTupleParameters, ChainId>;
    /**
     * A DAO controlled variable to track any donations made to the incentivePool liquidity
     */
    protected readonly incentivePoolAdjustment: Record<string, BigNumber>;
    /**
     * Used to scale rewards when a fee is larger than the incentive balance
     */
    protected readonly ubaRewardMultiplier: Record<string, BigNumber>;
    /**
     * Instantiate a new UBA Config object
     * @param baselineFee A baseline fee that is applied to all transactions to allow LPs to earn a fee
     * @param balancingFee A record of piecewise functions for each chain and token that define the balancing fee to ensure either a positive or negative penalty to bridging a token to a chain that is either under or over utilized
     * @param balanceTriggerThreshold A record of boundry values for each chain and token that define the threshold for when the running balance should be balanced back to a fixed amount. Due to the fact that this type of operation is based on a heuristic and is considered a non-event transient property of the protocol, the threshold must be computed based on the current running balance of the spoke from the last validated running balance.
     * @param lpGammaFunction A record of piecewise functions for each chain that define the utilization fee to ensure that the bridge responds to periods of high utilization
     * @param incentivePoolAdjustment A DAO controlled variable to track any donations made to the incentivePool liquidity
     * @param ubaRewardMultiplier Used to scale rewards when a fee is larger than the incentive balance
     * @throws Error if any of the fee curves are invalid and assertValidityOfFeeCurves is true
     */
    constructor(baselineFee: DefaultOverrideStructure<BigNumber, RouteCombination>, balancingFee: DefaultOverrideStructure<FlowTupleParameters, ChainId>, balanceTriggerThreshold: DefaultOverrideStructure<ThresholdBoundType, ChainTokenCombination>, lpGammaFunction: DefaultOverrideStructure<FlowTupleParameters, ChainId>, incentivePoolAdjustment?: Record<string, BigNumber>, ubaRewardMultiplier?: Record<string, BigNumber>);
    /**
     * Assert the validity of all fee curves. This is a helper function
     * that is called in the constructor to ensure that all fee curves
     * are valid.
     */
    private assertValidityOfAllFeeCurves;
    /**
     * @description Get the baseline fee for a given route combination
     * @param destinationChainId The destination chain id
     * @param originChainId The origin chain id
     * @returns The baseline fee
     */
    getBaselineFee(destinationChainId: number, originChainId: number): BigNumber;
    /**
     * @description Get the balancing fee tuples for a given chain
     * @param chainId The chain id
     * @returns The balancing fee
     */
    getBalancingFeeTuples(chainId: number): FlowTupleParameters;
    getZeroFeePointOnBalancingFeeCurve(chainId: number): BigNumber;
    isBalancingFeeCurveFlatAtZero(chainId: number): boolean;
    /**
     * @description Get the lp gamma function tuples for a given chain
     * @param chainId The chain id
     * @returns The lp gamma function
     */
    getLpGammaFunctionTuples(chainId: number): FlowTupleParameters;
    /**
     * @description Get the balance trigger threshold for a given chain and token
     * @param chainId The chain id
     * @param tokenSymbol The symbol of the token which will be resolved
     * @returns The balance trigger threshold if it exists
     */
    getBalanceTriggerThreshold(chainId: number, tokenSymbol: string): ThresholdBoundType;
    /**
     * Arbitrarily return upper bound target. This could be the average of the upper and lower bound targets but
     * for now return upper bound target.
     * @param chainId
     * @param l1TokenAddress
     * @returns
     */
    getTargetBalance(chainId: number, tokenSymbol: string): BigNumber;
    /**
     * Get the incentive pool adjustment
     * @param chainId The chain id
     * @returns The incentive pool adjustment. Defaults to 0 if not set
     */
    getIncentivePoolAdjustment(chainId: string): BigNumber;
    /**
     * Get the UBA reward multiplier
     * @param chainId The chain id
     * @returns The UBA reward multiplier. Defaults to 1 if not set
     */
    getUbaRewardMultiplier(chainId: string): BigNumber;
    toJSON(): {
        baselineFee: any;
        balancingFee: any;
        balanceTriggerThreshold: any;
        lpGammaFunction: any;
        incentivePoolAdjustment: any;
        ubaRewardMultiplier: any;
    };
}
export default UBAConfig;
