Difficulty
如何計算“累積 PoW”以在競爭鏈之間做出決定?
鏈 1 具有目標 diff1、diff2、diff3、diff4 的塊
鏈 2 具有目標 DIFF1 DIFF2 DIFF3 的塊
從這些鏈中推導出(相對)累積的作品證明以找出哪個更強大的公式是什麼?
我的猜測是我們把它們的對數加起來?
首先,協議中不存在“難度”這個概念。這是一個僅供人類消費的單位。
在內部,與之對應的值是target。目標是一個 256 位數字,為每個塊計算,如果一個塊的雜湊(也解釋為 256 位數字)小於或等於目標,則該塊是有效的。
難度簡單地定義為MAX_TARGET / target的(浮點,近似)值。MAX_TARGET us (2 16 -1)2 208,最大可能目標(因此比特幣允許任何區塊的最低難度)。
為了比較鏈,引入了一個新指標:work。工作是為該塊建構有效的工作證明所需的預期雜湊嘗試次數。它只是2256除以滿足目標的潛在雜湊值的數量,即目標 + 1。因此,塊的工作定義為2 256 / (target + 1)。
一條鏈的工作只是其中塊的工作值的總和。這是有道理的:我們希望確保攻擊者需要做的工作與誠實礦工生產有效鏈所需的工作一樣多。
在塊 678033,難度約為 23137439666472.1,我們有:
- 目標是1165190949371886336955396954992052935118810155482873856(或0xc2a48000000000000000000000000000000000000000000十六進制)。
- 工作是99376063039054378510219
- 累積工作(整個鏈中所有工作的總和)約為8.565487⋅10 27。
所以——也許值得注意的是——這(大約)相當於只是將所有塊的難度值相加。不涉及對數。
為了完整起見,Bitcoin Core 目前選擇最佳鏈的規則:
- 首先排除所有包含無效區塊的鏈
- 然後選擇所有這些鏈的尖端,只留下累積工作最高的那些(如果有叉子,可能不止一個)。
- 其中,選擇首先收到完整塊(不僅僅是標題)的那個。