Ethereum stratum mining protocol v1.0.0

revision of this document: R2

  • I. Introduction 簡介
  • II. Concept 概念
  • III. Specifications (RFC) 規(guī)范(RFC)
  • IV. Real world scenario 真實場景
  • V. Planned improvements 增強計劃
  • VI. Contact 聯(lián)系方式

I. 簡介

以太坊沒有正式的stratum協(xié)議。它只支持GetWork,這是一個非常耗資源的問題爽室,因為礦工需要不斷的投票來獲得可能的新工作帘靡。因此玄货,GetWork會影響到礦工和礦池的性能皇钞。由于需要更專業(yè)的以太坊挖礦,出現(xiàn)了幾個專為以太坊的“stratum”版本松捉。這些“stratums”利用了服務器端(礦池端)的GetWork來獲取工作夹界,如果創(chuàng)建此類協(xié)議時采取仔細考慮因素和預防措施,這將是很好的隘世。但這并沒有完成掉盅。這些協(xié)議有以下問題:

  1. 每個礦工/工人都沒有唯一的數(shù)據(jù)。Extranonce被忽略(但仍然被發(fā)送)以舒。每一個礦工都獲取seedhash(每30k塊都是相同的)和headerhash(每個塊都改變)。然后礦工使用這兩個值和自己的Nonce來生成哈希慢哈。礦工可能在做重復的工作(如果他們選擇了相同的Nonce)蔓钟。
  2. 難度冗余。難度在mining.notify消息中作為已命名目標的第三個參數(shù)被發(fā)送卵贱。這是不需要的滥沫,因為礦工們可以通過自己的困難來計算目標哈希。
  3. 整體數(shù)據(jù)冗余键俱。有幾個字段不需要通過網(wǎng)絡發(fā)送兰绣。首先, 如果未使用extranonce,則不必發(fā)送编振。其次,每隔30k個塊更換一次seedhash缀辩,就沒有必要每次挖礦都發(fā)送。第三,正如在第2條中指出的 - 當使用set_difficulty時, 在mining.notify中的目標是多余的踪央。第四,mining.submit實際上只需要發(fā)送一次臀玄。礦池需要驗證Nonce的有效性,并將計算哈希和混合哈希(mixhash)畅蹂。如果刪除所有提及的冗余健无,可以很容易地減少50%以上的帶寬使用。
  4. 與原有slush的stratum規(guī)范相比液斜,有一些不一致的地方累贤。其中一個是ids。Ids應該增加少漆,以便礦池能夠跟蹤接收到的數(shù)據(jù)臼膏。另一件事是HEX標記'0x'從每個字符串字段開始。這也是多余的示损,如果不使用的話讶请,我們將節(jié)省一些帶寬。
  5. 沒有規(guī)范,只有有實現(xiàn)的解決方案項目夺溢。這通常會導致幾個類似的協(xié)議版本;到底發(fā)生了什么论巍。

我們的目標是建立一個可靠的、無冗余的风响、刀槍不入的以太坊stratum挖礦協(xié)議, 它沒有前面指出的這些問題嘉汰。

II. 概念

以太坊的GetWork給我們3個值:

{ ... "result":[
"0x645cf20198c2f3861e947d4f67e3ab63b7b2e24dcc9095bd9123e7b33371f6cc",
"0xabad8f99f3918bf903c6a909d9bbc0fdfa5a2f4b9cb1196175ec825c6610126c",
"0x0000000394427b08175efa9a9eb59b9123e2969bf19bf272b20787ed022fbe6c"
]}

第一個值是headerhash,第二個是seedhash, 第三個是目標。 Seedhash用于識別DAG文件, headerhash和64為Nonce由我們的礦機給我們的哈希選擇出, 如果低于提供的目標状勤,則提供塊/共享鞋怀。

由于Nonce的寬度為64位(8字節(jié)),并且考慮到非常糟糕的可能情況持搜,以太坊在5分鐘內(nèi)沒有發(fā)現(xiàn)一個塊密似,8個字節(jié)的Nonce能夠提升礦機的速度到:

    (2^64 / 300) / 1G ~ 61,489,147 GH/s

這是一個非常大的數(shù)字,所以我們可以很容易地考慮為我們的stratum協(xié)議拿走一些字節(jié)葫盼。

---------------------------------------
| Bytes | Max supported hashing speed |
|   8   |        ~61,489,147.000 GH/s |
|   7   |           ~240,192.000 GH/s |
|   6   |               ~938.000 GH/s |
|   5   |                 ~3.665 GH/s |
|   4   |                 ~0.014 GH/s |
---------------------------------------

只有4個字節(jié)的Nonce不是一個選項残腌,因為我們已經(jīng)有了能夠達到14 MH/s以上的礦工。5個字節(jié)的Nonce寬度允許最大速度為3.665 GH/s贫导,在相當長的時間內(nèi)是足夠的抛猫,即使ASICs到達。

