溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

golang[41]-區(qū)塊鏈-默克爾樹構(gòu)建

發(fā)布時間:2020-07-16 05:42:34 來源:網(wǎng)絡(luò) 閱讀:669 作者:jonson_jackson 欄目:開發(fā)技術(shù)

大自然的啟示

Banyan樹的啟示:印度banyan樹,最大的一顆可以長到1萬平方米以上。其如此巨大的秘密就在于其枝干也會產(chǎn)生根,起到支撐,從而作為附屬樹干,繼續(xù)生成分支。大自然給人太多啟示……

Merkle Tree

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

比特幣中默克爾樹的構(gòu)建過程:

對于網(wǎng)站中的交易:
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
大小端轉(zhuǎn)換為:
5f2f6723b49e840c7f35181c8fdd6fc0628100e41dcbb274239c4dcb42ebf016

第二筆hash:
cce2f95fc282b3f2bc956f61d6924f73d658a1fdbc71027dd40b06c15822e061
大小端轉(zhuǎn)換為:
61e02258c1060bd47d0271bcfda158d6734f92d6616f95bcf2b382c25ff9e2cc

將兩個拼接在一起:
5f2f6723b49e840c7f35181c8fdd6fc0628100e41dcbb274239c4dcb42ebf01661e02258c1060bd47d0271bcfda158d6734f92d6616f95bcf2b382c25ff9e2cc

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

第一次hash結(jié)果:
9b2ec096d49fee8b310752082d63d8fe198386ae2172d90533d9186bb28df63d

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

大小端轉(zhuǎn)換即為結(jié)果:
c7a040cddb20243fb85cdbdee65cb315d678a9e25886ffc5361b89d0dd945852

go語言實現(xiàn)上面的驗證過程

golang[41]-區(qū)塊鏈-默克爾樹構(gòu)建

參考資料

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

  • 本文鏈接: https://dreamerjonson.com/2018/12/10/golang-41-blockchain-merkletree/

  • 版權(quán)聲明: 本博客所有文章除特別聲明外,均采用 CC BY 4.0 CN協(xié)議 許可協(xié)議。轉(zhuǎn)載請注明出處!

golang[41]-區(qū)塊鏈-默克爾樹構(gòu)建

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI