区块链基础知识系列 第三课 区块链中的默克尔树
“區塊鏈是實現無中心分布式總賬的一種技術。除了采用塊、鏈結構的典型區塊鏈以外,還有其他的方式實現分布式總賬這個需求。總賬技術的基本單元是‘交易’,整個賬本是由一條條的交易構成。‘塊’類似于賬本中的頁,每頁都記錄了若干條交易,把一頁一頁的賬頁按照時間順序裝訂起來,就形成了一個完整的賬本——‘區塊鏈’。‘塊’是交易的容器,‘塊’通過密碼學算法相連接,形成了按照時間序列的‘鏈’。這種組織賬本的好處是由密碼學算法保證了無法篡改鏈上的單獨交易,除非整體性的篡改。”
根據描述,我們可以看出來,“塊”是交易的容器。每個交易都要放到容器里面,然后把整個容器用密碼學算法進行連接,形成了一個完整的鏈。
這種數據的組織方式最大的好處就是數據易于保持完整,并且從密碼學角度看安全性較高。然而,這個好處是有代價的——數據一直不停的增長。?
對于比特幣系統來說,這個問題并不大,因為截止目前為止,比特幣仍然是每10分鐘一個區塊,每個區塊1MB,即便到了100年后,總的數據量也不會大到單機無法處理。但是對于某些企業級應用的區塊鏈系統來說,情況就完全不一樣了。每個區塊可能會非常大,生成區塊的速度也會非常快。這種情況下,區塊鏈的數據量增長是飛快的。
怎么解決數據量過大的問題呢??
在我們傳統的數據系統中,也存在數據不斷增長,數據量過大的問題。以傳統的交易型系統為例,由于系統中的核心設計理念是保存賬戶的最終狀態,只需要把歷史的交易過程數據移到其他專門的存儲設備上,主機數據庫保存賬戶的最新狀態和最近一段時間的交易記錄即可。(因此,我們在網銀中查閱歷史交易時,通常是有時間限制的。)
但是在區塊鏈系統中,尤其是使用UTXO方式存儲交易的區塊鏈系統中,保存的都是交易的過程。如果一個賬戶一直沒有交易,它則不會出現在最新的區塊中。?
那么按照傳統數據庫刪除歷史數據的方式,只要一個區塊中有一個交易一直沒有后續交易(就是沒有人使用這個交易的輸出賬戶),為了維護整個區塊鏈系統的密碼學完整性和安全性,這個區塊就必須保留,同時這個區塊之后的所有區塊也必須保留。?
怎么解決這個問題?其實有很多種辦法能夠解決,起初,在中本聰設計比特幣系統的時候,已經預留了一個最佳的解決方案:默克爾樹(Merkle Tree)算法。
在比特幣區塊鏈系統中,區塊的結構如下圖所示:
?
?
每個區塊中的Hash1就是本區塊中所有交易的哈希值。但這個哈希值不是把所有交易連成一個長字符串后計算HASH值,而是使用了默克爾樹(Merkle Tree)算法來計算獲得這個HASH值,我們稱之為Merkle根。
?
?
默克爾樹算法并不是直接計算整個字符串的Hash值,而是每個交易都計算一個Hash值,然后兩兩連接再次計算Hash,一直到最頂層的Merkle根。
默克爾樹(Merkle Tree)算法的最大好處就是,每個交易都可以單獨直接刪除,只保留這個交易的Hash值即可。這樣,對整個區塊來說,并沒有改變他的密碼學安全性和完整性,但是數據量可以大大減小。(Hash值32個字節,而一筆交易一般要400多個字節)。如果一個區塊中只有一個交易沒有后續交易,那么刪除其他所有交易,整個區塊的數據量會大大減小。
因此,在UTXO的記賬模式中,使用默克爾樹結構,通常就無需擔心數據量一直增長導致數據過大的問題了。
最后總結
Merkle Tree具有以下特征及優點:
1.Merkle Tree提供了一種驗證文件的方法。
2.Merkle Tree需要的memory/disk space小,驗證快,大小為n的文件,時間復雜度O(Log n),空間復雜度O(Log n)。
3.Merkle Tree的驗證需要的網絡傳輸流量小。
不得不說,中本聰將UTXO記賬模式與默克爾樹結構結合在一起,完美的解決了比特幣交易數據過于龐大的問題,同樣,這一模式也經受住了時間的考驗。
總結
以上是生活随笔為你收集整理的区块链基础知识系列 第三课 区块链中的默克尔树的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于本地部署的hyperledger f
- 下一篇: Hyperledger Fabric 1