stratumbtctop8888
『壹』 挖礦協議stratum
Stratum 協議於2012年底開發,專為擴展支持礦池挖礦而設計,取代了過時的getwork協議。其最初在Slush's pool's網站公布,隨後BTCGuild提供了備忘單形式的文檔。
在Stratum挖礦過程中,礦機使用subscribe方法連接礦池。連接後,礦機記錄礦池返回的數據,包括用於設置難度值、發送任務、Extranonce1和Extranonce2等信息。Extranonce1和Extranonce2用於增加搜索空間,是挖礦的關鍵元素。
礦機接著使用authorize方法向礦池授權,注冊賬號並添加礦工,礦池允許每個賬號添加任意數量的礦工,並分配錢包地址用於收益分配。某些礦池如F2Pool允許直接使用錢包地址挖礦,此時授權時不需注冊賬號。
礦池通過notify方法分配任務給礦機。任務包括任務號ID、前一個區塊的HASH值、coinbase、merkle_branch、區塊版本號、當前難度、當前時間戳、以及一個清除工作標志。有了這些信息和之前的Extranonce1和Extranonce2_size,礦機就能開始挖礦。
礦機開始挖礦,構造coinbase信息,將Extranonce2與coinbase合並。構建merkleroot,利用coinbase和merkle_branch進行哈希運算得到最終結果。之後填充區塊頭的剩餘欄位,進行挖礦。礦機使用submit方法向礦池提交工作量,礦池驗證難度和全網難度。
礦池使用set_difficulty方法調整礦機的難度值,以適應礦工的效率。難度值通過特定公式計算得出,表示任務難度相對於比特幣難度單位的倍數。如果礦機在規定時間內未提交結果,礦池將重新發送任務,連續三次未提交任務後認為礦機斷開連接,需要重新連接。