merkle樹是一種雜湊二叉樹,它是一種用作快速歸納和校驗大規模資料完整性的資料結構。這種二叉樹包含加密雜湊
值。術語「樹」在計算機學科中常被用來描述一種具有分支的資料結構,但是樹常常被倒置顯示,「根」在圖的上部同時「葉
子」在圖的下部。來一張圖直觀體驗下:
其中ha 是資料塊a的hash,........ hp資料塊p的hash。hab是 hab=sha256(sha256(ha + hb))。ha和hb被連線在一起,作為hab的輸入,然後層層hash,直到產生root hash。這是完美的計算,剛好兩兩配對。如果出現奇數個節點怎麼辦?預設的做法是 一旦出現奇數個節點,那麼最後那個無法配對的節點hash將會被複製乙份,也就是說自己和自己配對。
1、快速比較大量資料。對每組資料要先進行 排序,然後構建merkle樹,如果root hash一樣,則2組資料一致,否則不相同。hash計算速度可以很快速度,所以可以在預計時間內完成merkle樹的構建,利用merkle樹能帶來巨大的比較效能優勢。
root hash天差地別,2組資料不一樣。其實只有hash3的最後乙個位元組(3)和hash7的最後乙個位元組(4)不一樣。
2、快速定位修改。如果某個葉子節點的資料發生改變,那麼該葉子資料的hash必然會發生改變,層層傳遞後最終會導致root hash發生改變。通過自頂向下的查詢,o(lgn)時間可以定位到哪個資料塊發生改變。
index的返回值是3 ,即第4個資料塊不一樣。
merkle樹主要用於區塊鏈中的:
1、區塊中所有交易的指紋,即root hash 。任何乙個交易變動都會導致root hash改變。
2、輕量級客戶端的spv驗證。
假如要驗證txb是否存在區塊中,向相應的區塊獲取 ha,hcd。隨後利用ha,hcd計算出hash root habcd,再與本地比區塊頭中的merkle root比較,如果相同,則表示txb存在區塊中。
到這,不知道有沒有人想到 幹嘛那麼麻煩,hb直接發給相應區塊,這個hash如果存在,相應區塊直接返回個true不就行了?這樣的話,惡意節點會作弊,直接告訴你true,即使沒有存在。而想偽造一棵包含hb的merkle樹且merkle根和本地區塊頭中的merkle根相同,基本是不可能的。
區塊鏈學習筆記(四) Merkle樹
一 字典樹 字典樹的三個基本特徵 1 根節點不包含字元,為空,除根節點外每乙個節點只包含乙個字元 2 從根節點到某乙個節點,路徑上經過的字元連線起來,就是該節點對應的字串 3 每個節點包含的所有子節點的字元都不相同 優勢 相比較於雜湊表,使用字典樹在查詢共有字首key的資料時十分高效,當字首為空時,...
位元幣區塊結構 Merkle 樹及簡單支付驗證分析
在工作量證明中出現過乙個區塊資訊截圖 區塊 細心的同學一定已經在裡面發現了很多未講的其他資訊,如 時間戳,版本號,交易次數,二進位制雜湊樹根 merkle根 等。我們來看看乙個區塊結構到底是怎樣的 如上圖 下文稱 區塊結構圖 所示 每個資料區塊包含區塊頭和區塊體。區塊頭封裝了當前版本號 前一區塊雜湊...
資料結構之鏈棧
本次為大家帶來的是資料結構中的鏈棧,鏈棧就是儲存結構是鏈式的 鏈棧的定義 typedef struct node node node top 和單鏈表的定義並無二致,僅僅多了乙個top指標,關鍵在於使用者如何使用的。鏈棧包括 建立鍊錶 和單鏈表的頭插法一樣 壓棧 pushstack 彈棧 popst...