golang[41]-區塊鏈-默克爾樹構建

大自然的啓示

Banyan樹的啓示:印度banyan樹,最大的一顆可以長到1萬平方米以上。其如此巨大的祕密就在於其枝幹也會產生根,起到支撐,從而作爲附屬樹幹,繼續生成分支。大自然給人太多啓示……

Merkle Tree

Merkle Tree,通常也被稱作Hash Tree,顧名思義,就是存儲hash值的一棵樹。Merkle樹是一種數據結構,Merkle樹的葉子是數據塊(例如,文件或者文件的集合)的hash值。非葉節點是其對應子節點串聯字符串的hash。
Merkle樹是使區塊鏈發揮作用的基本組成部分。雖然理論上可以在沒有Merkle樹的情況下製作區塊鏈,但只需創建直接包含每個事務的巨型塊頭,這樣做會帶來巨大的可擴展性挑戰,可以說無可置疑地使用區塊鏈的能力超出了所有範圍,從長遠來看,功能強大的電腦。感謝Merkle樹,可以構建在所有計算機和大小筆記本電腦上運行的以太網節點,智能手機,甚至是物聯網設備

比特幣中默克爾樹的構建過程:

對於網站中的交易:
https://www.blockchain.com/btc/block/000000000001741120135274584b2a0da45b39c8cc78322a14f9004ae766a8e0

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
第一筆hash:
16f0eb42cb4d9c2374b2cb1de4008162c06fdd8f1c18357f0c849eb423672f5f
大小端轉換爲:
5f2f6723b49e840c7f35181c8fdd6fc0628100e41dcbb274239c4dcb42ebf016

第二筆hash:
cce2f95fc282b3f2bc956f61d6924f73d658a1fdbc71027dd40b06c15822e061
大小端轉換爲:
61e02258c1060bd47d0271bcfda158d6734f92d6616f95bcf2b382c25ff9e2cc

將兩個拼接在一起:
5f2f6723b49e840c7f35181c8fdd6fc0628100e41dcbb274239c4dcb42ebf01661e02258c1060bd47d0271bcfda158d6734f92d6616f95bcf2b382c25ff9e2cc

將上面拼接的字符串進行兩次hash如下:

第一次hash結果:
9b2ec096d49fee8b310752082d63d8fe198386ae2172d90533d9186bb28df63d

將上面計算出的hash值再次進行hash:
525894ddd0891b36c5ff8658e2a978d615b35ce6dedb5cb83f2420dbcd40a0c7

大小端轉換即爲結果:
c7a040cddb20243fb85cdbdee65cb315d678a9e25886ffc5361b89d0dd945852

go語言實現上面的驗證過程

carbon (18).png

參考資料

eth wiki:patricia-tree

[csdn 默克爾樹解釋]https://blog.csdn.net/wo541075754/article/details/54632929

https://github.com/ZtesoftCS/go-ethereum-code-analysis/blob/master/trie源碼分析.md

image.png

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章