iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 5
0
Blockchain

Go to Blockchain: 從區塊鏈基礎到用 Go 實作區塊鏈系列 第 5

Go to Blockchain: Day5 區塊鏈的數據儲存

  • 分享至 

  • xImage
  •  

今天就來繼續講一下區塊鏈的數據架構吧

Merkle Tree Root

img

  • Merkle Tree 是一種樹狀結構,我們可以利用這種樹狀結構來獲得一串資料的 Hash 值
  • 做法:
    1. 首先把資料切成好幾個 Block ,簡單來說 Block 就是一小塊的資料(L1 ~ L4)
    2. 將這些資料的每一個經過 Hash (Hash 0-0, Hash 0-1, Hash 1-0, Hash 1-1)
    3. 將他們兩兩接在一起(Hash 0-0+Hash 0-1, Hash 1-0+Hash 1-1)
    4. 重複2. ~ 3.,直到只剩下一個 Tree root
    5. 這就是 Merkle Tree Root

時間戳記

  • 代表從格林威治時間1970年01月01日00時00分00秒(台灣時間08時00分00秒)起至現在的總秒數
  • 在區塊鏈上代表了在甚麼時間發生了甚麼,並且時間戳記也會保證每個區塊是依照順序相連的。

區塊與鍊

  • 區塊鍊顧名思義是由許多個區塊組成的,而這些區塊再被一個一個栓再一起來形成區塊鏈

    https://ithelp.ithome.com.tw/upload/images/20190921/20120131tlXkfHs1Ft.png

  • 每個區塊的資料又包含兩類資料-區塊頭(Block Header)和區塊體(Block Body)

    • 區塊頭(Block Header)

      包含以下三種資料:

      1. 前一個 Block 的 Hash(PrevBlockHash)
      2. 時間戳記(Timestamp)Nonce(數字)挖礦難度(Difficulty Target)
        • Nonce 和 Difficulty Target 會在 POW 那邊解釋~
      3. 當前 Body 中**默克爾樹根 ( Merkle Tree Root )**的 Hash 值
    • 區塊體(Block Body)

      • 交易紀錄 ( Transactions ):即為產生該區塊的數據,並以Merkle Tree Root 表示,而這些資料包含了生成時間、引用交易的Hash值、交易記錄索引編號、比特幣支出地址等等的數據。
      • 這也就是帳本的部分,每一個區塊的 Body 都會有

創始區塊

  • 創始區塊就是第一塊區塊,PrevBlockHash 會是 NULL 之類的東西
  • 在創建區塊鏈時,首先要建立創世區塊 Genesis Block
  • 並利用Header 中的 PrevBlockHash 來把前一個的 Hash 值記住,如此就會是一個完整的鏈

不可修改性

  • 由於交易紀錄的變動也就代表了 Header 之中的 Body 的 Merkle Tree Root 值會發生變動,而就會導致這整個 Block Header 的 Hash 也會改變,因此未保留鏈的完整性,下一個區塊的 PrevBlockHash 也必須變更
  • 因此如果今天有人想要修改一個區塊的交易紀錄,會需要把後續所有的 Block 都修改才行,而這幾乎就是不可行的

參考資料

  1. 圖文詳解哈希樹-Merkle Tree(默克爾樹)算法解析
  2. 區塊鏈Blockchain – 創世區塊、區塊、Merkle Tree、Hash
  3. 《圖解區塊鏈》原理篇(中)Part 1

上一篇
Go to Blockchain: Day4 區塊鏈的密碼學基礎-雜湊與非對稱加密
下一篇
Go to Blockchain: Day6 區塊鏈的網路架構
系列文
Go to Blockchain: 從區塊鏈基礎到用 Go 實作區塊鏈30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言