# Trade 接口

在下面查询相关接口中，返回的卖单都一个一种格式，买单也是一种格式，只在第一个卖单或买单查询中列出其格式，不重复。

**卖单买单状态说明：**

| 状态 | 名称                       | 说明                         |
| :--- | :------------------------- | :--------------------------- |
| 1    | TradeOrderStatusOnSale     | 在售                         |
| 2    | TradeOrderStatusSoldOut    | 售完                         |
| 3    | TradeOrderStatusRevoked    | 卖单被撤回                   |
| 4    | TradeOrderStatusExpired    | 订单超时(目前不支持订单超时) |
| 5    | TradeOrderStatusOnBuy      | 求购                         |
| 6    | TradeOrderStatusBoughtOut  | 购买完成                     |
| 7    | TradeOrderStatusBuyRevoked | 买单被撤回                   |

Buy/Sell ID 在创建交易时不需要带上前缀 “mavl-trade-sell-“ 或 “mavl-trade-buy-“

## 1 查询地址对应的买单 GetOnesBuyOrder

只指定地址，同时指定地址和token

**请求报文：**

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

或

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

**参数说明：**

| 参数      | 类型     | 是否必选 | 说明                            |
| :-------- | :------- | :------- | :------------------------------ |
| addr      | string   | 是       | 买单持有人                      |
| token     | []string | 是       | 具体的token的标识符，可以是多个 |
| status    | int32    | 否       | 状态                            |
| direction | int32    | 否       | 查询的方向                      |
| count     | int32    | 否       | 最多取的数量                    |
| fromKey   | string   | 否       | 开始查询的主键                  |

**响应报文：**

```
{
    "id":int32,
    "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,
                "assetExec":"string",
                "priceExec":"string",
                "priceSymbol":"string"
            }
        ]
    },
    "error":null
}
```

**参数说明：**

| 参数              | 类型   | 说明                                                         |
| :---------------- | :----- | :----------------------------------------------------------- |
| result            | -      | 对应买单的列表                                               |
| key               | string | 可能是 buyID 或 txhash。 在现价买单中是txHash， 在限价买单中是 buyID |
| txHash            | string | 对应交易的hash                                               |
| sellID            | string | 卖单id                                                       |
| buyID             | string | 买单id                                                       |
| tokenSymbol       | string | token的标识符                                                |
| owner             | string | token购买者的地址                                            |
| blockTime         | int64  | 出块的 UTC 时间                                              |
| isSellOrder       | string | 是否是买单                                                   |
| status            | bool   | 买单状态                                                     |
| height            | int64  | 买单所在区块的高度                                           |
| amountPerBoardlot | int64  | 每一手成交的数量                                             |
| minBoardlot       | int64  | 一次购买最少成交的数量                                       |
| pricePerBoardlot  | int64  | 一手成交的价格                                               |
| totalBoardlot     | int64  | 总共购买的手数                                               |
| tradedBoardlot    | int64  | 已经成交手数                                                 |
| assetExec         | string | 资产来源的执行器名称                                         |
| priceExec         | string |                                                              |
| priceSymbol       | string | -                                                            |

## 2 分状态查询地址的买单 GetOnesBuyOrderWithStatus

**请求报文：**

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

**参数说明：**

| 参数      | 类型     | 是否必选 | 说明                            |
| :-------- | :------- | :------- | :------------------------------ |
| addr      | string   | 是       | 买单持有人                      |
| token     | []string | 否       | 具体的token的标识符，可以是多个 |
| status    | int32    | 是       | 买单状态                        |
| direction | int32    | 否       | 查询的方向                      |
| count     | int32    | 否       | 最多取的数量                    |
| fromKey   | string   | 否       | 开始查询的主键                  |

**响应报文：**

```
{
    "id":int32,
    "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,
                "assetExec":"string",
                "priceExec":"string",
                "priceSymbol":"string"
            }
        ]
    },
    "error":null
}
```

result: 对应买单的列表，各项同1.1。

