挖礦客戶端和礦池伺服器之間使用的協議
挖礦客戶端與礦池伺服器通信有哪些協議?他們如何比較?
Stratum:伺服器提供客戶端模板,客戶端可以使用這些模板生成自己的工作。僅包含區塊頭和第一筆交易(生成交易)。Stratum 使用所有協議中最少的頻寬。Stratum 還可以在有塊更改時非常快速高效地切換到新的工作數據,這有助於降低陳舊工作造成的拒絕率。與其他協議不同,它不是 HTTP,因此無法通過 HTTP 代理執行。沒有真正的規範。有一個文件解釋了核心功能,其餘的你必須閱讀“分層探勘代理”的原始碼和/或 bitcointalk.org 上的舊文章。
GBT(getblocktemplate):伺服器提供客戶端模板,客戶端可以使用這些模板生成自己的工作。客戶端獲得完整的塊數據,並且(如果伺服器和客戶端支持)這允許客戶端修改塊。例如,礦工可以選擇將哪些交易包含在一個區塊中。由於這些特性,GBT 需要比 Stratum 傳輸更多的數據,因此頻寬使用率更高。據我所知,這些功能在任何地方都不受支持。GBT 通過詳細的規格有很好的記錄。
簡單的getwork:最初進行挖礦的方式。伺服器給客戶端一個區塊頭,沒有任何交易或任何方式來修改區塊,除了 nonce 值。客戶端僅限於嘗試所有可能的 nonce 值,然後需要從伺服器請求更多工作。這導致現代採礦硬體的大量頻寬使用。與 Stratum 一樣,它不會讓礦工控制所開采的內容。你得到了兩全其美。
帶有 rollntime 擴展的 getwork:允許客戶端通過修改塊頭上的時間戳來有限地生成工作。如果您每秒處理 10 個 nonce 範圍(42.9 Ghps),您需要從伺服器請求 10 個塊標頭。隨著每一秒的過去,你更新這些塊頭上的時間戳,允許你在下一秒重用相同的工作。頻寬使用率隨著雜湊率的增加而上升。429 Ghps 需要與伺服器進行 100 次小型請求-響應交換,才能在每次塊更改後獲得足夠的工作。與 GBT 相比,GBT 的頻寬使用量隨著交易量的增加而增加(每個塊更改一次大的請求-響應交換)。哪個使用較少的頻寬取決於您的雜湊率(getwork)和您正在雜湊的塊的大小(GBT)。
TL;DR:getwork 是老辦法。rollntime 擴展使其恢復了活力,但隨著採礦設備變得更快,它不會擴展。有兩種新協議可以改善挖礦:Stratum 專注於低頻寬使用,GBT 專注於允許礦工控制區塊中的內容。