import BN from "bn.js";
export interface Order {
    buyToken: number;
    buyAmount: BN;
    sellToken: number;
    sellAmount: BN;
    user: number;
}
export interface Solution {
    name?: string;
    prices: BN[];
    buyVolumes: BN[];
}
export interface TestCaseInput {
    name?: string;
    deposits?: Deposit[];
    orders: Order[];
    solutions: Solution[];
}
export interface Deposit {
    amount: BN;
    token: number;
    user: number;
}
export interface Token {
    id: number;
    price: BN;
    conservation: BN;
}
export interface ComputedOrder {
    idx: number;
    user: number;
    buy: BN;
    sell: BN;
    utility: BN;
    disregardedUtility: BN;
}
export interface ExecutedAmount {
    buy: BN;
    sell: BN;
}
export interface ObjectiveValueComputation {
    orderExecutedAmounts: ExecutedAmount[];
    orderTokenConservation: BN[][];
    tokenConservation: BN[];
    utilities: BN[];
    disregardedUtilities: BN[];
    totalUtility: BN;
    totalDisregardedUtility: BN;
    burntFees: BN;
    result: BN;
}
export interface ComputedSolution {
    name?: string;
    tokens: Token[];
    orders: ComputedOrder[];
    objectiveValueComputation: ObjectiveValueComputation;
    totalFees: BN;
    totalUtility: BN;
    burntFees: BN;
    objectiveValue: BN;
}
export interface TestCase {
    name?: string;
    numTokens: number;
    deposits: Deposit[];
    orders: Order[];
    solutions: ComputedSolution[];
}
export interface SolutionSubmission {
    objectiveValue: BN;
    owners: string[];
    touchedorderIds: number[];
    volumes: BN[];
    prices: BN[];
    tokenIdsForPrice: number[];
}