## 3 显示一个token 指定数量的买单 GetTokenBuyOrderByStatus

**请求报文：**

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

**参数说明：**

| 参数        | 类型   | 说明                                                         |
| :---------- | :----- | :----------------------------------------------------------- |
| status      | int32  | 订单状态 （默认是4, 求购状态）                               |
| count       | int32  | 卖单数量                                                     |
| direction   | int32  | 0 上一页; 1下一页                                            |
| tokenSymbol | string | 填写token标识符                                              |
| fromKey     | string | 买单的key，不填第一页；如果要获取下一页， 填写这一页的最后一个买单的key；如果要获取上一页， 填写这一页的第一个买单的key。 |

**响应报文：**

```
{
    "id":int32,
    "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,
                "assetExec":"string",
                "priceExec":"string",
                "priceSymbol":"string"
            }
        ]
    },
    "error":null
}
```

result: 对应买单的列表，各项同1.1。

## 4 显示指定token出售者的一个或多个token 或 不指定token 的卖单 GetOnesSellOrder

**请求报文：**

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

**参数说明：**

| 参数      | 类型     | 是否必选 | 说明                                       |
| :-------- | :------- | :------- | :----------------------------------------- |
| addr      | string   | 是       | 买单持有人                                 |
| token     | []string | 是       | 具体的token的标识符，可以是多个， 或不指定 |
| status    | int32    | 否       | 状态                                       |
| direction | int32    | 否       | 查询的方向                                 |
| count     | int32    | 否       | 最多取的数量                               |
| fromKey   | string   | 否       | 开始查询的主键                             |

**响应报文：**

```
{
    "id":int32,
    "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,
                "assetExec":"string",
                "priceExec":"string",
                "priceSymbol":"string"
            }
        ]
    },
    "error":null
}
```

**参数说明：**

| 参数              | 类型   | 说明                                                         |
| :---------------- | :----- | :----------------------------------------------------------- |
| result            | -      | 对应买单的列表                                               |
| key               | string | 可能是 sellID 或 txHash。 在现价卖单中是txHash， 在限价卖单中是 sellID |
| txHash            | string | 对应交易的hash                                               |
| sellID            | string | 卖单id                                                       |
| buyID             | string | 买单id                                                       |
| tokenSymbol       | string | 在售token的标识符                                            |
| owner             | string | token卖单的地址                                              |
| blockTime         | int64  | 出块的 UTC 时间                                              |
| isSellOrder       | string | 是否是买单                                                   |
| status            | bool   | 卖单状态                                                     |
| height            | int64  | 卖单所在区块的高度                                           |
| amountPerBoardlot | int64  | 每一手成交的数量                                             |
| minBoardlot       | int64  | 一次购买最少成交的数量                                       |
| pricePerBoardlot  | int64  | 一手成交的价格                                               |
| totalBoardlot     | int64  | 总共购买的手数                                               |
| tradedBoardlot    | int64  | 已经成交手数                                                 |
| assetExec         | string | 资产来源的执行器名称                                         |
| priceExec         | string |                                                              |
| priceSymbol       | string | -                                                            |

## 5 显示指定状态下的某地址卖单 GetOnesSellOrderWithStatus

**请求报文：**

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

**参数说明：**

| 参数      | 类型     | 是否必选 | 说明                                                  |
| :-------- | :------- | :------- | :---------------------------------------------------- |
| addr      | string   | 是       | 卖单地址                                              |
| token     | []string | 否       | 具体的token的标识符，可以是多个                       |
| status    | int32    | 是       | 1表示在售状态; 2，表示售罄状态；3，表示卖单被撤销状态 |
| direction | int32    | 否       | 查询的方向                                            |
| count     | int32    | 否       | 最多取的数量                                          |
| fromKey   | string   | 否       | 开始查询的主键                                        |

**响应报文：**

```
{
    "id":int32,
    "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,
                "assetExec":"string",
                "priceExec":"string",
                "priceSymbol":"string"
            }
        ]
    },
    "error":null
}
```

