區塊鏈鼻祖比特幣之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過濾器
- 區塊鏈中的資料結構之 Merkle Tree區塊鏈資料結構
- 區塊鏈鼻祖比特幣之2:可分割與去中心化區塊鏈比特幣中心化
- 區塊鏈鼻祖比特幣之7:區塊鏈在比特幣中的真正用意區塊鏈比特幣
- 區塊鏈鼻祖比特幣之1:比特幣的內涵與價值區塊鏈比特幣
- 區塊鏈鼻祖比特幣之11:比特幣困難度區塊鏈比特幣
- 區塊鏈鼻祖比特幣之9:挖礦、礦池與比特幣的產生區塊鏈比特幣
- 區塊鏈鼻祖比特幣之4:獨特交易設計區塊鏈比特幣
- 區塊鏈鼻祖比特幣之13:比特幣原始碼編譯詳解區塊鏈比特幣原始碼編譯
- 區塊鏈鼻祖比特幣之5:獨特交易模式的優勢與困境解決區塊鏈比特幣模式
- 基於Java語言構建區塊鏈(六)—— 交易(Merkle Tree)Java區塊鏈
- 比特幣與區塊鏈比特幣區塊鏈
- 區塊鏈鼻祖比特幣之6:詳解比特幣的密碼攻擊與分散式雙花攻擊區塊鏈比特幣密碼分散式
- 區塊鏈鼻祖比特幣之3:驗證訊息真偽的數字簽名區塊鏈比特幣
- 區塊鏈鼻祖比特幣之8:分叉帶來的雙花支付、51%攻擊與解決辦法區塊鏈比特幣
- 比特幣和區塊鏈(2):比特幣中區塊鏈的實現比特幣區塊鏈
- 區塊鏈資料管理平臺開發,多節點聯盟區塊鏈搭建區塊鏈
- 區塊鏈輕節點:“身”輕,責任重區塊鏈
- 深圳區塊鏈技術應用落地服務,多節點聯盟區塊鏈搭建區塊鏈
- 比特幣區塊結構Merkle樹及簡單支付驗證分析比特幣
- 區塊鏈入門——比特幣科普區塊鏈比特幣
- 《區塊鏈100問》第51-60節區塊鏈
- 區塊鏈100講:區塊鏈為什麼叫“區塊”“鏈”?區塊鏈
- “區塊鏈與比特幣”-架構師之路年終總結區塊鏈比特幣架構
- Bitcoin: 計算 Merkle Tree
- 關於區塊鏈技術的12個誤區 區塊鏈就是比特幣嗎?區塊鏈比特幣
- 區塊鏈3.0儲存礦機-YottaChain芝麻雲節點區塊鏈AI
- 區塊鏈技術應用智慧財產權上鍊存證,多節點聯盟區塊鏈搭建區塊鏈
- 區塊鏈特徵與區塊鏈技術應用落地區塊鏈特徵
- 區塊鏈開發公司區塊鏈與產業變革區塊鏈產業
- 量子計算與區塊鏈碰撞後——量子區塊鏈區塊鏈
- 區塊鏈100講:EOS環境搭建入門(私鏈節點-錢包-金鑰-賬號)區塊鏈
- 走近比特幣:一個故事看懂“區塊鏈”比特幣區塊鏈
- 比特幣學習筆記——————7、區塊鏈比特幣筆記區塊鏈
- 比特幣區塊鏈的工作原理–資訊圖比特幣區塊鏈
- 區塊鏈教程、區塊鏈指南、區塊鏈中文手冊、區塊鏈原理區塊鏈
- 勢不可擋!北大區塊鏈俱樂與鏈匯資本(溫州資本)加入超級節點!區塊鏈
- 區塊鏈3.0,人工智慧與區塊鏈的完美融合區塊鏈人工智慧