Difficulty
您如何得出“0x008000 是低 24 位的最小合法值,因為目標始終以盡可能低的指數儲存”?
來自<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。