標題上的 SHA256 * 2 - 我做錯了什麼?
我一直在這裡試驗 php 程式碼:https ://en.bitcoin.it/wiki/Block_hashing_algorithm (在將 $x=; 的小錯誤更正為 $x=""; 之後)
使用這些塊 0 和 125552(例如)它工作正常,我得到了預期的雜湊。
使用塊 225552 和 300000,我得到:
7a7bb195e8bcc8e73205df7906eb68f26144c6fbc577d59dd4e8a0cfdb8b90df(而不是00000000000001f4f14b09019b23d71c222a2c1245ef3df52875d79ff4488709)
和
178d6fe6cbf696311e7f46263067eeb688797e4c790060c1f6edf6daec76c59e(而不是000000000000000082ccf8f1557c5d40b21edabb18d2d691cfbf87118bac7254)
…分別 - 這與任何一個塊的雜湊都不匹配。
我錯過了什麼或做錯了什麼?
附加說明 - 我使用“openssl dgst -sha256 -binary test-input.bin |openssl dgst -sha256”確認了這些結果…
除此之外,使用同一頁面中的 python 程式碼:
>>> 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'
…工作正常…但是:
>>> import hashlib >>> header_hex = ("01000000" + ... "7ef055e1674d2e6551dba41cd214debbee34aeb544c7ec670000000000000000" + ... "d3998963f80c5bab43fe8c26228e98d030edf4dcbe48a666f5c39e2d7a885c91" + ... "02c86d53" + ... "6c890019" + ... "593a470d") >>> header_bin = header_hex.decode('hex') >>> hash = hashlib.sha256(hashlib.sha256(header_bin).digest()).digest() >>> hash.encode('hex_codec') '9ec576ecdaf6edf6c16000794c7e7988b6ee673026467f1e3196f6cbe66f8d17' >>> hash[::-1].encode('hex_codec') '178d6fe6cbf696311e7f46263067eeb688797e4c790060c1f6edf6daec76c59e'
…得到與 php 程式碼相同的錯誤結果。
你有錯誤的塊版本號。塊 300000 是版本 2塊,而 125552 是版本 1。因此塊頭中的第一個單詞應該是“02000000”而不是“01000000”。
這是塊 #300000 的標題
02 00 00 00 7E F0 55 E1 │ 67 4D 2E 65 51 DB A4 1C D2 14 DE BB EE 34 AE B5 │ 44 C7 EC 67 00 00 00 00 00 00 00 00 D3 99 89 63 │ F8 0C 5B AB 43 FE 8C 26 22 8E 98 D0 30 ED F4 DC │ BE 48 A6 66 F5 C3 9E 2D 7A 88 5C 91 02 C8 6D 53 │ 6C 89 00 19 59 3A 47 0D
版本號是 2(第一個數字),但您已將其硬編碼為 1
header_hex = (“01000000” +