比特幣的Merkle tree

1 區塊鏈的數據結構

1.1 特殊的單鏈表

這個單鏈表就特殊在它是反過來,而且是hash指針作爲記錄當前最近的區塊。反過來的意思是指指向是反向的,如下圖:

 解析一下上面的圖,第一個是創始區塊,第三個塊假如命名爲H3(m3) ,H3(m3)= H2(m2+H(m2)),同理,第二個塊相應命名爲H2(m2) ,H2(m2)= H1(m1+H(m1)),hash指針記錄的是當前最新的結點的Hash值。

1.2 如何防止篡改

假設我要修改第一個區塊,第一個區塊的值改變了那就得產生一個新的hash值(加密原理),因爲H2(m2) ,H2(m2)= H1(m1+H(m1))所以H1改變H2也會改變,H2改變H3也會改變,如此類推,只要某一個區塊改變它往後的所有區塊都會產生改變,牽一髮動後半身,但是假如你十分囂張,覺得自己的算力可以牛*到重新創造hash衝突把後面的區塊安排的明明白白,那我也無話可說。

2 Merkle tree

2.1 Merkle tree的數據結構

最底層的葉子結點是有信息的區塊,每一個區塊各取一個hash值,兄弟結點的hash值組成一個父結點,兩個父結點再組成爺結點,爺結點再……最後得到的hash值作爲根哈希值。

2.2 輕結點和全結點

輕結點就是保存H(m)的值,而全結點就是指保存所有區塊的結點。舉個例子:BTC的錢包就是輕結點只保存根哈希。

2.3 怎麼驗證交易成功

紅色的date block可以生成最靠近的紅色H(m),最靠近藍色H(m)是向全結點請求的結果,兩個hash結果得到橙色H(m)最後結合向全結點請求的綠色H(m)最後就得到了一個H(m),再和根哈希值比較,假如相等就是指已經添加到鏈上。

2.4 Merkle tree在區塊的什麼地方

Merkle tree是在區塊頭中具體如下圖。

圖源於簡書作者:灰色軌跡_36ca


後記:

因爲Unyielding_L 在週末兩天竟然寫了兩篇博客,而且揚言要出乾貨,我追不上Unyielding_L了,內心愧疚寫了兩篇。看了Unyielding_L的文章和他探討了一下,我發現以前寫博客有一個誤區,就是什麼知識點都想細寫,最後主題就不再凸顯。

我之前寫文章都是想到什麼寫什麼,現在優化一下,先寫目錄在寫內容,例如下圖,這樣能專注思路更加清晰。其次就是圖片寬度保持在500-600這樣手機看起來也不會拉長的很厲害。


審閱:@ Unyielding_L

以上是我的拙見,有什麼意見Thanks♪(・ω・)ノ

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章