mirror of
https://github.com/mimblewimble/grin.git
synced 2025-01-20 19:11:08 +03:00
dfd0a649c7
* create and occupy translations dir * update translation links * add mimblewimble whitepaper * add p2p_protocol from docs * add validation_logic from docs Co-authored-by: Paouky <Paouky@users.noreply.github.com>
15 KiB
15 KiB
Grin Stratum RPC 协议
本文说明在 Grin 部署目前的 Stratum RPC 协议。
目录
信息
本节我们讨论每种信息和可能的回复。
如果矿工随时最初以下请求(登录除外),且需要登录,矿工会收到以下错误信息。
栏位 | 内容 |
---|---|
id | ID of the request(提出请求的 ID) |
jsonrpc | "2.0" |
method | method sent by the miner(矿工发送方法) |
error | {"code":-32500,"message":"login first"} |
范例:
{
"id":"10",
"jsonrpc":"2.0",
"method":"getjobtemplate",
"error":{
"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"} |
范例:
{
"id":"10",
"jsonrpc":"2.0",
"method":"getgrins",
"error":{
"code":-32601,
"message":"Method not found"
}
}
getjobtemplate
矿工发起的信息。 矿工可以这一信息申请工作。
请求
Field栏位 | Content |
---|---|
id | ID of the request |
jsonrpc | "2.0" |
method | "getjobtemplate" |
params | null |
范例:
{
"id":"2",
"jsonrpc":"2.0",
"method":"getjobtemplate",
"params":null
}
回复
回复可分为两种类型:
确认回复
范例:
{
"id":"0",
"jsonrpc":"2.0",
"method":"getjobtemplate",
"result":{
"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"} |
范例:
{
"id":"10",
"jsonrpc":"2.0",
"method":"getjobtemplate",
"error":{
"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 |
范例:
{
"id":"Stratum",
"jsonrpc":"2.0",
"method":"job",
"params":{
"difficulty":1,
"height":16375,
"job_id":5,
"pre_pow":"00010000000000003ff723bc8c987b0c594794a0487e52260c5343288749c7e288de95a80afa558c5fb8000000005b51f15f00000000003cadef6a45edf92d2520bf45cbd4f36b5ef283c53d8266bbe9aa1b8daaa1458ce5578fcb0978b3995dd00e3bfc5a9277190bb9407a30d66aec26ff55a2b50214b22cdc1f3894f27374f568b2fe94d857b6b3808124888dd5eff7e8de7e451ac805a4ebd6551fa7a529a1b9f35f761719ed41bfef6ab081defc45a64a374dfd8321feac083741f29207b044071d93904986fa322df610e210c543c2f95522c9bdaef5f598000000000000c184000000000000a0cf"
}
}
回复
本消息不需要回复
保持在线
为保持在线,矿工发起消息。
请求
Field | Content |
---|---|
id | ID of the request |
jsonrpc | "2.0" |
method | "keepalive" |
params | null |
范例:
{
"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 |
范例:
{
"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 |
范例:
{
"id":"0",
"jsonrpc":"2.0",
"method":"login",
"params":{
"login":"login",
"pass":"password",
"agent":"grin-miner"
}
}
回复
回复可为两种类型:
确认回复
Field | Content |
---|---|
id | ID of the request |
jsonrpc | "2.0" |
method | "login" |
result | "ok" |
error | null |
范例:
{
"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 |
范例:
{
"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 |
范例:
{
"id":"5",
"jsonrpc":"2.0",
"method":"status",
"result":{
"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 |
范例:
{
"id":"0",
"jsonrpc":"2.0",
"method":"submit",
"params":{
"edge_bits":29,
"height":16419,
"job_id":0,
"nonce":8895699060858340771,
"pow":[
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 |
范例:
{
"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 |
范例:
{
"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"} |
范例:
{
"id":"5",
"jsonrpc":"2.0",
"method":"submit",
"error":{
"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"} |
范例:
{
"id":"5",
"jsonrpc":"2.0",
"method":"submit",
"error":{
"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"} |
范例:
{
"id":"5",
"jsonrpc":"2.0",
"method":"submit",
"error":{
"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