iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 13
0
Blockchain

商管學生如何從零開始學習區塊鏈系列 第 13

DAY13 甚麼是Merkle Tree Hash?

  • 分享至 

  • xImage
  •  

今天我們要介紹Merkle Tree機制和區塊的組成,我們依照Hash的結構可以分成線性的Hash和Merkle Tree Hash,Merkle Tree是一種樹形資料結構,讓一筆筆的Hash值(就像樹的葉子一樣),兩兩一對組成一個新Hash值的方式,最後產生的一個Hash值,被稱為Merkle Tree Root(就像樹根一樣),這個最後的Hash值會被記錄到區塊頭(Block Header)中,Merkle Tree結構在計算交易或狀態更改的Hash上很有效率。

大概長這樣!!!
https://ithelp.ithome.com.tw/upload/images/20190924/20120814aAsPdCBhVY.jpg
提到了區塊頭(Block Header),就讓我們來了解一下區塊的組成吧!
在以太坊區塊鏈中,區塊可以分成兩個部分,區塊頭(Block Header)和區塊身體(Block Body),區塊身體(Block Body)中的數據是我們的交易資料,那我們來看看區塊頭(Block Header)中的數據有哪些呢?有很多我們之前提過的東西,大家應該會有印象,包括及Nonce 隨機數、Gas的費用和限制、Difficulty區塊的難度和timestamp 時間戳(就是訊息記錄的時間)等,今天我們要講的是在區塊頭中,三個用Merkle Tree的Hash 值。
以太坊區塊鏈中有三個Merkle Tree Root的Hash值,我們的三大樹根是狀態根Hash值(StateRoot)、交易根Hash值(TransactionsRoot)以及收據根Hash值(ReceiptsRoot)。以太坊區塊鏈的交易執行完成後,會發生狀態(state)的改變,因此會計算狀態根的Hash值,區塊中的全部交易會構成交易根的Hash值,每筆交易的收據則構成收據根的Hash值。

現在,讓我們用狀態根的Hash值來舉例,以太坊的智能合約執行會導致狀態的改變,每個狀態更改都會重新計算狀態根Hash,但並不是所有狀態(state)的Hash,只需要重新計算樹結構中受影響的路徑,我們以簡單的數學計算來舉例,當狀態5改變為13時,這導致19的路徑和狀態根64(實際上是Hash值)被重新計算。如果要驗證任何交易,你也不必檢查驗證整個交易,只需要檢查一個樹的路徑就可以(某根樹枝)。
https://ithelp.ithome.com.tw/upload/images/20190924/20120814W9jTseJdXA.jpg
我們甚麼時候使用線性的Hash?甚麼時候又要使用Merkle Tree Hash呢?
當我們計算狀態根、交易根以及收據根的Hash值,我們使用樹結構來計算,那當我們要驗證計算的是包括上面這三個的整個區塊時,我們就可以使用線性的Hash。

加上我們今天所提到的三個樹根,在以太坊中有很多種Hash,包括帳戶地址、數字簽名、狀態根Hash值(StateRoot)、交易根Hash值(TransactionsRoot)、收據根Hash值(ReceiptsRoot)和區塊頭Hash,區塊組成中還有所謂的Parent Hash和Ommer Hash,我們還沒提到,下一篇我將帶大家了解Ommer Block,我們又會提到一次PoW喔!那我們明天見~


上一篇
DAY12 甚麼是hash?
下一篇
DAY14 Parent Hash和Ommer Hash
系列文
商管學生如何從零開始學習區塊鏈30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言