# Trade

In the following query of the relevant interface, the sell order returned is in one format, as well as buy order. Format is listed only in the first sell order or buy order query.
sell orderbuy order status
status 1, TradeOrderStatusOnSale, for sale
status 2： TradeOrderStatusSoldOut, sold out
status 3： TradeOrderStatusRevoked, sell order withdrawn
status 4： TradeOrderStatusExpired，order timeout (not supported currently)
status 5： TradeOrderStatusOnBuy, on buy
status 6： TradeOrderStatusBoughtOut, bought out
status 7： TradeOrderStatusBuyRevoked，buy order withdrawn

## 1.1 Query Buy Order Corresponding to the Address

Address specified only
Specify both address and token

```
  request: http.post
{
    "jsonrpc":"2.0",
    "id" : 1 ,
    "method" : "Chain33.Query", 
    "params":[{ 
        "execer" : "trade",
        "funcName" : "GetOnesBuyOrder",
        "payload" : {
            "addr" : "string"
        }
    }]
}
```

Or

```
{
    "jsonrpc":"2.0",
    "id" : 1 ,
    "method" : "Chain33.Query", 
    "params":[{ 
        "execer" : "trade",
        "funcName" : "GetOnesBuyOrder",
        "payload" : {
            "addr" : "string",
            "token": [ "string", "string"]
        }
    }]
}
```

method: Chain33.Query
execer: trade
funcName: GetOnesBuyOrder
addr：buy order holder
token: identifier of specific token, which can be more than one

```
  response:
{
  "id":int32,
  "error":null,
  "result": {
      "buyOrders" : [{
            "buyID" : "string",
            "sellID" : "string",
            "txHash" : "string",
            "key" : "string",
            "height" : int64,
            "tokenSymbol" : "string",
            "status" : int32,
            "owner" : "string",
            "blockTime" : int64,
            "isSellOrder" : bool,
            "tradedBoardlot" : int64,
            "pricePerBoardlot" : int64,
            "amountPerBoardlot" : int64,
            "minBoardlot" : int64,
            "totalBoardlot" : int64
         }
  ]}
}
```

result: list corresponding to the buy order
key: it could be buyID or txHash. In the current sell order, it is txHash, while in the limit buy order, it is buyID.
txHash: hash corresponding to the transaction
tokenSymbol: token identifier
owner: tokensell order address
blockTime: UTC time of block generated
isSellOrder: whether it is buy order
status: buy order status
height: height of the block where buy order is
amountPerBoardlot: amount per board lot
minBoardlot: minimum board lot
pricePerBoardlot: price per board lot
totalBoardlot: total lot size of board
tradedBoardlot: traded board lot

## 1.2 Query Address’ Buy Order in Different Status

```
  request: http.post
{
    "jsonrpc":"2.0",
    "id" : 1 ,
    "method" : "Chain33.Query", 
    "params":[{ 
        "execer" : "trade",
        "funcName" : "GetOnesBuyOrderWithStatus",
        "payload" : {
            "addr" : "string",
            "status" : int32
        }
    }]
}
```

method: Chain33.Query
execer: trade
funcName: GetOnesBuyOrderWithStatus
addr：
status: buy order status

```
  response:
{
  "id":int32,
  "error":null,
  "result": {
      "buyOrders" :[{
            "buyID" : "string",
            "sellID" : "string",
            "txHash" : "string",
            "key" : "string",
            "height" : int64,
            "tokenSymbol" : "string",
            "status" : int32,
            "owner" : "string",
            "blockTime" : int64,
            "isSellOrder" : bool,
            "tradedBoardlot" : int64,
            "pricePerBoardlot" : int64,
            "amountPerBoardlot" : int64,
            "minBoardlot" : int64,
            "totalBoardlot" : int64
         }
  ]}
}
```

result: lists corresponding to buy order all items are same as ## 1.1

## 1.3 Displays a token buy order of specified amount

