Merkle root 是怎麼建構的?
先取出區塊中每筆交易的 ID,每個 ID 本身都是雙重 SHA-256 雜湊。將它們依序排列,coinbase 交易放在最前面。將相鄰的雜湊值兩兩配對,再對每一對進行雜湊。這時雜湊值的數量會減半。重複這個步驟,直到只剩下一個,也就是 Merkle root。
如果某一層的雜湊值數量是奇數,最後一個會和自己配對。只要改動任何一筆交易,即使只差一個 satoshi,從它到頂端路徑上的每個雜湊值都會改變,包括 Merkle root。試試上方的示範。
為什麼要用樹狀結構,而不是一個大雜湊?
證明。要證明某筆交易在區塊中,只需要它所在分支上的雜湊值,不需要整個區塊。約有 4,000 筆交易的區塊,只需要其中 12 個雜湊值,總共幾百位元組。中本聰的白皮書描述了用這種方式驗證付款的輕量錢包,只保留區塊標頭。
這對挖礦也很重要。礦工更改 coinbase 交易中的額外 nonce 時,Merkle root 也會改變,區塊標頭就會有一組新的 nonce 可供嘗試。
來源
- 比特幣:點對點電子現金系統 · 中本聰(Satoshi Nakamoto),2008
- 區塊鏈參考資料:區塊標頭、默克爾樹、目標值 · Bitcoin 開發者文件
- Merkle 樹 · Bitcoin Wiki
本頁即時數據來自 CloudMineCrypto API 和公開區塊鏈資料,並會定期更新,且會在各處標示。僅供教育用途,不構成財務建議。