import { Dex } from '@nexex/api';
import { OrderbookEvent, OrderbookOrder, OrderSide, PlainDexOrder } from '@nexex/types';
import { Market, OrderAggregate, OrderbookAggregate } from '@nexex/types/orderbook';
import BigNumber from 'bignumber.js';
import { Subject } from 'rxjs';
import { ObConfig } from '../global/global.model';
import { OrderService } from '../order/order.service';
import { Orderbook } from './orderbook.types';
export declare class OrderbookService {
    private orderService;
    private dex;
    private config;
    private events$;
    private ready;
    private orderbookMap;
    constructor(orderService: OrderService, dex: Dex, config: ObConfig, events$: Subject<OrderbookEvent>);
    whenReady(): Promise<void>;
    /**
     *
     * @param baseTokenAddr
     * @param quoteTokenAddr
     * @throws error
     */
    getOrderbook(baseTokenAddr: string, quoteTokenAddr: string): Orderbook;
    /**
     *
     * @param marketId
     * @throws error
     */
    getOrderbookById(marketId: string): Orderbook;
    getOrderbooks(): Orderbook[];
    getMarkets(): Promise<Market[]>;
    /**
     *
     * @param order
     * @throws OrderbookNotExist
     */
    addOrder(order: OrderbookOrder): string;
    findOrderMarket(makerTokenAddress: string, takerTokenAddress: string): Orderbook;
    updateBalance(marketId: string, orderHash: string, side: OrderSide, baseAmount: BigNumber, quoteAmount: BigNumber, lastUpdate: Date): void;
    delistOrder(marketId: string, orderHash: string, side: OrderSide): void;
    validateOrder(plainOrder: PlainDexOrder): Promise<OrderbookOrder>;
    getSnapshot(marketId: string, limit: number, minimal: boolean): Promise<{
        bids: unknown[];
        asks: unknown[];
    }>;
    queryOrderAggregateByPrice(marketId: string, side: OrderSide, price: string | BigNumber, decimals: number): Promise<OrderAggregate>;
    buildFillUpToTx(marketId: string, side: OrderSide, orderHashs: string[]): Promise<PlainDexOrder[]>;
    topOrders(marketId: string, limit: number, decimals?: number): Promise<OrderbookAggregate>;
    /**
     * 1) get market list from config
     * 2) load orders of each market from db
     * 3) register listener of ipfs for each market
     */
    protected init(): Promise<void>;
    private topBidOrders;
    private topAskOrders;
    private loadOrderbook;
    private getTokenAddress;
}