result: 对应卖单的列表，各项同1.4。

## 6 显示一个用户成交的所有买单

见 1.1

## 7 显示一个用户成交的指定一个或者多个token所有买单

见 1.1

## 8 显示一个token 指定数量的卖单 GetTokenSellOrderByStatus

**请求报文：**

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

**参数说明：**

| 参数        | 类型   | 说明                                                         |
| :---------- | :----- | :----------------------------------------------------------- |
| status      | int32  | 查询状态 （默认 1, 在售状态）                                |
| count       | int32  | 卖单数量                                                     |
| direction   | int32  | 0 上一页; 1下一页                                            |
| tokenSymbol | string | 填写token标识符                                              |
| fromKey     | string | 卖单的key，不填第一页；如果要获取下一页， 填写这一页的最后一个卖单的key；如果要获取上一页， 填写这一页的第一个卖单的key。 |

**响应报文：**

```
{
    "id":int32,
    "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,
                "assetExec":"string",
                "priceExec":"string",
                "priceSymbol":"string"
            }
        ]
    },
    "error":null
}
```

result: 对应卖单的列表，各项同1.4。

## 9 生成 卖出资产的交易（未签名） CreateRawTradeSellTx

**请求报文：**

```
{
    "jsonrpc":"2.0",
    "id":int32,
    "method":"trade.CreateRawTradeSellTx",
    "params":[
        {
            "tokenSymbol":"string",
            "assetExec":"string",
            "amountPerBoardlot":int64,
            "minBoardlot":int64,
            "pricePerBoardlot":int64,
            "totalBoardlot":int64,
            "priceExec" : "string",
            "priceSymbol" : "string",
            "fee" : int64
        }
    ]
}
```

**参数说明：**

| 参数              | 类型   | 说明                   |
| :---------------- | :----- | :--------------------- |
| tokenSymbol       | string | 资产标识符             |
| assetExec         | string | 资产来源的执行器名称   |
| amountPerBoardlot | int64  | 每一手成交的数量       |
| minBoardlot       | int64  | 一次购买最少成交的数量 |
| pricePerBoardlot  | int64  | 一手成交的价格         |
| totalBoardlot     | int64  | 总共的出售的手数       |
| priceExec         | string | 标价资产的合约         |
| priceSymbol       | string | 标价资产的名字         |
| fee               | int64  | 交易的手续费           |

**响应报文：**

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

**参数说明：**

| 参数   | 类型   | 说明                       |
| :----- | :----- | :------------------------- |
| result | string | 交易十六进制编码后的字符串 |

## 10 生成买入指定卖单卖出的token的交易（未签名）CreateRawTradeBuyTx

**请求报文：**

```
{
    "jsonrpc":"2.0",
    "id":int32,
    "method":"trade.CreateRawTradeBuyTx",
    "params":[
        {
            "sellID":string,
            "boardlotCnt":int64,
            "fee" : int64
        }
    ]
}
```

**参数说明：**

| 参数        | 类型   | 说明             |
| :---------- | :----- | :--------------- |
| sellID      | string | 卖单id           |
| boardlotCnt | int64  | 购买数量，单位手 |
| fee         | int64  | 交易的手续费     |

**响应报文：**

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

**参数说明：**

| 参数   | 类型   | 说明                       |
| :----- | :----- | :------------------------- |
| result | string | 交易十六进制编码后的字符串 |

## 11 生成撤销卖出token(卖单)的交易（未签名） CreateRawTradeRevokeTx

**请求报文：**

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

**参数说明：**

| 参数   | 类型   | 说明         |
| :----- | :----- | :----------- |
| sellID | string | 卖单id       |
| fee    | int64  | 交易的手续费 |

**响应报文：**

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

**参数说明：**

| 参数   | 类型   | 说明                       |
| :----- | :----- | :------------------------- |
| result | string | 交易十六进制编码后的字符串 |

