1. 程式人生 > >Merkle Tree

Merkle Tree

默克爾樹介紹及其區塊鏈中的應用

presented by 張女名

一.簡介

  • 默克爾樹,也被稱為二叉雜湊樹(binary hash tree),是一個由加密雜湊組成的二叉樹,用於高效彙總和驗證大資料集的完整性。
    這裡寫圖片描述

二.默克爾樹在比特幣中的應用

  • 在比特幣中,默克爾樹通過產生一個全部交易集的數字指紋,以彙總區塊中的所有交易,從而提供一套非常高效的流程,已驗證交易是否包含在區塊中。
  • 通過遞迴計算一對對節點的雜湊值,知道剩下一個節點,即默克爾根,就構成了一棵默克爾樹。比特幣中默克爾樹採用的加密雜湊演算法是SHA256
  • 當交易個數為奇數時,需複製最後一個交易的雜湊,保證葉子數量為偶數,形成平衡樹。
    這裡寫圖片描述
  • 為了證明一個特定交易包含在區塊中,節點只需建立log2(N)32位元組的雜湊值,形成一條從交易到根的路徑,叫做認證路徑默克爾路徑
    這裡寫圖片描述
  • 當規模增長時,默克爾樹的效率也變得非常明顯。
  • 如下表所示,展示了為證明區塊中存在某交易而建立默克爾路徑所需交換的資料量。
    這裡寫圖片描述
  • 有了默克爾樹,普通使用者節點可以只下載區塊頭(每個區塊的區塊頭80位元組),通過其他完全節點(full node)獲取一個很小的默克爾路徑,即可驗證交易是否包含在區塊中。
  • 當收到完全節點傳送來的默克爾路徑後,根據已有的交易層層計算出雜湊值,若最後的結果與區塊頭中的默克爾根一致,則證明該交易確實存在於這個區塊中。
  • 這些節點叫做簡化支付驗證(SPV, Simplified Payment Verification)節點

三.SPV節點與布隆過濾器

  • 假設一個SPV節點,它對接收到的、向它進行支付的某個地址感興趣。
  • SPV節點則在與其他對等節點(完全節點)的連線上建立一個布隆過濾器,限制只接收那些與它感興趣的地址相關的交易。
  • 當對等節點看到某個交易與布隆過濾器匹配時,就使用merkleblock訊息將相關區塊傳送給SPV節點。Merkleblock訊息包含區塊頭以及一條將區塊中感興趣的交易連線到默克爾根的默克爾路徑。

附:比特幣中區塊鏈資料結構

這裡寫圖片描述