import BN from "bn.js";
import { Order, Solution, ObjectiveValueComputation } from "./examples/model";
/**
 * Converts the amount value to `ether` unit.
 * @param value - - The amount to convert
 * @returns The value in `ether` as a bignum
 */
export declare function toETH(value: number): BN;
/**
 * Removes fees to the specified value `n` times.
 * @param x - - The value to apply the fee to
 * @param n - - The number of times to apply the fee, must be greater than 0
 * @returns The value minus fees
 */
export declare function feeSubtracted(x: BN, n?: number): BN;
/**
 * Adds fees to the specified.
 * @param x - The value to apply the fee to
 * @returns The value plus fees
 */
export declare function feeAdded(x: BN): BN;
/**
 * The error epsilon required for buy/sell amounts to account for rounding
 * errors.
 */
export declare const ERROR_EPSILON: BN;
/**
 * Calculates the executed buy amout given a buy volume and the settled buy and
 * sell prices.
 * @param executedBuyAmount - The executed buy amount
 * @param buyTokenPrice - The buy token price
 * @param sellTokenPrice - The sell token price
 * @returns The value plus fees
 */
export declare function getExecutedSellAmount(executedBuyAmount: BN, buyTokenPrice: BN, sellTokenPrice: BN): BN;
/**
 * Calculates the utility of an order given an executed buy amount and settled
 * solution prices.
 * @param order - The order
 * @param executedBuyAmount - The executed buy amount
 * @param prices - The prices
 * @returns The order's utility
 */
export declare function orderUtility(order: Order, executedBuyAmount: BN, prices: BN[]): BN;
/**
 * Calculates the disregarded utility of an order given an executed buy amount
 * and settled solution prices.
 * @param order - The order
 * @param executedBuyAmount - The executed buy amount
 * @param prices - The prices
 * @returns The order's disregarded utility
 */
export declare function orderDisregardedUtility(order: Order, executedBuyAmount: BN, prices: BN[]): BN;
/**
 * Calculates the total objective value for the specified solution given the
 * order book.
 * @param orders - The orders
 * @param solution - The solution
 * @returns The solution's objective value
 */
export declare function solutionObjectiveValue(orders: Order[], solution: Solution): BN;
/**
 * Calculates the solutions objective value returning a computation object with
 * all the intermediate values - useful for debugging.
 * @param orders - The orders
 * @param solution - The solution
 * @param strict - Throw when solution is determined to be invalid
 * @returns The solution's objective value computation object
 */
export declare function solutionObjectiveValueComputation(orders: Order[], solution: Solution, strict?: boolean): ObjectiveValueComputation;
