Mining-Pools
如何防止礦工重複工作?
有人有 n 台機器可以開採比特幣。確保採礦工作不重複的最簡單方法是什麼?
(即使有相同的獎勵接收者,不同的機器自然會在不同的雜湊上工作,還是需要某種池軟體執行組織節點?讓每個新節點首先創建一個錢包就足夠了嗎?)
我對挖礦機制的理解是這樣的:
- 礦工連接到比特幣客戶端(或礦池)並送出 getwork 請求
- 客戶端(或礦池)以包含塊數據的數據塊進行響應,包括隨機位和隨機數(礦工更改的位)
- 礦工多次增加隨機數,直到找到解決方案或溢出,此時它向客戶端(或池)送出新的 getwork 請求
由於客戶端/池負責分發 getwork 請求,因此客戶端/池還負責防止重複。由於根據定義,getwork 發出的數據的熵必須大於或等於 SHA256 的輸出熵(2^256 位),因此它應該具有相同或更低的衝突機會(1/2^256)。
在這種情況下,“衝突”會將相同的工作交給多個礦工,因此我們可以說多個礦工被分配重複工作的發生風險非常低,可以忽略不計。
我最喜歡的一位電腦科學教授曾經告訴我,發生這種碰撞的機會(每單位工作量)與連續 11 次贏得州彩票,然後被閃電擊中,倖存並當選總統大致相同。他有數學來支持這一點……