常用的数据结构_三分钟了解区块链常用数据结构「默克尔树」
免責聲明:本文旨在傳遞更多市場信息,不構成任何投資建議。文章僅代表作者觀點,不代表火星財經官方立場。
小編:記得關注哦
來源:萬向區塊鏈
原文標題:三分鐘了解區塊鏈常用數據結構「默克爾樹」
默克爾樹是由哈希值構成的樹狀數據結構,封裝在區塊鏈數據層,用于驗證區塊鏈數據的完整準確性。
原文標題:《默克爾樹究竟是棵什么樹?| 萬向區塊鏈小課堂》 撰文:萬向區塊鏈
本期萬向區塊鏈小課堂將為大家講解區塊鏈中經常提及的一棵樹:默克爾樹(Merkle Tree)。
來回憶下我們之前小課堂解構的區塊鏈六層模型,默克爾樹封裝在數據層,說明它是一個密碼學技術,用以保護區塊鏈的安全。
默克爾樹于 1979 年由美國計算機科學家拉爾夫·默克爾(Ralph Merkle)提出,本質上是一種樹狀數據結構,由數據塊、葉子節點、中間節點和根節點組成。所以,一組合,就叫「Merkle Tree」。
默克爾樹各部分的構成關系如下圖:
要得到這樣一棵默克爾樹,首先要對底部數據塊進行哈希運算,用每個數據塊對應的哈希值生成葉子節點。再對相鄰的 2 個葉子節點進行哈希運算,得到的哈希值生成中間節點,最后對相鄰的 2 個中間節點進行哈希運算,得到的哈希值生成根節點。由于各類節點都是由哈希值構成,因此默克爾樹又被稱為哈希樹,即儲存哈希值的樹狀數據結構。
看起來是不是很像一棵底下堆滿了禮物的圣誕樹?
哈希運算和哈希值
生成默克爾樹用到的哈希運算是區塊鏈中常用的加密函數。任意大小、長度的數據經過哈希運算后都會得到一個固定大小和長度的數值,即哈希值。就像我們的指紋或簽名能幫助鑒別我們的身份,哈希值也可以看成是數據的指紋或簽名,用于驗證數據的真實準確性,并具有以下特征:
確定性
數據和哈希值之間是確定的一一對應關系,即相同數據經過哈希運算會得到相同的哈希值。
不可逆性
哈希運算的過程是不可逆的,即數據經過哈希運算可以得到哈希值,但不可以通過哈希值推導出原始運算數據,由此保證數據的隱私和安全性。比如 Facebook 等網站會將用戶密碼計算成哈希值并儲存。用戶每次輸入密碼時,密碼都會被轉換成哈希值與網站記錄的版本進行對比,從而驗證密碼是否正確。由于哈希運算的不可逆性,網站無法從哈希值中推導出用戶密碼,從而保證用戶信息安全。
統一性
即上文提到的任意大小、長度的數據經過哈希運算后會生成大小、長度統一的哈希值,一方面起到壓縮數據,減輕數據儲存壓力的作用,另一方面規整了雜亂無章的原數據,方便后期比對驗證。
為什么要用默克爾樹?
由于默克爾樹本質上是由哈希值構成的樹狀數據結構,因此也繼承了哈希值用于保證數據安全隱私和校驗數據準確和完整性的功能,主要應用于點對點下載,例如 BT 下載、開源分布式控制系統 Git、比特幣和以太坊區塊鏈等場景中。因為我們難以保證這些去中心化系統中的每個節點都會提供真實可信的數據,也難以避免數據在傳輸過程中出現丟失、損壞等情況,所以需要引入數據加密和校驗機制。
看到這里,你可能已經意識到了默克爾樹其實就是將數據分割成多個小塊,進行多次哈希運算,搭建出的一個樹狀數據結構。那為什么要對數據進行拆分,計算出多個哈希值用于校驗呢?這不是增加工作量了嗎?但其實這樣做是為了提高數據驗證的靈活性,數據量越大,默克爾樹的這一優勢會體現得越明顯。
試想一下,如果我們不對數據進行拆分,而是將整體計算成一個哈希值,那當數據校驗出現問題時,我們很難分辨問題出現在哪里,只能回過頭去對整個數據進行排查,如果數據量特別大,那么這個錯誤排查過程無異于海底撈針。
但在默克爾樹里,數據被拆分成多個小塊,形成了多個分支,可以根據具體情況對部分數據進行校驗,無需校驗整個數據,從而提高數據校驗的靈活性和效率。
最后總結一下默克爾樹的知識要點:
- 由哈希值構成的樹狀數據結構
- 用于驗證驗證區塊鏈等去中心化系統中的數據的完整準確性
- 具有靈活高效驗證數據的優勢
來源鏈接:mp.weixin.qq.com
總結
以上是生活随笔為你收集整理的常用的数据结构_三分钟了解区块链常用数据结构「默克尔树」的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一百层电梯有哪些攻略
- 下一篇: python def函数报错详解_Pyt