深入比特幣原理(九)——Merkle樹

作者 Aaron 發表於 2018-03-01 14:24:02

文章來源:華爲雲社區

原文地址:https://bbs.huaweicloud.com/blogs/102343

 

Merkle樹是一種哈希二叉樹,它是一種用作快速歸納和校驗大規模數據完整性的數據結構,比特幣的交易信息存儲爲Merkle樹結構。
 

比特幣Merkle樹結構示例:

每一個葉子節點代表一個交易的Hash值,如HA = SHA256(SHA256(Transaction A))
兩個葉子節點合併後進行Hash計算,形成父節點,如HAB = SHA256(SHA256(HA + HB))

1q.png

Merkle樹是一種平衡二叉樹,如果交易數量爲奇數,最後的葉子節點會被複制,組成偶數的葉子節點,如下:

2q.png

從Merkle樹的結構可以看出,任意一個葉子節點的交易被修改,葉子節點Hash值就會變更,最終Merkle Root的Hash值就會改變。所以確定的Merkle Root可以準確的作爲一組交易的唯一摘要。

下面我們來看一下如何通過Merkle樹驗證一筆交易
假設我們要驗證區塊中存在Hash值爲HK的交易,我們僅需要知道HL、HIJ、HMNOP、HABCDEFGH(藍色框)即可計算出HKL、HIJKL、HIJKLMNOP與Root節點哈希(虛線框),如果最終計算得到的Root節點哈希與區塊頭中記錄的哈希一致,即代表該交易在區塊中存在。

3q.png

使用Merkle路徑驗證交易,可以大大降低驗證交易時需要傳輸的數據量,這種驗證方式在SPV節點上被應用,SPV節點在需要驗證交易時會向全節點請求Merkle路徑信息,這是爲什麼SPV節點只需要存儲區塊頭即可驗證交易的原因

隨着區塊中的交易增多,區塊大小將線性增長,而Merkle路徑的大小增長卻極其緩慢,如下表所示:

4q.png

從上表可以看到,區塊內交易數從16筆增加到65535筆時,區塊大小從4KB增加到16MB,但是梅克爾路徑大小僅從128bytes增加到512bytes

 

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