Hash

如何獲得塊頭十六進制?

  • November 24, 2019

我正在嘗試研究雜湊函式,我希望能夠將比特幣的探勘輸出用作雜湊。我很好奇生成帶有很多零的雜湊的數據的實際十六進制值在哪裡。所以,這就是我想要的:80 字節輸入,它提供 32 位輸出,其中包含來自 sha256(sha256(x)) 的大量零。

我很好奇生成帶有很多零的雜湊的數據的實際十六進制值在哪裡。

它是塊中值的組合- 簡而言之,它是每個欄位的連接二進制(此處以十六進製表示法表示)小端值:

version + previous_block_hash + merkle_root_hash + time + bits + nonce

正在開采的區塊。

這些包含在“塊頭”中。

您在這裡有 Python 程式碼範例:https ://en.bitcoin.it/wiki/Block_hashing_algorithm ,例如塊 125552

>>> import hashlib
>>> header_hex = ("01000000" +
"81cd02ab7e569e8bcd9317e2fe99f2de44d49ab2b8851ba4a308000000000000" +
"e320b6c2fffc8d750423db8b1eb942ae710e951ed797f7affc8892b0f1fc122b" +
"c7f5d74d" +
"f2b9441a" +
"42a14695")
>>> header_bin = header_hex.decode('hex')
>>> hash = hashlib.sha256(hashlib.sha256(header_bin).digest()).digest()
>>> hash.encode('hex_codec')
'1dbd981fe6985776b644b173a4d0385ddc1aa2a829688d1e0000000000000000'
>>> hash[::-1].encode('hex_codec')
'00000000000000001e8d6829a8a21adc5d38d0a473b144b6765798e61f98bd1d'

請注意,該值在最後一步被反轉,以便以我們人類習慣的大端格式表示。

所以,這就是我想要的:80 字節輸入,它提供 32 位輸出,其中包含來自 sha256(sha256(x)) 的大量零。

您可以使用許多可用的線上區塊瀏覽器中的任何一個來檢查探勘的每個區塊的這 6 個值:例如,這裡是上一個範例的特定區塊:https ://blockexplorer.com/block/000000000000000001e8d6829a8a21adc5d38d0a473b144b6765798e61f98bd1d (您只有將人類時間轉換為 unix 時間,注意時區)。

這是一個快速連結,可以下載二進制形式的塊頭(直到 2018 年 5 月)並開始使用真實值。如果需要,您可以將其轉換為 .csv 。

每個塊的前 80 個字節是塊頭。

getblockheader您可以使用RPC 方法獲取給定區塊雜湊的區塊頭。

getblockhash您可以使用RPC 方法獲取給定塊高度的塊雜湊。

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