/// <reference types="node" />
import { Msg, StdSignature } from '@binance-chain/javascript-sdk/lib/types';
import { BigSource } from 'big.js';
/**
 * Address
 */
export type Address = string;
/**
 * Token
 * @see https://docs.binance.org/api-reference/dex-api/paths.html#token
 */
export type Token = {
    /**
     * token name, e.g. Binance Chain
     */
    name: string;
    /**
     * unique token trade symbol, e.g. BTC-000
     */
    symbol: string;
    /**
     * token symbol, e.g. BTC
     */
    original_symbol: string;
    /**
     * total token supply in decimal form, e.g. 1.00000000
     */
    total_supply: string;
    /**
     * Address which issue the token
     */
    owner: string;
};
/**
 * Market
 * @see https://docs.binance.org/api-reference/dex-api/paths.html#market
 */
export type Market = {
    /**
     * symbol of base asset, e.g. BNB
     */
    base_asset_symbol: string;
    /**
     * symbol of quote asset, e.g. ABC-5CA
     */
    quote_asset_symbol: string;
    /**
     * Price in decimal form, e.g. 1.00000000
     */
    list_price: string;
    /**
     * Minimum price change in decimal form, e.g. 0.00000001
     */
    tick_size: string;
    /**
     * Minimum trading quantity in decimal form, e.g. 1.00000000
     */
    lot_size: string;
};
/**
 * TickerStatistics
 * @see https://docs.binance.org/api-reference/dex-api/paths.html#tickerstatistics
 */
export type TickerStatistics = {
    /**
     * sell price
     */
    askPrice: string;
    /**
     * sell quantity
     */
    askQuantity: string;
    /**
     * buy price
     */
    bidPrice: string;
    /**
     * buy quantity
     */
    bidQuantity: string;
    /**
     * time of closing
     */
    closeTime: number;
    /**
     * total trade count
     */
    count: number;
    /**
     * ID of first trade
     */
    firstId: string;
    /**
     * highest price
     */
    highPrice: string;
    /**
     * ID of last trade
     */
    lastId: string;
    /**
     * last price
     */
    lastPrice: string;
    /**
     * last quantity
     */
    lastQuantity: string;
    /**
     * lowest price
     */
    lowPrice: string;
    /**
     * open price
     */
    openPrice: string;
    /**
     * open time
     */
    openTime: number;
    /**
     * last close price
     */
    prevClosePrice: string;
    /**
     * change of price
     */
    priceChange: string;
    /**
     * change of price in percentage
     */
    priceChangePercent: string;
    /**
     * trading volume in quote asset
     */
    quoteVolume: string;
    /**
     * trading symbol
     */
    symbol: string;
    /**
     * trading volume
     */
    volume: string;
    /**
     * weighted average price
     */
    weightedAvgPrice: string;
};
/**
 * Account
 * @see https://docs.binance.org/api-reference/dex-api/paths.html#account
 */
export type Account = {
    /**
     * Account number
     */
    account_number: number;
    /**
     * Address of the account
     */
    address: Address;
    /**
     * List of balances
     */
    balances: Balance[];
    /**
     * Public key bytes
     */
    public_key: number[];
    /**
     * indicate additional check for this account
     */
    flags: number;
    /**
     * sequence is for preventing replay attack
     */
    sequence: number;
};
/**
 * TxPage
 * @see https://docs.binance.org/api-reference/dex-api/paths.html#txpage
 */
export type TxPage = {
    /**
     * total sum of transactions
     */
    total: number;
    /**
     * List of transactions
     */
    tx: Tx[];
};
export type FeeType = 'submit_proposal' | 'deposit' | 'vote' | 'create_validator' | 'remove_validator' | 'dexList' | 'orderNew' | 'orderCancel' | 'issueMsg' | 'mintMsg' | 'tokensBurn' | 'tokensFreeze' | 'send' | 'timeLock' | 'timeUnlock' | 'timeRelock' | 'setAccountFlags' | 'HTLT' | 'depositHTLT' | 'claimHTLT' | 'refundHTLT';
export type Fee = {
    msg_type: FeeType;
    fee: number;
    fee_for: number;
};
export type TransferFee = {
    fixed_fee_params: Fee;
    multi_transfer_fee: number;
    lower_limit_as_multi: number;
};
export type DexFeeName = 'ExpireFee' | 'ExpireFeeNative' | 'CancelFee' | 'CancelFeeNative' | 'FeeRate' | 'FeeRateNative' | 'IOCExpireFee' | 'IOCExpireFeeNative';
export type DexFee = {
    fee_name: DexFeeName;
    fee_value: number;
};
export type DexFees = {
    dex_fee_fields: DexFee[];
};
export type Fees = (Fee | TransferFee | DexFees)[];
/**
 * Tx
 * @see https://docs.binance.org/api-reference/dex-api/paths.html#tx
 */
export type Tx = {
    /**
     * block height
     */
    blockHeight: number;
    /**
     * transaction result code
     */
    code: number;
    /**
     * _no official description_
     */
    confirmBlocks: number;
    /**
     * _no official description_
     */
    data: string | null;
    /**
     * From address
     */
    fromAddr: Address;
    /**
     * Order ID
     */
    orderId: string | null;
    /**
     * Time of transaction
     */
    timeStamp: string;
    /**
     * To address
     */
    toAddr: Address;
    /**
     * _no official description_
     */
    txAge: number;
    /**
     * _no official description_
     */
    txAsset: string;
    /**
     * _no official description_
     */
    txFee: string;
    /**
     * hash of transaction
     */
    txHash: string;
    /**
     * Type of transaction
     */
    txType: TxType;
    /**
     * memo
     */
    memo: string;
    /**
     * Value of transaction
     */
    value: string;
    /**
     * _no official description_
     */
    source: number;
    /**
     * _no official description_
     */
    sequence: number;
    /**
     * Optional. Available when the transaction type is one of HTL_TRANSFER, CLAIM_HTL, REFUND_HTL, DEPOSIT_HTL
     */
    swapId?: string;
    /**
     * _no official description_
     */
    proposalId: string | null;
};
export type TxSide = 'RECEIVE' | 'SEND';
/**
 * Type of transactions
 * @see https://docs.binance.org/api-reference/dex-api/paths.html#apiv1transactions
 */
