北大肖臻老師《區塊鏈技術與應用》課程鏈接:點擊這里
全系列文章鏈接:點擊這里
主要補充內容及圖片來源:《區塊鏈:技術驅動金融》
該系列文章如中有任何侵權內容,或者有鏈接無法打開、圖片加載上傳失敗等情況,請及時與我個人聯系洗掉或修改,
一、哈希指標
關于區塊鏈的資料結構,我們主要討論哈希指標(hash pointer)及其應用,

(圖3.1 哈希指標,source:《區塊鏈:技術驅動金融》)
哈希指標是一個指向資料存盤位置及其位置資料的哈希值的指標,我們可以利用哈希指標構建各種各樣的資料結構,
一個普通的指標可以告訴我們資料存盤的位置,但哈希指標不但可以告訴我們資料存盤的位置,還可以讓我們驗證資料有沒有被篡改過,
二、區塊鏈
區塊鏈,即是一個個區塊組成的鏈表,它和普通鏈表的區別就在于它用哈希指標代替了普通指標,

(圖3.2 區塊鏈,source: 課程截圖)
第一個區塊叫做創世區塊(genesis block),最后一個區塊是最近產生的區塊(most recent block),每個區塊包含指向前一個區塊的哈希指標,最后區塊的H()保存在系統里,
在區塊鏈中,上一個區塊指標被置換為哈希指標,因此,每個區塊不僅告訴我們上一個區塊的值在哪兒,還包含了該值的摘要(digest),使我們能夠驗證那個值是否改變,

(圖3.3 防篡改日志,source:《區塊鏈:技術驅動金融》)
如圖,如果有人修改區塊鏈中任意部位資料,那么就會導致下一個資料塊的哈希指標不正確,
區塊鏈,牽一發而動全身,會引發多米諾骨牌效應,為了保證整個內容一致,就算他修改了所有哈希指標,使其與修改過的資料一致,最終也不能修改頭部資料,只要我們保存好鏈表頭部的哈希值,我們就能檢測到篡改行為,
三、梅克爾樹(Merkle tree)
位元幣中另外一個資料結構是梅克爾樹,它與二叉樹(binary tree)的區別就是哈希指標代替了普通指標,

(圖3.4 梅克爾樹,source:《區塊鏈:技術驅動金融》)
假設有很多包含資料的區塊,這些區塊就構成了樹的葉子(節點),
將這些資料區塊兩兩分組,然后為每一組建立一個有兩個哈希指標的資料結構,每個指標對應一個區塊,這些資料結構就構成了樹的下一個層次,
指向下一層資料區塊的指標被存盤在上一層的父節點(parent node)中,向上看最后到達樹的根節點,向下一直分組得到一個單一區塊,即樹根節點,
我們能通過哈希指標回溯到串列任何位置,保證資料確實未經篡改,
就像區塊鏈一樣,當有人篡改了樹底部一些資料區塊,就會導致上一層的哈希指標不匹配,對方繼續篡改這個區塊,改動資料的行為最終將傳遞到樹的頂端,而他將不能篡改我們存盤的哈希指標,
只要記住最頂端的哈希指標,任何企圖篡改任何資料的行為都能被我們檢測到,
四、隸屬證明(Merkle proof)
梅克爾樹一個特點是它能實作簡潔的Merkle proof.
現在假設A想要證明某個資料區塊隸屬于梅克爾樹,而我們只用記住樹根節點,A展示資料塊資訊,以及從該資料區塊通向樹根節點的那些區塊,我們可以忽略樹的其余部分,因為這些區塊已經足夠讓我們驗證通往樹根節點程序中所有的哈希值,



(source: 肖臻老師homepage slides)
簡單的說,即為了證明某個資料區塊來自一個梅克爾樹,我們只需要找到該資料區塊到樹根節點的路徑,

(圖3.5 隸屬證明,source:《區塊鏈:技術驅動金融》)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/294534.html
標籤:區塊鏈
上一篇:一文剖析ETM Network聚合協議,旨在打造全球最普及最全面的DEFI生態系統
下一篇:EOS (2)石墨烯介紹
