grin/doc/translations/stratum_ZH-CN.md
Paouky dfd0a649c7
Organize doc files (#3436)
* 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>
2020-09-10 09:45:14 -04:00

15 KiB
Raw Permalink Blame History

Grin Stratum RPC 协议

阅读其它语言版本: KoreanEnglish.

本文说明在 Grin 部署目前的 Stratum RPC 协议。

目录

  1. 信息
    1. 获得工作模板
    2. 工作
    3. 保持在线
    4. 登录
    5. 状态
    6. 提交
  2. 错误信息
  3. 矿工行为
  4. 参考部署

信息

本节我们讨论每种信息和可能的回复。

如果矿工随时最初以下请求(登录除外),且需要登录,矿工会收到以下错误信息。

栏位 内容
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