Difficulty

您如何得出“0x008000 是低 24 位的最小合法值,因為目標始終以盡可能低的指數儲存”?

  • February 2, 2022

來自<https://en.bitcoin.it/wiki/Difficulty>:

難度如何儲存在塊中?

每個塊為其實際的十六進制目標儲存一個打包表示(稱為“位”)。目標可以通過預定義的公式從中得出。例如,如果塊中打包的目標是 0x1b0404cb(以小端順序儲存:cb 04 04 1b),則十六進制目標是

0x0404cb * 2**(8*(0x1b - 3)) = 0x00000000000404CB000000000000000000000000000000000000000000000000

請注意,此打包格式在第 24 位中包含一個符號位,例如,上述目標的否定將是打包格式中的 0x1b8404cb。然而,由於目標在實踐中永遠不會是負數,這意味著低 24 位的最大合法值是 0x7fffff。此外,0x008000 是低 24 位的最小合法值,因為目標始終以可能的最低指數儲存。

最後一句話是什麼意思?我不明白為什麼會有下限。

如果我們使用小於0x008000低 24 位的任何數字,則指數可能會降低,這違反了“目標始終以可能的最低指數儲存”的規則。

例如,0x05007fff(big endian) 有指數0x05,所以這表示0x007fff * 2^(16)。那麼我們可以寫成0x047fff00相同的數字,因為

0x7fff00 * 2^8 = 0x007fff * 2^16

但是,您不能這樣做0x008000,因為嘗試減少指數並將尾數乘以 2^8 會產生 的尾數0x800000,它是負數(第 24 位是符號位)。難度目標必須是正數,因此該符號位必須始終設置為 0。

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