礦工需要在礦池中得到seedhash孩灯、headerhash闺金、難度和部分nonce(被稱為extranonce)。礦工選擇了它自己的第二部分(稱為minernonce)峰档。Extranonce與minernonce連接败匹,它提供64位的Ethereum nonce。

III. 規(guī)范(RFC)


在礦工到礦池建立TCP連接之后讥巡,就會發(fā)生握手哎壳。礦工首先發(fā)送數(shù)據(jù):

{
  "id": 1,
  "method": "mining.subscribe",
  "params": [
    "MinerName/1.0.0", "EthereumStratum/1.0.0"
  ]
}

第一個參數(shù)是礦工名稱和版本(正如標準stratum協(xié)議)。第二個參數(shù)必須是“Ethereum Stratum/Version”尚卫,版本是根據(jù)該文檔的版本使用的EthereumStratum礦工的版本归榕。如果礦池不支持此版本,它可以終止連接或返回錯誤吱涉。
注意刹泄,礦工可以迭代ids,可以從任何數(shù)字開始怎爵。從礦工到礦池的每條消息都需要有唯一的id給礦工以正確讀取響應特石,因為礦池可能不以FIFO方式處理礦工的消息。

服務器回復:

{
  "id": 1,
  "result": [
    [
      "mining.notify",
      "ae6812eb4cd7735a302a8a9dd95cf71f",
      "EthereumStratum/1.0.0"
    ],
    "080c"
  ],
  "error": null
}

響應幾乎與標準stratum協(xié)議具有以下差異;結(jié)果數(shù)組的第一個參數(shù)的第三個參數(shù)為“EthereumStratum/Version”;如果礦池沒有報告此參數(shù)或版本與礦工支持的不同鳖链,礦工可以預期兼容性問題姆蘸,并終止連接墩莫。結(jié)果數(shù)組的第二個參數(shù)是由礦池設置的extranonce(在十六進制中)。沒有第三個參數(shù)逞敷,因為沒有extranonce2(正如標準stratum)狂秦。Extranonce可能最大3字節(jié)。

礦工應在初次握手時授權(quán);這與標準stratum協(xié)議相同推捐,在這里將不會詳細解釋裂问。

在第一份任務(工作)提供之前,礦池必須通過發(fā)送設置難度:

{
  "id": null,
  "method": "mining.set_difficulty",
  "params": [
    0.5
  ]
}

參數(shù)數(shù)組的第一項是雙重數(shù)據(jù)類型的難度牛柒。難度和目標之間的轉(zhuǎn)換與比特幣一樣;難度1轉(zhuǎn)化為HEX的目標:

00000000ffff0000000000000000000000000000000000000000000000000000

如果礦池在第一份工作之前沒有設置難度堪簿,那么礦工就可以假定難度是1。

當難度發(fā)生變化時皮壁,礦工們開始為每一份到達的NEXT任務使用新的難度椭更。

