2020-01-08 18:53:47 +03:00
|
|
|
|
# Grin Stratum RPC 协议
|
|
|
|
|
|
2020-09-10 16:45:14 +03:00
|
|
|
|
*阅读其它语言版本: [Korean](../stratum_KR.md),[English](stratum.md).*
|
2020-01-08 18:53:47 +03:00
|
|
|
|
|
|
|
|
|
本文说明在 Grin 部署目前的 Stratum RPC 协议。
|
|
|
|
|
|
|
|
|
|
## 目录
|
|
|
|
|
|
|
|
|
|
1. [信息](#messages)
|
|
|
|
|
1. [获得工作模板](#getjobtemplate)
|
|
|
|
|
1. [工作](#job)
|
|
|
|
|
1. [保持在线](#keepalive)
|
|
|
|
|
1. [登录](#login)
|
|
|
|
|
1. [状态](#status)
|
|
|
|
|
1. [提交](#submit)
|
|
|
|
|
1. [错误信息](#error-messages)
|
|
|
|
|
1. [矿工行为](#miner-behavior)
|
|
|
|
|
1. [参考部署](#reference-implementation)
|
|
|
|
|
|
|
|
|
|
## 信息
|
|
|
|
|
|
|
|
|
|
本节我们讨论每种信息和可能的回复。
|
|
|
|
|
|
|
|
|
|
如果矿工随时最初以下请求(登录除外),且需要登录,矿工会收到以下错误信息。
|
|
|
|
|
|
|
|
|
|
| 栏位 | 内容 |
|
|
|
|
|
| :------ | :--------------------------------------- |
|
|
|
|
|
| id | ID of the request(提出请求的 ID) |
|
|
|
|
|
| jsonrpc | "2.0" |
|
|
|
|
|
| method | method sent by the miner(矿工发送方法) |
|
|
|
|
|
| error | {"code":-32500,"message":"login first"} |
|
|
|
|
|
|
|
|
|
|
范例:
|
|
|
|
|
|
|
|
|
|
```JSON
|
2020-09-10 16:45:14 +03:00
|
|
|
|
{
|
2020-01-08 18:53:47 +03:00
|
|
|
|
"id":"10",
|
|
|
|
|
"jsonrpc":"2.0",
|
|
|
|
|
"method":"getjobtemplate",
|
2020-09-10 16:45:14 +03:00
|
|
|
|
"error":{
|
2020-01-08 18:53:47 +03:00
|
|
|
|
"code":-32500,
|
|
|
|
|
"message":"login first"
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
如果不是如下请求,stratum 服务器会返回错误回复:
|
|
|
|
|
|
|
|
|
|
| Field | Content |
|
|
|
|
|
| :------ | :------------------------------------------- |
|
|
|
|
|
| id | ID of the request |
|
|
|
|
|
| jsonrpc | "2.0" |
|
|
|
|
|
| method | method sent by the miner |
|
|
|
|
|
| error | {"code":-32601,"message":"Method not found"} |
|
|
|
|
|
|
|
|
|
|
范例:
|
|
|
|
|
|
|
|
|
|
```JSON
|
2020-09-10 16:45:14 +03:00
|
|
|
|
{
|
2020-01-08 18:53:47 +03:00
|
|
|
|
"id":"10",
|
|
|
|
|
"jsonrpc":"2.0",
|
|
|
|
|
"method":"getgrins",
|
2020-09-10 16:45:14 +03:00
|
|
|
|
"error":{
|
2020-01-08 18:53:47 +03:00
|
|
|
|
"code":-32601,
|
|
|
|
|
"message":"Method not found"
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### `getjobtemplate`
|
|
|
|
|
|
|
|
|
|
矿工发起的信息。
|
|
|
|
|
矿工可以这一信息申请工作。
|
|
|
|
|
|
|
|
|
|
#### 请求
|
|
|
|
|
|
|
|
|
|
| Field栏位 | Content |
|
|
|
|
|
| :-------- | :---------------- |
|
|
|
|
|
| id | ID of the request |
|
|
|
|
|
| jsonrpc | "2.0" |
|
|
|
|
|
| method | "getjobtemplate" |
|
|
|
|
|
| params | null |
|
|
|
|
|
|
|
|
|
|
范例:
|
|
|
|
|
|
|
|
|
|
``` JSON
|
2020-09-10 16:45:14 +03:00
|
|
|
|
{
|
2020-01-08 18:53:47 +03:00
|
|
|
|
"id":"2",
|
|
|
|
|
"jsonrpc":"2.0",
|
|
|
|
|
"method":"getjobtemplate",
|
|
|
|
|
"params":null
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
#### 回复
|
|
|
|
|
|
|
|
|
|
回复可分为两种类型:
|
|
|
|
|
|
|
|
|
|
##### 确认回复
|
|
|
|
|
|
|
|
|
|
范例:
|
|
|
|
|
|
|
|
|
|
``` JSON
|
2020-09-10 16:45:14 +03:00
|
|
|
|
{
|
2020-01-08 18:53:47 +03:00
|
|
|
|
"id":"0",
|
|
|
|
|
"jsonrpc":"2.0",
|
|
|
|
|
"method":"getjobtemplate",
|
2020-09-10 16:45:14 +03:00
|
|
|
|
"result":{
|
2020-01-08 18:53:47 +03:00
|
|
|
|
"difficulty":1,
|
|
|
|
|
"height":13726,
|
|
|
|
|
"job_id":4,
|
|
|
|
|
"pre_pow":"00010000000000003c4d0171369781424b39c81eb39de10cdf4a7cc27bbc6769203c7c9bc02cc6a1dfc6000000005b50f8210000000000395f123c6856055aab2369fe325c3d709b129dee5c96f2db60cdbc0dc123a80cb0b89e883ae2614f8dbd169888a95c0513b1ac7e069de82e5d479cf838281f7838b4bf75ea7c9222a1ad7406a4cab29af4e018c402f70dc8e9ef3d085169391c78741c656ec0f11f62d41b463c82737970afaa431c5cabb9b759cdfa52d761ac451276084366d1ba9efff2db9ed07eec1bcd8da352b32227f452dfa987ad249f689d9780000000000000b9e00000000000009954"
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
##### 错误回复
|
|
|
|
|
|
|
|
|
|
如果节点在同步,会发送如下信息:
|
|
|
|
|
|
|
|
|
|
| Field | Content |
|
|
|
|
|
| :------------ | :-------------------------------------------------------- |
|
|
|
|
|
| id | ID of the request |
|
|
|
|
|
| jsonrpc | "2.0" |
|
|
|
|
|
| method | "getjobtemplate" |
|
|
|
|
|
| error | {"code":-32701,"message":"Node is syncing - Please wait"} |
|
|
|
|
|
|
|
|
|
|
范例:
|
|
|
|
|
|
|
|
|
|
```JSON
|
2020-09-10 16:45:14 +03:00
|
|
|
|
{
|
2020-01-08 18:53:47 +03:00
|
|
|
|
"id":"10",
|
|
|
|
|
"jsonrpc":"2.0",
|
|
|
|
|
"method":"getjobtemplate",
|
2020-09-10 16:45:14 +03:00
|
|
|
|
"error":{
|
2020-01-08 18:53:47 +03:00
|
|
|
|
"code":-32000,
|
|
|
|
|
"message":"Node is syncing - Please wait"
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 工作
|
|
|
|
|
|
|
|
|
|
Stratum 服务器发起新消息。Stratum 服务器会自动发送工作给连接的矿工。如果 `job_id = 0` 矿工应该切断目前的工作,并且目前的图形完成后用这一个代替现有工作。
|
|
|
|
|
|
|
|
|
|
#### 请求
|
|
|
|
|
|
|
|
|
|
| Field | Content |
|
|
|
|
|
| :------------ | :------------------------------------------------------------------------- |
|
|
|
|
|
| id | ID of the request |
|
|
|
|
|
| jsonrpc | "2.0" |
|
|
|
|
|
| method | "job" |
|
|
|
|
|
| params | Int `difficulty`, `height`, `job_id` and string `pre_pow` |
|
|
|
|
|
|
|
|
|
|
范例:
|
|
|
|
|
|
|
|
|
|
``` JSON
|
2020-09-10 16:45:14 +03:00
|
|
|
|
{
|
2020-01-08 18:53:47 +03:00
|
|
|
|
"id":"Stratum",
|
|
|
|
|
"jsonrpc":"2.0",
|
|
|
|
|
"method":"job",
|
2020-09-10 16:45:14 +03:00
|
|
|
|
"params":{
|
2020-01-08 18:53:47 +03:00
|
|
|
|
"difficulty":1,
|
|
|
|
|
"height":16375,
|
|
|
|
|
"job_id":5,
|
|
|
|
|
"pre_pow":"00010000000000003ff723bc8c987b0c594794a0487e52260c5343288749c7e288de95a80afa558c5fb8000000005b51f15f00000000003cadef6a45edf92d2520bf45cbd4f36b5ef283c53d8266bbe9aa1b8daaa1458ce5578fcb0978b3995dd00e3bfc5a9277190bb9407a30d66aec26ff55a2b50214b22cdc1f3894f27374f568b2fe94d857b6b3808124888dd5eff7e8de7e451ac805a4ebd6551fa7a529a1b9f35f761719ed41bfef6ab081defc45a64a374dfd8321feac083741f29207b044071d93904986fa322df610e210c543c2f95522c9bdaef5f598000000000000c184000000000000a0cf"
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
#### 回复
|
|
|
|
|
|
|
|
|
|
本消息不需要回复
|
|
|
|
|
|
|
|
|
|
### 保持在线
|
|
|
|
|
|
|
|
|
|
为保持在线,矿工发起消息。
|
|
|
|
|
|
|
|
|
|
#### 请求
|
|
|
|
|
|
|
|
|
|
| Field | Content |
|
|
|
|
|
| :------------ | :--------------------- |
|
|
|
|
|
| id | ID of the request |
|
|
|
|
|
| jsonrpc | "2.0" |
|
|
|
|
|
| method | "keepalive" |
|
|
|
|
|
| params | null |
|
|
|
|
|
|
|
|
|
|
范例:
|
|
|
|
|
|
|
|
|
|
``` JSON
|
2020-09-10 16:45:14 +03:00
|
|
|
|
{
|
2020-01-08 18:53:47 +03:00
|
|
|
|
"id":"2",
|
|
|
|
|
"jsonrpc":"2.0",
|
|
|
|
|
"method":"keepalive",
|
|
|
|
|
"params":null
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
#### 回复
|
|
|
|
|
|
|
|
|
|
| Field | Content |
|
|
|
|
|
| :------------ | :----------------------------- |
|
|
|
|
|
| id | ID of the request |
|
|
|
|
|
| jsonrpc | "2.0" |
|
|
|
|
|
| method | "keepalive" |
|
|
|
|
|
| result | "ok" |
|
|
|
|
|
| error | null |
|
|
|
|
|
|
|
|
|
|
范例:
|
|
|
|
|
|
|
|
|
|
``` JSON
|
2020-09-10 16:45:14 +03:00
|
|
|
|
{
|
2020-01-08 18:53:47 +03:00
|
|
|
|
"id":"2",
|
|
|
|
|
"jsonrpc":"2.0",
|
|
|
|
|
"method":"keepalive",
|
|
|
|
|
"result":"ok",
|
|
|
|
|
"error":null
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 登录
|
|
|
|
|
|
|
|
|
|
***
|
|
|
|
|
|
|
|
|
|
矿工发起消息。矿工用用户名、密码和代理(通常由矿工程序设置)登录 Grin Stratum 服务器。
|
|
|
|
|
|
|
|
|
|
#### 请求
|
|
|
|
|
|
|
|
|
|
| Field | Content |
|
|
|
|
|
| :------------ | :----------------------------- |
|
|
|
|
|
| id | ID of the request |
|
|
|
|
|
| jsonrpc | "2.0" |
|
|
|
|
|
| method | "login" |
|
|
|
|
|
| params | Strings: login, pass and agent |
|
|
|
|
|
|
|
|
|
|
范例:
|
|
|
|
|
|
|
|
|
|
``` JSON
|
|
|
|
|
|
2020-09-10 16:45:14 +03:00
|
|
|
|
{
|
2020-01-08 18:53:47 +03:00
|
|
|
|
"id":"0",
|
|
|
|
|
"jsonrpc":"2.0",
|
|
|
|
|
"method":"login",
|
2020-09-10 16:45:14 +03:00
|
|
|
|
"params":{
|
2020-01-08 18:53:47 +03:00
|
|
|
|
"login":"login",
|
|
|
|
|
"pass":"password",
|
|
|
|
|
"agent":"grin-miner"
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
#### 回复
|
|
|
|
|
|
|
|
|
|
回复可为两种类型:
|
|
|
|
|
|
|
|
|
|
##### 确认回复
|
|
|
|
|
|
|
|
|
|
| Field | Content |
|
|
|
|
|
| :------------ | :----------------------------- |
|
|
|
|
|
| id | ID of the request |
|
|
|
|
|
| jsonrpc | "2.0" |
|
|
|
|
|
| method | "login" |
|
|
|
|
|
| result | "ok" |
|
|
|
|
|
| error | null |
|
|
|
|
|
|
|
|
|
|
范例:
|
|
|
|
|
|
|
|
|
|
``` JSON
|
2020-09-10 16:45:14 +03:00
|
|
|
|
{
|
2020-01-08 18:53:47 +03:00
|
|
|
|
"id":"1",
|
|
|
|
|
"jsonrpc":"2.0",
|
|
|
|
|
"method":"login",
|
|
|
|
|
"result":"ok",
|
|
|
|
|
"error":null
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
##### 错误回复
|
|
|
|
|
|
|
|
|
|
未部署。应该返回`error -32500`,若需要登录,“首先登录”。
|
|
|
|
|
|
|
|
|
|
### 状态
|
|
|
|
|
|
|
|
|
|
矿工发起消息。本消息允许矿工获得目前矿工和网络状态。
|
|
|
|
|
|
|
|
|
|
#### 请求
|
|
|
|
|
|
|
|
|
|
| Field | Content |
|
|
|
|
|
| :------------ | :--------------------- |
|
|
|
|
|
| id | ID of the request |
|
|
|
|
|
| jsonrpc | "2.0" |
|
|
|
|
|
| method | "status" |
|
|
|
|
|
| params | null |
|
|
|
|
|
|
|
|
|
|
范例:
|
|
|
|
|
|
|
|
|
|
``` JSON
|
2020-09-10 16:45:14 +03:00
|
|
|
|
{
|
2020-01-08 18:53:47 +03:00
|
|
|
|
"id":"2",
|
|
|
|
|
"jsonrpc":"2.0",
|
|
|
|
|
"method":"status",
|
|
|
|
|
"params":null
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
#### 回复
|
|
|
|
|
|
|
|
|
|
回复如下
|
|
|
|
|
|
|
|
|
|
| Field | Content |
|
|
|
|
|
| :------------ | :------------------------------------------------------------------------------------------------------- |
|
|
|
|
|
| id | ID of the request |
|
|
|
|
|
| jsonrpc | "2.0" |
|
|
|
|
|
| method | "status" |
|
|
|
|
|
| result | String `id`. Integers `height`, `difficulty`, `accepted`, `rejected` and `stale` |
|
|
|
|
|
| error | null |
|
|
|
|
|
|
|
|
|
|
范例:
|
|
|
|
|
|
|
|
|
|
```JSON
|
2020-09-10 16:45:14 +03:00
|
|
|
|
{
|
2020-01-08 18:53:47 +03:00
|
|
|
|
"id":"5",
|
|
|
|
|
"jsonrpc":"2.0",
|
|
|
|
|
"method":"status",
|
2020-09-10 16:45:14 +03:00
|
|
|
|
"result":{
|
2020-01-08 18:53:47 +03:00
|
|
|
|
"id":"5",
|
|
|
|
|
"height":13726,
|
|
|
|
|
"difficulty":1,
|
|
|
|
|
"accepted":0,
|
|
|
|
|
"rejected":0,
|
|
|
|
|
"stale":0
|
|
|
|
|
},
|
|
|
|
|
"error":null
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 提交
|
|
|
|
|
|
|
|
|
|
矿工发起消息。矿工挖到一份,会提交给节点。
|
|
|
|
|
|
|
|
|
|
#### 请求
|
|
|
|
|
|
|
|
|
|
矿工向 Stratum 服务器提交工作解决方案。
|
|
|
|
|
|
|
|
|
|
| Field | Content |
|
|
|
|
|
| :------------ | :-------------------------------------------------------------------------- |
|
|
|
|
|
| id | ID of the request |
|
|
|
|
|
| jsonrpc | "2.0" |
|
|
|
|
|
| method | "submit" |
|
|
|
|
|
| params | Int `edge_bits`,`nonce`, `height`, `job_id` and array of integers `pow` |
|
|
|
|
|
|
|
|
|
|
范例:
|
|
|
|
|
|
|
|
|
|
``` JSON
|
|
|
|
|
{
|
|
|
|
|
"id":"0",
|
|
|
|
|
"jsonrpc":"2.0",
|
|
|
|
|
"method":"submit",
|
|
|
|
|
"params":{
|
|
|
|
|
"edge_bits":29,
|
|
|
|
|
"height":16419,
|
|
|
|
|
"job_id":0,
|
|
|
|
|
"nonce":8895699060858340771,
|
2020-09-10 16:45:14 +03:00
|
|
|
|
"pow":[
|
2020-01-08 18:53:47 +03:00
|
|
|
|
4210040,10141596,13269632,24291934,28079062,84254573,84493890,100560174,100657333,120128285,130518226,140371663,142109188,159800646,163323737,171019100,176840047,191220010,192245584,198941444,209276164,216952635,217795152,225662613,230166736,231315079,248639876,263910393,293995691,298361937,326412694,330363619,414572127,424798984,426489226,466671748,466924466,490048497,495035248,496623057,502828197, 532838434
|
|
|
|
|
]
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
#### 回复
|
|
|
|
|
|
|
|
|
|
回复可为三种类型。
|
|
|
|
|
|
|
|
|
|
##### 确认回复
|
|
|
|
|
|
|
|
|
|
Stratum 接受份额,但不是目前网络目标难度的有效 cuck(at)oo 解决方案。
|
|
|
|
|
|
|
|
|
|
| Field | Content |
|
|
|
|
|
| :------------ | :----------------------------- |
|
|
|
|
|
| id | ID of the request |
|
|
|
|
|
| jsonrpc | "2.0" |
|
|
|
|
|
| method | "submit" |
|
|
|
|
|
| result | "ok" |
|
|
|
|
|
| error | null |
|
|
|
|
|
|
|
|
|
|
范例:
|
|
|
|
|
|
|
|
|
|
``` JSON
|
2020-09-10 16:45:14 +03:00
|
|
|
|
{
|
2020-01-08 18:53:47 +03:00
|
|
|
|
"id":"2",
|
|
|
|
|
"jsonrpc":"2.0",
|
|
|
|
|
"method":"submit",
|
|
|
|
|
"result":"ok",
|
|
|
|
|
"error":null
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
##### 发现区块回复
|
|
|
|
|
|
|
|
|
|
份额被 Stratum 接受,是目前网络目标难度的有效 cuck(at)oo 解决方案。
|
|
|
|
|
|
|
|
|
|
| Field | Content |
|
|
|
|
|
| :------------ | :----------------------------- |
|
|
|
|
|
| id | ID of the request |
|
|
|
|
|
| jsonrpc | "2.0" |
|
|
|
|
|
| method | "submit" |
|
|
|
|
|
| result | "block - " + hash of the block |
|
|
|
|
|
| error | null |
|
|
|
|
|
|
|
|
|
|
范例:
|
|
|
|
|
|
|
|
|
|
``` JSON
|
2020-09-10 16:45:14 +03:00
|
|
|
|
{
|
2020-01-08 18:53:47 +03:00
|
|
|
|
"id":"6",
|
|
|
|
|
"jsonrpc":"2.0",
|
|
|
|
|
"method":"submit",
|
|
|
|
|
"result":"blockfound - 23025af9032de812d15228121d5e4b0e977d30ad8036ab07131104787b9dcf10",
|
|
|
|
|
"error":null
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
##### 错误回复
|
|
|
|
|
|
|
|
|
|
错误回复有两种类型:过期和被拒绝。
|
|
|
|
|
|
|
|
|
|
##### 过期份额错误回复
|
|
|
|
|
|
|
|
|
|
份额是上一工作而不是目前工作的有效解决方案。
|
|
|
|
|
|
|
|
|
|
| Field | Content |
|
|
|
|
|
| :------------ | :-------------------------------------------------------- |
|
|
|
|
|
| id | ID of the request |
|
|
|
|
|
| jsonrpc | "2.0" |
|
|
|
|
|
| method | "submit" |
|
|
|
|
|
| error | {"code":-32503,"message":"Solution submitted too late"} |
|
|
|
|
|
|
|
|
|
|
范例:
|
|
|
|
|
|
|
|
|
|
```JSON
|
2020-09-10 16:45:14 +03:00
|
|
|
|
{
|
2020-01-08 18:53:47 +03:00
|
|
|
|
"id":"5",
|
|
|
|
|
"jsonrpc":"2.0",
|
|
|
|
|
"method":"submit",
|
2020-09-10 16:45:14 +03:00
|
|
|
|
"error":{
|
2020-01-08 18:53:47 +03:00
|
|
|
|
"code":-32503,
|
|
|
|
|
"message":"Solution submitted too late"
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
##### 拒绝份额错误回复
|
|
|
|
|
|
|
|
|
|
两种可能:解决方案无效或解决方案难度太低。
|
|
|
|
|
|
|
|
|
|
###### 未能验证解决方案错误
|
|
|
|
|
|
|
|
|
|
提交的解决方案无法验证。
|
|
|
|
|
|
|
|
|
|
| Field | Content |
|
|
|
|
|
| :------------ | :-------------------------------------------------------- |
|
|
|
|
|
| id | ID of the request |
|
|
|
|
|
| jsonrpc | "2.0" |
|
|
|
|
|
| method | "submit" |
|
|
|
|
|
| error | {"code":-32502,"message":"Failed to validate solution"} |
|
|
|
|
|
|
|
|
|
|
范例:
|
|
|
|
|
|
|
|
|
|
```JSON
|
2020-09-10 16:45:14 +03:00
|
|
|
|
{
|
2020-01-08 18:53:47 +03:00
|
|
|
|
"id":"5",
|
|
|
|
|
"jsonrpc":"2.0",
|
|
|
|
|
"method":"submit",
|
2020-09-10 16:45:14 +03:00
|
|
|
|
"error":{
|
2020-01-08 18:53:47 +03:00
|
|
|
|
"code":-32502,
|
|
|
|
|
"message":"Failed to validate solution"
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
###### 因低难度错误份额拒绝
|
|
|
|
|
|
|
|
|
|
提交的解决方案难度太低。
|
|
|
|
|
|
|
|
|
|
| Field | Content |
|
|
|
|
|
| :------------ | :--------------------------------------------------------------- |
|
|
|
|
|
| id | ID of the request |
|
|
|
|
|
| jsonrpc | "2.0" |
|
|
|
|
|
| method | "submit" |
|
|
|
|
|
| error | {"code":-32501,"message":"Share rejected due to low difficulty"} |
|
|
|
|
|
|
|
|
|
|
范例:
|
|
|
|
|
|
|
|
|
|
```JSON
|
2020-09-10 16:45:14 +03:00
|
|
|
|
{
|
2020-01-08 18:53:47 +03:00
|
|
|
|
"id":"5",
|
|
|
|
|
"jsonrpc":"2.0",
|
|
|
|
|
"method":"submit",
|
2020-09-10 16:45:14 +03:00
|
|
|
|
"error":{
|
2020-01-08 18:53:47 +03:00
|
|
|
|
"code":-32501,
|
|
|
|
|
"message":"Share rejected due to low difficulty"
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## 错误信息
|
|
|
|
|
|
|
|
|
|
Grin Stratum 协议部署包含以下错误信息:
|
|
|
|
|
|
|
|
|
|
| Error code | Error Message |
|
|
|
|
|
| :---------- | :------------------------------------- |
|
|
|
|
|
| -32000 | Node is syncing - please wait |
|
|
|
|
|
| -32500 | Login first |
|
|
|
|
|
| -32501 | Share rejected due to low difficulty |
|
|
|
|
|
| -32502 | Failed to validate solution |
|
|
|
|
|
| -32503 | Solution Submitted too late |
|
|
|
|
|
| -32600 | Invalid Request |
|
|
|
|
|
| -32601 | Method not found |
|
|
|
|
|
|
|
|
|
|
## 矿工行为准则
|
|
|
|
|
|
|
|
|
|
矿工须遵守以下规则:
|
|
|
|
|
|
|
|
|
|
- 矿工开始挖矿前需要随机算工作随机数
|
|
|
|
|
- 矿工必须一直进行相同工作,直到服务器发送新的,尽管矿工有可能随时申请工作
|
|
|
|
|
- 矿工不得从服务器给工作请求发送 RPC 回复
|
|
|
|
|
- 矿工可设置 RPC "id" 并获得回复
|
|
|
|
|
- 矿工可发送保持在线信息
|
|
|
|
|
- 矿工可发送登录请求(确认哪个矿工在历史记录发现份额 / 解决方案),登录请求必须有三个参数
|
|
|
|
|
- 矿工提交信息必须提供 job_id
|
|
|
|
|
|
|
|
|
|
## 部署参考
|
|
|
|
|
|
|
|
|
|
挖矿部署请参阅:[mimblewimble/grin-miner](https://github.com/mimblewimble/grin-miner/blob/master/src/bin/client.rs)
|