Blockchain
如何手動驗證區塊?
根據我的理解,您只需要使用 SHA256 函式對塊的頭部(塊雜湊和 merkle 根)進行雜湊處理,然後像本文解釋的那樣在末尾添加隨機數。
但是,我無法獲得正確的下一個塊雜湊。通過使用塊#505400:
Hash : 00000000000000000023b89dd18f6be5a6c03a71cd864ccbdf024683114b9ce3
Merkle root : a3defcaa713d267eacab786c4cc9c0df895d8ac02066df6c84c7aec437ae17ae
Nonce : 2816816696
Next block hash : 0000000000000000007625ff74171cf53e301c3e5013bf2184e2629a2da0fc8d
我所期待的:sha256(Hash + Merkle Root + Nonce) = Next Block Hash
但是我得到了這個:
10345cb85ffed406a47e1faf31eb8ba1160aac0fbaae3cae0cd66889f9c9f49e
我做錯了什麼?
這不是創建塊頭的方式。塊頭構造為
- 版本
- 前一個區塊的雜湊
- 默克爾根
- 時間戳
- nBits 欄位
- 和隨機數。
一旦以字節為單位序列化,標頭將使用 SHA256 進行兩次散列,而不僅僅是一次。
一個常見的錯誤是對字節的十六進製表示的字元串進行雜湊處理,您必須對字節本身進行雜湊處理。
有關更多資訊,請參見此處:https ://en.bitcoin.it/wiki/Block_hashing_algorithm
雜湊是該塊的雜湊。它沒有給出下一個塊的雜湊值,**沒有辦法知道下一個塊的雜湊值是什麼,**並且它可能是許多可能的雜湊值。