## 12 生成 买入token的交易（未签名） CreateRawTradeBuyLimitTx

**请求报文：**

```
{
    "jsonrpc":"2.0",
    "id":int32,
    "method":"trade.CreateRawTradeBuyLimitTx",
    "params":[
        {
            "tokenSymbol":"string",
            "assetExec":"string",
            "amountPerBoardlot":int64,
            "minBoardlot":int64,
            "pricePerBoardlot":int64,
            "totalBoardlot":int64,
            "priceExec" : "string",
            "priceSymbol" : "string",
            "fee" : int64
        }
    ]
}
```

**参数说明：**

| 参数              | 类型   | 说明                   |
| :---------------- | :----- | :--------------------- |
| tokenSymbol       | string | token标识符            |
| assetExec         | string | 资产来源的执行器名称   |
| amountPerBoardlot | int64  | 每一手成交的数量       |
| minBoardlot       | int64  | 一次购买最少成交的数量 |
| pricePerBoardlot  | int64  | 一手成交的价格         |
| totalBoardlot     | int64  | 总共的出售的手数       |
| priceExec         | string | 标价资产的合约         |
| priceSymbol       | string | 标价资产的名字         |
| fee               | int64  | 交易的手续费           |

**响应报文：**

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

**参数说明：**

| 参数   | 类型   | 说明                       |
| :----- | :----- | :------------------------- |
| result | string | 交易十六进制编码后的字符串 |

## 13 生成卖出指定买单的token的交易（未签名） CreateRawTradeSellMarketTx

**请求报文：**

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

**参数说明：**

| 参数        | 类型   | 说明             |
| :---------- | :----- | :--------------- |
| buyID       | string | 买单id           |
| boardlotCnt | int64  | 购买数量，单位手 |
| fee         | int64  | 交易的手续费     |

**响应报文：**

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

**参数说明：**

| 参数   | 类型   | 说明                       |
| :----- | :----- | :------------------------- |
| result | string | 交易十六进制编码后的字符串 |

## 14 生成撤销买入token(买单)的交易（未签名） CreateRawTradeRevokeBuyTx

**请求报文：**

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

**参数说明：**

| 参数  | 类型   | 说明         |
| :---- | :----- | :----------- |
| buyID | string | 买单id       |
| fee   | int64  | 交易的手续费 |

**响应报文：**

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

**参数说明：**

| 参数   | 类型   | 说明                       |
| :----- | :----- | :------------------------- |
| result | string | 交易十六进制编码后的字符串 |

## 15 根据状态分页列出某地址的订单（包括买单卖单） GetOnesOrderWithStatus

**请求报文：**

```
{
    "id" :int32 ,
    "method" : "Chain33.Query",
    "params":[
        {
            "execer" : "trade",
            "funcName" : "GetOnesOrderWithStatus",
            "payload" : {
                "status":int32,
                "addr" : "string",
                "direction":int32,
                "count" : int32,
                "fromKey" : "string"
            }
        }
    ]
}
```

**参数说明：**

| 参数      | 类型     | 是否必选 | 说明                                                         |
| :-------- | :------- | :------- | :----------------------------------------------------------- |
| addr      | string   | 是       | 指定地址                                                     |
| token     | []string | 否       | 具体的token的标识符，可以是多个                              |
| status    | int32    | 是       | 1: 未完成交易， 2： 完成的交易， 3： 撤销的交易              |
| direction | int32    | 否       | 查询的方向,0 按高度降序， 1 按高度升序                       |
| count     | int32    | 否       | 最多取的数量                                                 |
| fromKey   | string   | 否       | 开始查询的主键,第一页时不指定。 其他页时，指定上一页的最后一个key |

**响应报文：**

```
{
    "id":int32,
    "result": {
        "orders" : [
            {
                "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,
                "assetExec":"string",
                "priceExec":"string",
                "priceSymbol":"string"
            }
        ]
    },
    "error":null
}
```

result: 对应列表，各项同1.1。