Proof-of-Work
投入鏈的工作量證明的數量是如何計算的?
比特幣白皮書(第3 頁)指出
多數決策由最長的鏈代表,該鏈投入了最大的工作量證明。
我找不到這個難度是如何計算的。
它是每個塊的隨機數的前綴零的總和嗎?
我找到了這個答案,但它太短了,我無法理解。
工作量計算為
work = 2^256 / block_target
,如鍊接答案中所述,這是算作有效工作量證明的最小雜湊值(請注意,這僅每 2016 個塊更改一次)。原始碼是src/chain.cpp L#121。總鏈工作是鏈中所有塊的工作總和,在此處計算:src/validation.cpp L#3713。因此,為了形象化,塊目標越低,完成的工作就越多。例子
塊 0 目標:
00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
塊 1 目標:
00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
塊 0: 塊 1****:
work = (2^256) / <block 0 hash> = 4.295 × 10^9
work = (2^256) / <block 1 hash> = 4.295 × 10^9
您可以看到他們都完成了相同數量的工作。如果出現平局,則適用以下規則,請參閱https://bitcoin.stackexchange.com/a/37275/60443
- 哪個先收到?(對於不同的客戶端,這可能會有所不同,這就是首先應用前面的規則的原因。)
- 哪個指針地址更大?(這在很大程度上是隨機的,並且對於不同的客戶來說是不同的。)