如果礦工已經(jīng)訂閱extranonce通知(詳細解釋在這里:https://www.nicehash.com/?p=software#devs),然后礦池可能會改變礦工的extranonce通過發(fā)送:

{
  "id": null,
  "method": "mining.set_extranonce",
  "params": [
    "af4c"
  ]
}

新的extranonce對于所有在礦池中發(fā)送的NEXT任務都有效。

礦池通過發(fā)送以下數(shù)據(jù)通知礦工工作(工作):

{
  "id": null,
  "method": "mining.notify",
  "params": [
    "bf0488aa",
    "abad8f99f3918bf903c6a909d9bbc0fdfa5a2f4b9cb1196175ec825c6610126c",
    "645cf20198c2f3861e947d4f67e3ab63b7b2e24dcc9095bd9123e7b33371f6cc",
    true
  ]
}

參數(shù)數(shù)組的第一個參數(shù)是任務ID(必須是任意大小的十六進制數(shù))蛾魄。第二個參數(shù)是seedhash虑瀑。每一個任務都發(fā)送一個seedhash來支持盡可能多的礦池,這可能會很快地在貨幣之間交換畏腕。第三個參數(shù)是headerhash。最后一個參數(shù)是boolean cleanjobs茉稠。如果設為true描馅,那么礦工需要清理任務隊列,并立即開始從事新提供的任務而线,因為所有舊的任務分享都將導致陳舊的分享錯誤铭污。

礦工使用seedhash識別DAG,然后試著帶著headerhash,extranonce和自己的minernonce尋找低于目標的分享(這是由提供的難度而產(chǎn)生的)膀篮。

當發(fā)現(xiàn)低于目標的分享時嘹狞,礦工將其提交給礦池:

{
  "id": 244,
  "method": "mining.submit",
  "params": [
    "username",
    "bf0488aa",
    "6a909d9bbc0f"
  ]
}

參數(shù)數(shù)組的第二個參數(shù)是任務ID,第三個參數(shù)是minernonce誓竿。注意在上面的例子中磅网,minernonce是6個字節(jié),因為提供的extranonce是2個字節(jié)筷屡。如果礦池提供3字節(jié)的extranonce涧偷,那么minernonce必須是5字節(jié)。

對于每一個提交的工作毙死,礦池需要返回標準stratum響應:

{
  "id": 244,
  "result": true,
  "error": null
}

或者如果分享不被接受(標準stratum響應):

{
  "id": 244,
  "result": false,
  "error": [
    -1,
    "Job not found",
    NULL
  ]
}

IV. 真實場景


礦工連接礦池并發(fā)送:

{
  "id": 1,
  "method": "mining.subscribe",
  "params": [
    "EthereumMiner/1.0.0", "EthereumStratum/1.0.0"
  ]
}

礦池響應:

{
  "id": 1,
  "result": [
    [
      "mining.notify",
      "ae6812eb4cd7735a302a8a9dd95cf71f",
      "EthereumStratum/1.0.0"
    ],
    "a2eea0"
  ],
  "error": null
}

礦工然后認證:

{
  "id": 2,
  "method": "mining.authorize",
  "params": [
    "test",
    "password"
  ]
}

礦池確認:

{
  "id": 2,
  "result": true,
  "error": null
}\n

礦池發(fā)送難度:

{
  "id": null,
  "method": "mining.set_difficulty",
  "params": [
    1.0
  ]
}\n

然后任務:

{
  "id": null,
  "method": "mining.notify",
  "params": [
    "bf0488aa",
    "abad8f99f3918bf903c6a909d9bbc0fdfa5a2f4b9cb1196175ec825c6610126c",
    "fc12eb20c58158071c956316cdcd12a22dd8bf126ac4aee559f0ffe4df11f279",
    true
  ]
}\n

過了一段時間燎潮,礦工找到了分享并提交:

{
  "id": 3,
  "method": "mining.submit",
  "params": [
    "test",
    "bf0488aa",
    "cfae7df760"
  ]
}\n

礦池響應:

{
  "id": 3,
  "result": true,
  "error": null
}\n

分享是有效考慮數(shù)據(jù):

seedhash=abad8f99f3918bf903c6a909d9bbc0fdfa5a2f4b9cb1196175ec825c6610126c
headerhash=fc12eb20c58158071c956316cdcd12a22dd8bf126ac4aee559f0ffe4df11f279
nonce=a2eea0cfae7df760

結(jié)果是難度的1.863, 大于1.0.

V. 增強計劃

以太坊有RPC方法eth_getBlockByNumber,它可以返回一些尚未被挖掘的下塊數(shù)據(jù)扼倘。數(shù)據(jù)中有下一個塊號(塊高度)确封。這個數(shù)字可以代替seedhash;然后,每個礦工都將計算自己的seedhash,因此帶寬的使用將會減少更多爪喘。
有一些改造eth_getBlockTemplate方法的計劃颜曾。當這種情況發(fā)生時,這種stratum協(xié)議可能與標準stratum非常相似腥放。

VI. 聯(lián)系方式

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末泛啸,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子秃症,更是在濱河造成了極大的恐慌候址,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件种柑,死亡現(xiàn)場離奇詭異岗仑,居然都是意外死亡,警方通過查閱死者的電腦和手機聚请,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門荠雕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人驶赏,你說我怎么就攤上這事炸卑。” “怎么了煤傍?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵盖文,是天一觀的道長。 經(jīng)常有香客問我蚯姆,道長五续,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任龄恋,我火速辦了婚禮疙驾,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘郭毕。我一直安慰自己它碎,他們只是感情好,可當我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布显押。 她就那樣靜靜地躺著链韭,像睡著了一般。 火紅的嫁衣襯著肌膚如雪煮落。 梳的紋絲不亂的頭發(fā)上敞峭,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天,我揣著相機與錄音蝉仇,去河邊找鬼旋讹。 笑死殖蚕,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的沉迹。 我是一名探鬼主播睦疫,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼鞭呕!你這毒婦竟也來了蛤育?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤葫松,失蹤者是張志新(化名)和其女友劉穎瓦糕,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體腋么,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡咕娄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了珊擂。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片圣勒。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖摧扇,靈堂內(nèi)的尸體忽然破棺而出圣贸,到底是詐尸還是另有隱情,我是刑警寧澤扛稽,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布吁峻,位于F島的核電站,受9級特大地震影響庇绽,放射性物質(zhì)發(fā)生泄漏锡搜。R本人自食惡果不足惜橙困,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一瞧掺、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧凡傅,春花似錦辟狈、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至槽华,卻和暖如春壹蔓,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背猫态。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工佣蓉, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留披摄,地道東北人。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓勇凭,卻偏偏與公主長得像疚膊,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子虾标,可洞房花燭夜當晚...
    茶點故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 簡介 不管你們知不知道以太坊(Ethereum blockchain)是什么寓盗,但是你們大概都聽說過以太坊。最近在新...
    Lilymoana閱讀 3,892評論 1 22