import BigNumber from "bignumber.js";
import BN from "bn.js";
import { BalanceActionType, OrderSettlement, OrderSide, OrderStatus, OrderType, TokenCode, TransactionStatus } from "../types";
declare enum V0BalanceActionType {
    Withdraw = "withdraw",
    Deposit = "deposit"
}
declare enum V0TransactionStatus {
    Pending = "pending",
    Done = "done",
    Failed = "failed",
    Replaced = "replaced"
}
export interface V0BalanceAction {
    action: V0BalanceActionType;
    amount: BN;
    time: number;
    status: V0TransactionStatus;
    token: number;
    trader: string;
    txHash: string;
    nonce: number | undefined;
}
export declare const deserializeV0BalanceAction: (balanceActionString: string) => V0BalanceAction;
export declare function BalanceActionMapper(actionType: V0BalanceActionType): BalanceActionType;
export declare function TransactionStatusMapper(status: V0TransactionStatus): TransactionStatus;
interface ComputedOrderDetails {
    receiveVolume: BN;
    spendVolume: BN;
    date: number;
    parity: V0OrderParity;
    feeAmount: BN;
    feeToken: number;
}
interface V0MatchDetails {
    orderID: string;
    matchedID: string;
    receivedVolume: BN;
    spentVolume: BN;
    fee: BN;
    receivedToken: number;
    spentToken: number;
}
declare enum V0OrderStatus {
    NOT_SUBMITTED = "NOT_SUBMITTED",
    FAILED_TO_SETTLE = "FAILED_TO_SETTLE",
    OPEN = "OPEN",
    CONFIRMED = "CONFIRMED",
    CANCELED = "CANCELED",
    SETTLED = "SETTLED",
    SLASHED = "SLASHED",
    EXPIRED = "EXPIRED"
}
interface Order {
    readonly id: string;
    readonly trader: string;
    status: V0OrderStatus;
    matchDetails?: V0MatchDetails;
}
interface OrderInputs {
    spendToken: number;
    receiveToken: number;
    price: number | string | BigNumber;
    volume: number | string | BN;
    minimumVolume: number | string | BN;
    type?: OrderInputsAll["type"];
    orderSettlement?: OrderInputsAll["orderSettlement"];
    nonce?: OrderInputsAll["nonce"];
}
declare enum V0OrderParity {
    BUY = 0,
    SELL = 1
}
declare enum V0OrderType {
    MIDPOINT = 0,
    LIMIT = 1,
    MIDPOINT_IOC = 2,
    LIMIT_IOC = 3
}
declare enum V0OrderSettlement {
    RenEx = 1,
    RenExAtomic = 2
}
interface OrderInputsAll extends OrderInputs {
    price: BigNumber;
    volume: BN;
    minimumVolume: BN;
    type: V0OrderType;
    orderSettlement: V0OrderSettlement;
    nonce: BN;
    expiry: number;
}
export interface V0TraderOrder extends Order {
    readonly computedOrderDetails: ComputedOrderDetails;
    readonly orderInputs: OrderInputsAll;
    readonly transactionHash: string;
}
export declare const deserializeV0TraderOrder: (orderString: string) => V0TraderOrder;
export declare function idToToken(token: number): TokenCode;
export declare function OrderSettlementMapper(settlement: V0OrderSettlement): OrderSettlement;
export declare function OrderStatusMapper(status: V0OrderStatus): OrderStatus;
export declare function OrderSideMapper(parity: V0OrderParity): OrderSide;
export declare function OrderTypeMapper(orderType: V0OrderType): OrderType;
export declare function tokenToDigits(token: TokenCode): number;
export {};
