Hash
計算區塊頭雜湊需要哪些實際步驟?
據我所知,標題雜湊將按如下方式計算:
- 序列化所有標題欄位,包括“nonce”
- 將序列化的標頭散列一次
- 再次散列散列的序列化標頭
- 檢查結果是否低於目標
- 如果否:選擇不同的隨機數並重新開始
我指的是這個站點,它允許您輸入一些標頭數據併計算標頭雜湊:
<https://learnmeabitcoin.com/tools/hashblockheader/?version=536870912&hashPrevBlock=00000000000000000001eaef94e697cae4216042819d6e2c6ec1c959f8112b38&hashMerkleRoot=eb9439ab4f13d3bd448b792d30a97e4632e567d5e6e40c2d5c9a72f27edbddbd&time=1644443882&bits=170a8bb4&nonce=3156027&submit=true>
該站點已經計算了我必須用於散列過程的序列化標頭:
00000020382b11f859c9c16e2c6e9d81426021e4ca97e694efea01000000000000000000bddddb7ef2729a5c2d0ce4e6d567e532467ea9302d798b44bdd3134fab3994ebea380462b48b0a173b283000
因此,通過 SHA256 執行這個序列化標頭兩次,在第一次迭代後給了我這個雜湊:
969d0e7028705a4ca408430f5d2bcb05acbcd6c3350f43a838714a2ba5db94f0
再次散列會返回:
9fe2e96559673ba8e038452cc161e2da87636567d95ef7ae6be800770a5cbf9f
但這不是這個塊頭的實際雜湊值。顯然,因為從 9 開始似乎不是很困難。那是正確的標題:
000000000000000000055730c92292ebd5c5851e7d24ab3ba2efc1cea0b5fe81
所以我想知道,我在這裡缺少什麼額外的步驟?
謝謝
問題是您將標頭作為字元串進行散列,而不是作為十六進製表示的字節。如果將其雜湊為字節,您將獲得預期的雜湊。標頭和第一個雜湊都必須被視為字節,而不是十六進製字元串。