區塊鏈鼻祖比特幣之10:merkle tree與spv節點
區塊鏈的每一個區塊都包含了該區塊產生期間的所有交易,並用Merkle樹的形式表示。Merkle 樹是一種Hash二叉樹,用作快速歸納和校驗大規模資料完整性的資料結構。
在比特幣網路中,Merkle樹被用來歸納一個區塊的所有交易,同時生成整個交易集合的數字指紋,且提供了一種校驗區塊是否存在某交易的高效途徑。生成一棵完整的 Merkle樹需要遞迴地對雜湊節點對進行雜湊,並將新生成的雜湊節點插入到Merkle樹中,直到只剩一個雜湊節點,該節點就是Merkle樹的根。在比特幣的Merkle樹中兩次使用到了SHA256演算法,因此其加密雜湊演算法也被稱為Double-SHA256。
當N個資料元素經過加密後插入Merkle樹,至多計算2*log2(N)次就能檢查出任意某資料元素是否在該樹中,這使得該資料結構非常高效;但同時無法從Merkle樹內找到對應的交易,這是區塊鏈單向驗證性的特點。Merkle樹是自底向上構建的,舉例說明:同一時間發生A、B、C、D四筆交易,起始所有交易都存於基礎節點,分別進行Hash,以交易A的Hash過程為例,得到HA= SHA256(SHA256(交易A)),同樣得到HB、HC、HD;然後建立二層節點HAB=SHA256(SHA256(HA + HB)),同樣得到HCD;繼續操作直到生成頂端唯一的節點——HABCD。如下圖所示:
因為Merkle樹是二叉樹,所以每一層需要偶數個點,如果節點數為奇數,系統將複製一份數值使得節點數變成偶數。這種偶數個分層節點的樹也被稱為平衡二叉樹。如下圖所示,C點就被複制了一份。
為四個交易構造Merkle樹的方法同樣適用於為任意交易數量構造Merkle樹。在比特幣中,在單個區塊中有成百上千的交易是非常普遍的,這些交易都會採用同樣的方法歸納起來,產生一個僅僅32位元組的資料作為Merkle根。下圖出現了多個節點,其運算過程與四個節點是一致的,其實無論多少個節點都可以通過Merkle樹歸納為32個位元組。
為了證明區塊鏈記憶體在某一個特定的交易,一個節點只需要計算log2(N)個32位元組的雜湊值,形成一條從特定交易到樹根的認證路徑或者Merkle路徑即可。隨著交易數量的急劇增加,這樣的計算量就顯得異常重要,因為相對於交易數量的增長,以基底為2的交易數量的對數的增長會緩慢許多。這使得比特幣節點能夠高效地產生一條10或者12個雜湊值(320-384位元組)的路徑,來證明了在一個巨量位元組大小的區塊中某筆交易的存在。
在圖5中,一個節點能夠通過生成一條僅有4個32位元組雜湊值長度(總128位元組)的Merkle路徑,來證明區塊中存在一筆交易K。該路徑有4個雜湊值(在圖5中由藍色標註)HL、HIJ、HMNOP和HABCDEFGH。由這4個雜湊值產生的認證路徑,再通過計算另外四對雜湊值HKL、HIJKL、HIJKLMNOP和Merkle樹根(在圖中由虛線標註),任何節點都能證明HK(在圖中由綠色標註)包含在Merkle根中。
用列表表示交易數量對路徑大小的影響,如表1所示,當區塊大小由16筆交易(4KB)急劇增加至65535筆交易(16MB)時,為證明交易存在的Merkle路徑長度增長極其緩慢,僅僅從128位元組到512位元組。有了Merkle樹,一個節點能夠僅下載區塊頭(80位元組/區塊),然後從一個節點回溯就能認證一筆交易的存在,而不需要儲存或者傳輸區塊鏈中大多數內容。這被稱作簡單支付驗證(SPV)節點,它不需要下載整個區塊,而通過Merkle路徑去驗證交易的存在。
網址:http://www.qukuailianxueyuan.io/
欲領取造幣技術與全套虛擬機器資料
區塊鏈技術交流QQ群:756146052備註:CSDN
尹成學院微信:備註:CSDN
網址:http://www.qukuailianxueyuan.io/
欲領取造幣技術與全套虛擬機器資料
區塊鏈技術交流QQ群:756146052 備註:CSDN
尹成學院微信:備註:CSDN
相關文章
- 區塊鏈鼻祖比特幣之12:(SPV) 節點與Bloom 過濾器區塊鏈比特幣OOM過濾器
- 區塊鏈鼻祖比特幣之11:比特幣困難度區塊鏈比特幣
- 區塊鏈鼻祖比特幣之1:比特幣的內涵與價值區塊鏈比特幣
- 區塊鏈鼻祖比特幣之7:區塊鏈在比特幣中的真正用意區塊鏈比特幣
- 區塊鏈鼻祖比特幣之9:挖礦、礦池與比特幣的產生區塊鏈比特幣
- 區塊鏈鼻祖比特幣之2:可分割與去中心化區塊鏈比特幣中心化
- 區塊鏈鼻祖比特幣之13:比特幣原始碼編譯詳解區塊鏈比特幣原始碼編譯
- 區塊鏈鼻祖比特幣之4:獨特交易設計區塊鏈比特幣
- 區塊鏈鼻祖比特幣之6:詳解比特幣的密碼攻擊與分散式雙花攻擊區塊鏈比特幣密碼分散式
- 區塊鏈鼻祖比特幣之5:獨特交易模式的優勢與困境解決區塊鏈比特幣模式
- 區塊鏈中的資料結構之 Merkle Tree區塊鏈資料結構
- 比特幣和區塊鏈(2):比特幣中區塊鏈的實現比特幣區塊鏈
- 區塊鏈鼻祖比特幣之3:驗證訊息真偽的數字簽名區塊鏈比特幣
- 區塊鏈鼻祖比特幣之8:分叉帶來的雙花支付、51%攻擊與解決辦法區塊鏈比特幣
- 基於Java語言構建區塊鏈(六)—— 交易(Merkle Tree)Java區塊鏈
- 比特幣學習筆記——————7、區塊鏈比特幣筆記區塊鏈
- 比特幣區塊分析比特幣
- “區塊鏈與比特幣”-架構師之路年終總結區塊鏈比特幣架構
- 精通比特幣(第九章)【區塊鏈】比特幣區塊鏈
- 資源 | 區塊鏈比特幣設計素材合集區塊鏈比特幣
- 區塊鏈筆記(2)直觀感受比特幣區塊鏈筆記比特幣
- 比特幣的私鑰【區塊鏈生存訓練】比特幣區塊鏈
- 比特幣區塊鏈關係密切,但並不等於!比特幣區塊鏈
- 區塊鏈和比特幣常見的七大誤區區塊鏈比特幣
- 5.1 比特幣區塊擴容比特幣
- 各國政府的態度——從比特幣到區塊鏈比特幣區塊鏈
- 阿里巴巴與比特幣和區塊鏈密不可分的關係阿里比特幣區塊鏈
- 比特幣的區塊結構解析比特幣
- [譯] BigQuery 中的比特幣:使用公共資料分析區塊鏈比特幣區塊鏈
- 中國發布最新區塊鏈排名:EOS居首,比特幣第十區塊鏈比特幣
- 以太坊和比特幣區塊鏈的異同(一些QA)比特幣區塊鏈
- 2018年區塊鏈與加密貨幣技術比特幣以太坊全套零基礎視訊教程區塊鏈加密比特幣
- 區塊鏈資料管理平臺開發,多節點聯盟區塊鏈搭建區塊鏈
- 區塊鏈輕節點:“身”輕,責任重區塊鏈
- 區塊鏈之比特幣的私鑰,公鑰和地址是什麼?區塊鏈比特幣
- ICO的前世今生:5分鐘瞭解區塊鏈和比特幣(上)區塊鏈比特幣
- Python 從零開始構建自己的比特幣區塊鏈系統Python比特幣區塊鏈
- Django作者闡述比特幣和區塊鏈的主要技術主張Django比特幣區塊鏈