Mining-Pools

比特幣池和 getwork 數據有效性

  • March 31, 2016

比特幣礦池需要檢查 getwork 返回的數據的有效性(正確的雜湊結果等)。發布初始 getworks 的 Bitcoind 也能夠執行一些數據檢查,但對於礦池來說可能還不夠(例如,它可能無法驗證難度 1 份額用於記入礦工)。

通常在 bitcoind 端進行哪些 getwork 數據檢查,在 pool 端進行哪些?這將包括:

  • 檢查消息有效性
  • 檢查送出的工作是否來自池(塊數據是否經過調和)
  • 檢查工作解決了什麼困難(用於生成共享和解決塊)
  • 檢查工作是否可以作為一個塊接受(例如,如果時間戳不是太大)

GetWork 請求包含塊頭,其中包含此處顯示的欄位,不包含其他欄位。這就是礦工所見過的一切。請注意,交易不在區塊頭中——只是它們的(Merkle)雜湊。礦工實際上並不知道它正在探勘什麼交易。

池檢查送出工作的塊頭是否與池先前發布的某些 GetWork 的塊頭完全匹配。一些礦池 (Eligius) 允許礦工僅根據非常嚴格的規則更改時間戳欄位

池總是檢查塊的散列是否以 32 個零結尾(請注意,這是“低於”難度零!鏈中的每個塊在其散列中都有超過32 個尾隨零)。

一些池檢查其他事情(例如,您沒有使用一個帳戶請求工作並使用另一個帳戶送出),但上述檢查是唯一強制性和通用的檢查。

引用自:https://bitcoin.stackexchange.com/questions/2679