```
  request: http.post
{
    "jsonrpc":"2.0",
    "id":int32,
    "method":"Chain33.Query",
    "params":[{"execer" : "trade",
               "funcName" : "GetTokenBuyOrderByStatus",
               "payload" : {"tokenSymbol": string, status: int32, "count":string, "direction": int32,  "fromKey" : string}
    }]  
}
```

method: Chain33.Query
execer: trade
funcName: GetTokenBuyOrderByStatus
status: order status (default is 4, purchasing status）
count：sell order amount
direction: 0 previous page; 1 next page
tokenSymbol: fill in the token identifier
fromKey: buy order key
Don’t fill in the first page.
To get the next page, fill in the key of the last buy order on the page.
To get the previous page, fill in the key for the first buy order on this page.

```
  response:
{
  "id":int32,
  "error":null,
  "result":{
       "buyOrders" : [{
            "buyID" : "string",
            "sellID" : "string",
            "txHash" : "string",
            "key" : "string",
            "height" : int64,
            "tokenSymbol" : "string",
            "status" : int32,
            "owner" : "string",
            "blockTime" : int64,
            "isSellOrder" : bool,
            "boughtBoardlot" : int64,
            "pricePerBoardlot" : int64,
            "amountPerBoardlot" : int64,
            "minBoardlot" : int64,
            "totalBoardlot" : int64
         }
  ]}
}
```

result: corresponds to the list of buy order. Same as 1.1

## 1.4 Displays One or More Tokens for the Specified Vendor, Or the Sell Order Without Token

```
  request: http.post
{
    "jsonrpc":"2.0",
    "id":int32,
    "method":"Chain33.Query",
    "params":[{"execer" : "trade",
               "funcName" : "GetOnesSellOrder",
               "payload" : {"addr": string, "token": ["string", "string"]}
    }]  
}
```

method: Chain33.Query
execer: token
funcName: GetOnesSellOrder
addr：sell order holder
token: identifiers for specific tokens, which can be multiple or not specified

```
  response:
{
  "id":int32,
  "error":null,
  "result": {
      "sellOrders" :[{
            "buyID" : "string",
            "sellID" : "string",
            "txHash" : "string",
            "key" : "string",
            "height" : int64,
            "tokenSymbol" : "string",
            "status" : int32,
            "owner" : "string",
            "blockTime" : int64,
            "isSellOrder" : bool,
            "tradedBoardlot" : int64,
            "pricePerBoardlot" : int64,
            "amountPerBoardlot" : int64,
            "minBoardlot" : int64,
            "totalBoardlot" : int64
       }
  ]}
}
```

result: list corresponding to sell order
key: it could be sellID or txHash. In the current sell order, it is txHash, while in the limit sell order, it is sellID.
txHash: hash corresponding to the transaction
sellID: sell orderid
buyID: buy orderid
tokenSymbol: token identifier
owner: tokensell order address
blockTime: UTC time of block generated
isSellOrder: whether it is buy order
status: sell order status
height: height of the block where sell order is
amountPerBoardlot: amount per board lot
minBoardlot: minimum board lot
pricePerBoardlot: price per board lot
totalBoardlot: total lot size of board
tradedBoardlot: traded board lot
tokensymbol: token on sale identifier

## 1.5 Displays an Address Sell Order Under Specified Status

```
  request: http.post
{
    "jsonrpc":"2.0",
    "id":int32,
    "method":"Chain33.Query",
    "params":[{"execer" : "trade",
               "funcName" : "GetAllSellOrderWithStatus",
               "payload" : {"addr": string, "status": int32}
    }]  
}
```

method: Chain33.Query
execer: trade
funcName: GetAllSellOrderWithStatus
addr：sell order address
status: 1 stands for selling status; 2 status of sold out; 3 sell order is revoked status

```
  response:
{ 
  "id":int32,
  "error":null,
  "result":{
     "sellOrders" : [{
            "buyID" : "string",
            "sellID" : "string",
            "txHash" : "string",
            "key" : "string",
            "height" : int64,
            "tokenSymbol" : "string",
            "status" : int32,
            "owner" : "string",
            "blockTime" : int64,
            "isSellOrder" : bool,
            "tradedBoardlot" : int64,
            "pricePerBoardlot" : int64,
            "amountPerBoardlot" : int64,
            "minBoardlot" : int64,
            "totalBoardlot" : int64
         }
  ]}
}
```

result: List corresponding to sell order. Same as 1.4

## 1.6 Display All Buy Orders a User Traded

See 1.1

## 1.7 Display All Buy Orders of One or More Tokens for a User Traded

See 1.1

## 1.8 Display One Token Sell Order With Specified Quantity

```
  request: http.post
{
    "jsonrpc":"2.0",
    "id":int32,
    "method":"Chain33.Query",
    "params":[{"execer" : "trade",
               "funcName" : "GetTokenSellOrderByStatus",
               "payload" : {"tokenSymbol": string, status: int32, "count":string, "direction": int32,  "fromKey" : string}
    }]  
}
```

method: Chain33.Query
execer: trade
funcName: GetTokenSellOrderByStatus
status: query status (default 1, on sale)
count：sell order count
direction: 0 previous page 1 next page
tokenSymbol: fill in the token identifier
fromKey: sell order key
Don’t fill in the first page.
To get the next page, fill in the key of the last buy order on the page.
To get the previous page, fill in the key for the first buy order on this page.

```
  response:
{ 
  "id":int32,
  "error":null,
  "result":{
     "sellOrders" : [{
            "buyID" : "string",
            "sellID" : "string",
            "txHash" : "string",
            "key" : "string",
            "height" : int64,
            "tokenSymbol" : "string",
            "status" : int32,
            "owner" : "string",
            "blockTime" : int64,
            "isSellOrder" : bool,
            "tradedBoardlot" : int64,
            "pricePerBoardlot" : int64,
            "amountPerBoardlot" : int64,
            "minBoardlot" : int64,
            "totalBoardlot" : int64
         }
  ]}
}
```

result: List corresponding to sell order. Same as 1.4

## 1.9 Generate Transaction to Sell Token (unsigned)

```
  request: http.post
{
    "jsonrpc":"2.0",
    "id":int32,
    // "method":"Chain33.CreateRawTradeSellTx",
    "method":"trade.CreateRawTradeSellTx",
    "params":[
       {
              "tokenSymbol":"string",
              "amountPerBoardlot":int64,
              "minBoardlot":int64,
              "pricePerBoardlot":int64,
              "totalBoardlot":int64,
              "fee" : int64
       }
    ]
}
```

method: Chain33.CreateRawTradeSellTx。
tokenSymbol: token identifier
amountPerBoardlot: amount per board lot
minBoardlot: minimum board lot
pricePerBoardlot: price per board lot
totalBoardlot: total lot size of board
fee: transaction fee

```
  response:
{
    "id":int32,
    "error":null,
    "result": "string"
}
```

result: hexadecimal transaction encoded strings

## 1.10 Generate Transaction Which Buys Token Sold by Specified Sell Order

```
  request: http.post
{
    "jsonrpc":"2.0",
    "id":int32,
    // "method":"Chain33.CreateRawTradeBuyTx",
    "method":"tradeCreateRawTradeBuyTx",
    "params":[
           {"sellID":string,
             "boardlotCnt":int64,
            "fee" : int64
           }
     ] 
}
```

sellID: sell orderid
boardlotCnt: board lot, unit is hand.
fee: transaction fee

```
  response:
{
    "id":int32,
    "error":null,
    "result": "string"
}
```

result: hexadecimal transaction encoded strings

## 1.11 Generate Transaction to Cancel Selling Token (unsigned)

```
  request: http.post
{
    "jsonrpc":"2.0",
    "id":int32,
    // "method":"Chain33.CreateRawTradeRevokeTx",
    "method":"trade.CreateRawTradeRevokeTx",
    "params":[{
            sellID":"string",
            "fee" : int64
             }] 
}
```

sellID: sell orderid
fee: transaction fee

```
  response:
{
    "id":int32,
    "error":null,
    "result": "string"
}
```

result: hexadecimal transaction encoded strings

## 1.12 Generate Buying Token Transaction(unsigned)

```
  request: http.post
{
    "jsonrpc":"2.0",
    "id":int32,
    // "method":"Chain33.CreateRawTradeBuyLimitTx",
    "method":"trade.CreateRawTradeBuyLimitTx",
    "params":[
       {
              "tokenSymbol":"string",
              "amountPerBoardlot":int64,
              "minBoardlot":int64,
              "pricePerBoardlot":int64,
              "totalBoardlot":int64,
              "fee" : int64
       }
    ]
}
```

method: Chain33.CreateRawTradeBuyLimitTx。
tokenSymbol: token identifier
amountPerBoardlot: amount per board lot
minBoardlot: minimum board lot
pricePerBoardlot: price per board lot
totalBoardlot: total lot size of board
fee: transaction fee

```
  response:
{
    "id":int32,
    "error":null,
    "result": "string"
}
```

result: hexadecimal transaction encoded strings

## 1.13 Generate Selling Token of Specified Buy Order Transaction(unsigned)

```
  request: http.post
{
    "jsonrpc":"2.0",
    "id":int32,
    // "method":"Chain33.CreateRawTradeSellMarketTx",
    "method":"trade.CreateRawTradeSellMarketTx",
    "method":
    "params":[
           {"buyID":string,
             "boardlotCnt":int64,
            "fee" : int64
           }
     ] 
}
```

buyID: buy orderid
boardlotCnt: purchase quantity, unit is hand
fee: transaction fee

```
  response:
{
    "id":int32,
    "error":null,
    "result": "string"
}
```

result: hexadecimal transaction encoded strings

## 1.14 Generate Cancelling to Buying Token(Buy Order)Transaction(unsigned)

```
  request: http.post
{
    "jsonrpc":"2.0",
    "id":int32,
    // "method":"Chain33.CreateRawTradeRevokeBuyTx",
    "method":"trade.CreateRawTradeRevokeBuyTx",
    "params":[{
            "buyID":"string",
            "fee" : int64
             }] 
}
```

buyID: buy orderid
fee: transaction fee

```
  response:
{
    "id":int32,
    "error":null,
    "result": "string"
}
```

result: hexadecimal encoded transaction strings

## 1.15 Page by Status to List Orders at a Given Address（Including Buy Order and Sell Order）

```
  request: http.post
{
    "id" : 1 ,
    "method" : "Chain33.Query", 
    "params":[{ 
        "execer" : "trade",
        "funcName" : "GetOnesOrderWithStatus",
        "payload" : {
            "status" : 1,
                        "addr" : "1Q8hGLfoGe63efeWa8fJ4Pnukhkngt6poK",
                        "direction": 1,
                        "count" : 10,
                        "fromKey" : ""
        }
    }]
}
```

status: 1: uncompleted transaction, 2: completed transaction, 3: withdrawn transaction
addr: specified
direction: 0, in descending order of height, 1, in ascending order of height
count: count number
fromKey: no specify on the first page. For other pages, specify the last key on the previous page

```
  response:
{
   "id" : 1,
   "error" : null,
   "result" : {
      "orders" : [
         {
            "txHash" : "0xe58a6917a504d32bb0303a2dad7c0bcb4558a66b7d8959d857196074886eeaf5",
            "sellID" : "mavl-trade-sell-e58a6917a504d32bb0303a2dad7c0bcb4558a66b7d8959d857196074886eeaf5",
            "buyID" : "",
            "isSellOrder" : true,
            "key" : "0xe58a6917a504d32bb0303a2dad7c0bcb4558a66b7d8959d857196074886eeaf5",
            "pricePerBoardlot" : 100000000,
            "totalBoardlot" : 1,
            "blockTime" : 1523435542,
            "status" : 1,
            "height" : 189829,
            "tokenSymbol" : "LJ",
            "owner" : "1Q8hGLfoGe63efeWa8fJ4Pnukhkngt6poK",
            "tradedBoardlot" : 0,
            "minBoardlot" : 1,
            "amountPerBoardlot" : 100000000
         }
      ]
    }
}
```

