Development

如何實現 Merkle 樹?

  • September 27, 2018

我正在慢慢實現一些比特幣協議,但我不確定如何正確理解比特幣 wiki 中的 Merkle 樹: https ://en.bitcoin.it/wiki/Protocol_specification#Merkle_Trees 我有字元串 a、b、c ,我對它們進行雙重雜湊處理,得到三個葉節點。但我不確定如何處理更高的節點。我是對結果字節的總和進行雙重雜湊(將它們視為大數字),還是將它們連接起來(將它們視為字元串),或者我應該做其他事情嗎?

在每次迭代中,您連接上一級的兩個後續散列,並對它們進行雙重 sha256。如果有奇數個雜湊,則將最後一個元素與其自身連接。這為您提供了一個新的雜湊列表。重複,當剩下一個雜湊時停止。這是默克爾根。

假設你有 tx 雜湊 Ha1,Ha2,Ha3,Ha4,Ha5,Ha6,Ha7

  • 第一次迭代:Hb1=Hash(Ha1|Ha2), Hb2=Hash(Ha3|Ha4), Hb3=Hash(Ha5|Ha6), Hb4=Hash(Ha7|Ha7)
  • 第二次迭代:Hc1=Hash(Hb1|Hb2), Hc2=Hash(Hb3|Hb4)
  • 第三次迭代:Hd1=Hash(Hc1|Hc2) => Merkle root

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