## 挖矿接口


### 1 获取执行器地址 ConvertExectoAddr

迁移到[执行器接口](./executorAPI.md)

### 2 绑定挖矿地址 CreateBindMiner

**请求报文：**

```
{
    "jsonrpc":"2.0",
    "id":int32,
    "method":"ticket.CreateBindMiner",
    "params":{
        "bindAddr":"string",
        "originAddr":"string",
        "amount":int64,
        "checkBalance":bool
    }
}
```

**参数说明：**

| 参数         | 类型   | 是否必填 | 说明                    |
| :----------- | :----- | :------- | :---------------------- |
| bindAddr     | string | 是       | 挖矿绑定地址            |
| originAddr   | string | 是       | 原始地址                |
| amount       | int64  | 是       | 用于购买ticket的bty数量 |
| checkBalance | bool   | 是       | 是否进行额度检查        |

**响应报文：**

```
{
    "id":int32,
    "result":[
        {
            "txhex":"string"
        }
    ]
}
```

**参数说明：**

| 参数  | 类型   | 说明               |
| :---- | :----- | :----------------- |
| txhex | string | 交易十六进制字符串 |

### 3 设置自动挖矿 SetAutoMining

**请求报文：**

```
{
    "jsonrpc":"2.0",
    "id":int32,
    "method":"ticket.SetAutoMining",
    "params":[
        {
            "flag":int32
        }
    ]
}
```

**参数说明：**

| 参数    | 类型  | 是否必填 | 说明                                         |
| :------ | :---- | :------- | :------------------------------------------- |
| flag    | int32 | 是       | 标识符，1 为开启自动挖矿，0 为关闭自动挖矿。 |
| reserve | int64 | 非       | 保留字段                                     |

**响应报文：**

```
{
    "id":int32,
    "result":[
         {
             "isOK":true,
             "msg":""
         }
    ],
    "error":null
}
```

**参数说明：**

| 参数 | 类型   | 说明                                      |
| :--- | :----- | :---------------------------------------- |
| isok | bool   | 在成功时，返回 true；失败时，返回 false。 |
| msg  | string | 在成功时，为空；失败时，返回错误信息。    |

### 4 获取Ticket的数量 GetTicketCount

**请求报文：**

```
{
    "jsonrpc":"2.0",
    "id":int32,
    "method":"ticket.GetTicketCount",
    "params":[]
}
```

**参数说明：**

| 参数 | 类型 | 是否必填 | 说明 |
| :--- | :--- | :------- | :--- |
|      |      |          |      |

**响应报文：**

```
{
    "id":int32,
    "result":int64
}
```

**参数说明：**

| 参数   | 类型  | 说明             |
| :----- | :---- | :--------------- |
| result | int64 | 返回ticket的数量 |

### 5 获取绑定的挖矿地址

**请求报文：**

```
{
    "method":"Chain33.Query",
    "params":[
        {
            "execer":"ticket",
            "funcName":"MinerAddress",
            "payload":{
                "data":"1NNaYHkscJaLJ2wUrFNeh6cQXBS4TrFYeB"
            }
        }
    ]
}
```

**参数说明：**

| 参数     | 类型   | 是否必填 | 说明                                       |
| :------- | :----- | :------- | :----------------------------------------- |
| execer   | []byte | 是       | 执行器名称                                 |
| funcName | string | 是       | 调用函数名:MinerAddress,获取绑定的挖矿地址 |
| payload  | []byte | 是       | 函数参数,data:冷钱包地址                   |

**响应报文：**

```
{
    "id":null,
    "result":{
        "data":"12HKLEn6g4FH39yUbHh4EVJWcFo5CXg22d"
    },
    "error":null
}
```

**参数说明：**

| 参数   | 类型 | 说明         |
| :----- | :--- | :----------- |
| result | data | 返回挖矿地址 |

### 6 获取矿工地址的对应的冷钱包地址

**请求报文：**

```
 {
        "method":"Chain33.Query",
        "params":[
            {
                "execer":"ticket",
                "funcName":"MinerSourceList",
                "payload":{
                    "data":"12HKLEn6g4FH39yUbHh4EVJWcFo5CXg22d"
                }
            }
        ]
}
```

**参数说明：**

| 参数     | 类型   | 是否必填 | 说明                                                  |
| :------- | :----- | :------- | :---------------------------------------------------- |
| execer   | []byte | 是       | 执行器名称                                            |
| funcName | string | 是       | 调用函数名:MinerSourceList,矿工地址的对应的冷钱包地址 |
| payload  | []byte | 是       | 函数参数,data:矿工地址                                |

**响应报文：**

```
{
    "id":null,
    "result":{
        "datas":[
            "1NNaYHkscJaLJ2wUrFNeh6cQXBS4TrFYeB"
        ]
    },
    "error":null
}
```

**参数说明：**

| 参数   | 类型  | 说明           |
| :----- | :---- | :------------- |
| result | datas | 冷钱包地址列表 |

### 7 关闭指定账户绑定的tickets

**请求报文：可以填空参数close所有当前钱包账户绑定的ticket**

```
{
  "method":"ticket.CloseTickets",
  "params":[
      {
          "minerAddress":"12HKLEn6g4FH39yUbHh4EVJWcFo5CXg22d",
      }
  ]
}
```

**参数说明：**

| 参数         | 类型     | 是否必填 | 说明                                  |
| :----------- | :------- | :------- | :------------------------------------ |
| minerAddress | string   | 否       | 可以指定账户来只关闭与之绑定的tickets |
| ticketId     | []string | 否       | ticketId                              |

**响应报文：**

```
{
    "id":null,
    "result":{
        "hashes":[] string
    },
    "error":null
}
```

**参数说明：**

| 参数   | 类型     | 说明           |
| :----- | :------- | :------------- |
| hashes | []string | ticket地址列表 |

### 8 构造买票交易 ticket open

**请求报文：**

```
{
    "jsonrpc":"2.0",
    "id":int32,
    "method":"Chain33.CreateTransaction",
    "params":[{"execer" : "string", "actionName" : "string", "payload" : {"minerAddress" : "string", "returnAddress" : "string", "count": int32, "randSeed" : int64, "pubHashes" : ["string"]} }]
}
```

**参数说明：**

| 参数          | 类型       | 是否必填 | 说明                                                         |
| :------------ | :--------- | :------- | :----------------------------------------------------------- |
| execer        | string     | 是       | ticket                                                       |
| actionName    | string     | 是       | Topen                                                        |
| payload       | 结构体     | 是       | Topen需要的参数                                              |
| minerAddress  | string     | 是       | 挖矿地址                                                     |
| returnAddress | string     | 是       | 收益地址，(非委托挖矿时，和挖矿地址一致)                     |
| count         | int32      | 是       | 买票数量                                                     |
| randSeed      | int64      | 否       | 随机数种子                                                   |
| pubHashes     | 字符串数组 | 是       | 数组长度为count, 每个pubHash 用随机的源字符串通过SHA256算法生成。 挖矿时需要公布生成pubHash的源字符串，源字符串用于生成链上随机数 |

注意：

1. 实现需要保留生成的pubHash的源字符串， 一般将这个功能集成到钱包， 由钱包来管理的随机字符串

**响应报文：**

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

**参数说明：**

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

### 9 构造挖矿交易 ticket miner

1. 由于挖矿交易放在区块的第一个交易， 由挖矿时生成， 不需要构造接口。

