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是在區塊頭中具體如下圖。
後記:
因爲Unyielding_L 在週末兩天竟然寫了兩篇博客,而且揚言要出乾貨,我追不上Unyielding_L了,內心愧疚寫了兩篇。看了Unyielding_L的文章和他探討了一下,我發現以前寫博客有一個誤區,就是什麼知識點都想細寫,最後主題就不再凸顯。
我之前寫文章都是想到什麼寫什麼,現在優化一下,先寫目錄在寫內容,例如下圖,這樣能專注思路更加清晰。其次就是圖片寬度保持在500-600這樣手機看起來也不會拉長的很厲害。
審閱:@ Unyielding_L
以上是我的拙見,有什麼意見Thanks♪(・ω・)ノ