export type TxType = 'NEW_ORDER' | 'ISSUE_TOKEN' | 'BURN_TOKEN' | 'LIST_TOKEN' | 'CANCEL_ORDER' | 'FREEZE_TOKEN' | 'UN_FREEZE_TOKEN' | 'TRANSFER' | 'PROPOSAL' | 'VOTE' | 'MINT' | 'DEPOSIT' | 'CREATE_VALIDATOR' | 'REMOVE_VALIDATOR' | 'TIME_LOCK' | 'TIME_UNLOCK' | 'TIME_RELOCK' | 'SET_ACCOUNT_FLAG' | 'HTL_TRANSFER' | 'CLAIM_HTL' | 'DEPOSIT_HTL' | 'REFUND_HTL';
/**
 * Parameters for `/api/v1/transactions` endpoint
 * @see https://docs.binance.org/api-reference/dex-api/paths.html#apiv1transactions
 */
export type GetTxsParams = {
    address?: string;
    blockHeight?: number;
    endTime?: number;
    limit?: number;
    offset?: number;
    side?: TxSide;
    startTime?: number;
    txAsset?: string;
    txType?: TxType;
};
export type VaultTxParams = {
    addressFrom?: Address;
    addressTo: Address;
    amount: BigSource;
    asset: string;
    memo: string;
};
export type NormalTxParams = {
    addressFrom?: Address;
    addressTo: Address;
    amount: BigSource;
    asset: string;
};
export type GetMarketsParams = {
    limit?: number;
    offset?: number;
};
/**
 * OrderList
 * @see https://docs.binance.org/api-reference/dex-api/paths.html#orderlist
 */
export type OrderList = {
    /**
     * total sum of orders
     */
    total: number;
    /**
     * List of orders
     */
    order: [Order];
};
/**
 * Order status as part of an order
 * See description of Order.status for more detail https://docs.binance.org/api-reference/dex-api/paths.html#order
 */
export declare enum OrderStatus {
    Ack = "Ack",
    PartialFill = "PartialFill",
    IocNoFill = "IocNoFill",
    FullyFill = "FullyFill",
    Canceled = "Canceled",
    Expired = "Expired",
    FailedBlocking = "FailedBlocking",
    FailedMatching = "FailedMatching",
    IocExpire = "IocExpire"
}
/**
 * Order
 * @see https://docs.binance.org/api-reference/dex-api/paths.html#order
 */
export type Order = {
    /**
     * total amount of trades that have made
     */
    cumulateQuantity: string;
    /**
     * trading fee on the latest updated block of this order. Multiple assets are split by semicolon.
     */
    fee: string;
    /**
     * price of last execution
     */
    lastExecutedPrice: string;
    /**
     * quantity of last execution
     */
    lastExecutedQuantity: string;
    /**
     * time of order creation
     */
    orderCreateTime: number;
    /**
     * Order ID
     */
    orderId: string;
    /**
     * order issuer
     */
    owner: string;
    /**
     * order price
     */
    price: string;
    /**
     * order quantity
     */
    quantity: number;
    /**
     * 1 for buy and 2 for sell
     */
    side: number;
    /**
     * Order status
     */
    status: OrderStatus;
    /**
     * trading pair symbol
     */
    symbol: string;
    /**
     * 1 for Good Till Expire(GTE) order and 3 for Immediate Or Cancel (IOC)
     */
    timeInForce: number;
    /**
     * trade ID
     */
    tradeId: string;
    /**
     * hash of transaction
     */
    transactionHash: string;
    /**
     * time of latest order update, for example, cancel, expire
     */
    transactionTime: number;
    /**
     * only 2 is available for now, meaning limit order
     */
    type: string;
};
/**
 * Balance
 * @see https://docs.binance.org/api-reference/dex-api/paths.html#balance
 */
export type Balance = {
    /**
     * asset symbol, e.g. BNB
     */
    symbol: string;
    /**
     * In decimal form, e.g. 0.00000000
     */
    free: string;
    /**
     * In decimal form, e.g. 0.00000000
     */
    locked: string;
    /**
     * In decimal form, e.g. 0.00000000
     */
    frozen: string;
};
export type Transfer = {
    code: number;
    hash: string;
    log: string;
    ok: boolean;
};
/**
 * Result of  `bncClient.transfer(...)`
 * to transfer tokens from one address to another.
 * See https://github.com/binance-chain/javascript-sdk/blob/master/docs/api-docs/classes/bncclient.md#transfer
 * */
export type TransferResult = {
    result?: Transfer[];
};
export type AminoWrapping<T> = {
    type: string;
    value: T;
};
export type StdTransaction = {
    msg: AminoWrapping<Msg>[];
    signatures: StdSignature[];
    memo: string;
    source: number;
    data?: Buffer | null | string;
};
export type TransactionResult = {
    hash: string;
    log: string;
    data?: string;
    height: string;
    code: number;
    tx: AminoWrapping<StdTransaction>;
};
