Mining-Pools
比特幣池和 getwork 數據有效性
比特幣礦池需要檢查 getwork 返回的數據的有效性(正確的雜湊結果等)。發布初始 getworks 的 Bitcoind 也能夠執行一些數據檢查,但對於礦池來說可能還不夠(例如,它可能無法驗證難度 1 份額用於記入礦工)。
通常在 bitcoind 端進行哪些 getwork 數據檢查,在 pool 端進行哪些?這將包括:
- 檢查消息有效性
- 檢查送出的工作是否來自池(塊數據是否經過調和)
- 檢查工作解決了什麼困難(用於生成共享和解決塊)
- 檢查工作是否可以作為一個塊接受(例如,如果時間戳不是太大)
GetWork 請求僅包含塊頭,其中包含此處顯示的欄位,不包含其他欄位。這就是礦工所見過的一切。請注意,交易不在區塊頭中——只是它們的(Merkle)雜湊。礦工實際上並不知道它正在探勘什麼交易。
池檢查送出工作的塊頭是否與池先前發布的某些 GetWork 的塊頭完全匹配。一些礦池 (Eligius) 允許礦工僅根據非常嚴格的規則更改時間戳欄位。
池總是檢查塊的散列是否以 32 個零結尾(請注意,這是“低於”難度零!鏈中的每個塊在其散列中都有超過32 個尾隨零)。
一些池檢查其他事情(例如,您沒有使用一個帳戶請求工作並使用另一個帳戶送出),但上述檢查是唯一強制性和通用的檢查。