Getwork
我無法計算 getwork api
我在當天早些時候稍微呼叫了 bitcoind getwork,這就是我得到的:
{ "midstate" : "6d8b2d759123e7311c552f0c99f6d520378062ac7a14fb11f6d433779d282faf", "data" : "00000002c2bf65e9637a1c11955c2ba1c45c9bffad322d4fa0d9529e0000014300000000e9587c30863f5f410ea9d0611d3da6b7d0afd390b4b8e33cd71297c9d20dc74651ad7ea71a01616400000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000080020000", "hash1" : "00000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000010000", "target" : "0000000000000000000000000000000000000000000000646101000000000000" }
所以暫時讓我們扔掉我不會使用的中間狀態,因為我只是想理解。所以現在對我得到的數據進行 32 位字節交換:
Data 02000000 e965bfc2111c7a63a12b5c95ff9b5cc4 4f2d32ad9e52d9a04301000000000000 307c58e9415f3f8661d0a90eb7a63d1d90d3afd03ce3b8b4c99712d746c70dd2 a77ead51 6461011a 00000000
現在我無法弄清楚如何實際閱讀這些資訊。根據 wiki,前 4 個字節是版本。這裡前 4 個字節是版本。
Version: 02000000
不應該是2嗎。上面是大端的一個非常大的數字。
現在是previuos雜湊塊:
Hash: e965bfc2111c7a63a12b5c95ff9b5cc44f2d32ad9e52d9a04301000000000000
我無法在 blockexplorer 或區塊鏈資訊的任何地方找到這個雜湊?我試圖再次改變字節順序,但無濟於事。
最後,我將 merkle 根排除在外,並嘗試用 UTC 時間確認:
Time: a77ead51
對應於 2081 年。我到底做錯了什麼?
不應該是2嗎。上面是大端的一個非常大的數字。
它是大端序中的一個小數。想想看;最後的**大數字。
現在是previuos雜湊塊
我不知道為什麼比特幣會這樣做,但是塊雜湊在內部以正常順序儲存,然後在顯示它們之前進行字節反轉。
>>> s="e965bfc2111c7a63a12b5c95ff9b5cc44f2d32ad9e52d9a04301000000000000" >>> import binascii >>> s=binascii.unhexlify(s) >>> s=s[::-1] >>> s=binascii.hexlify(s) >>> s
’ 0000000000000143a0d9529ead322d4fc45c9bff955c2ba1637a1c11c2bf65e9 '
時間:
a77ead51