Blockchain

雜湊驗證相關性的難度

  • November 30, 2017

在區塊驗證中,如果可以在鏈中跟踪交易並且區塊頭的雜湊值小於難度,則表示礦工擁有有效區塊。我很難看到正在解決的現實世界塊中的關係。

例如來自Block#496785

難度(“目標”)= 1,347,001,430,558.57 或十六進制 000000000000000000000000000000000000000000000000000001399F8AB21E

探勘雜湊 = 000000000000000000cf3620d570d08d1799a1cafbbfae512fdba2124665eca0

所以在我看來,雜湊現在大於難度,所以是一個無效塊,但顯然情況並非如此。

我還聽說難度與最大目標之後的前導零的數量有關,在這種情況下,1399F8AB21E 是一個 11 字節的數字並且預設的 8 字節前導目標之後的散列包含 10 個字節,小於難度 11 個字節的零。

所以

00000000 0000000000 cf3620d570d08d1799a1cafbbfae512fdba2124665eca0
8 bytes  difficulty             some value

它是否正確?這是如何運作的?

難度目標雜湊(簡稱目標)不同。

它們是負相關的,所以最小的可能難度(1)給出了最大的目標,定義為(<https://en.bitcoin.it/wiki/Target>):

0x00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

因為比特幣將目標儲存為浮點類型,所以會被截斷:

0x00000000FFFF00000000000000000000000000000000000000000000000000000

目前難度計算為最大目標除以目前目標。例如(<https://en.bitcoin.it/wiki/Difficulty>):

0x00000000FFFF0000000000000000000000000000000000000000000000000000 / 0x00000000000404CB000000000000000000000000000000000000000000000000 = 16307.420938523983

因此,在您的範例中,難度 = 1,347,001,430,558.57 將給出目前目標:

current_target = 0x00000000FFFF0000000000000000000000000000000000000000000000000000 / 1,347,001,430,558.57

如果你計算這個(注意一個數字是十六進制,另一個是十進制),比較應該得出這個 current_target 高於探勘的雜湊值:

0x000000000000000000cf3620d570d08d1799a1cafbbfae512fdba2124665eca0

編輯:筆和紙計算讓我知道目前的目標是:

0x0000000000000000000FFFF0000000000000000000000000000000000000000000

我是怎麼得到這個的。1,347,001,430,558.57 約為 1.225 * (16^10)。由於目標以 16 為基數,這意味著除以 1 * (16^10) 就像將數字向右移動 10 位。為了在數字移位後得到精確的結果,我應該除以 1.225,但我在筆和紙計算中忽略了這一點。

EDIT2:更準確地說,我認為 16/1.225 大約是 13(十六進制中的D),所以目標大約是:

0x0000000000000000000D0000000000000000000000000000000000000000000000000

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