- 哈希指標(hash pointers):存放結構體的起始地址和哈希值,
- Block chain is a linked list using hash pointers:
??每一個區塊都包含指向前一個區塊的hash指標
??整個區塊(含前一個區塊的hash值)一起取hash值,然后存放到下一個區塊中,
??上述方式可以實作tamper-erident log,只需保存最后一個hash值,即可檢測出對區塊鏈任何部位的修改,
- Merkle tree:Merkle tree用hash指標代替了binary tree中的普通指標,可用于提供Merkle proof,
??只需保存根hash值,即可檢測出對樹中任意部位的修改,
??底部的data blocks區塊包含了交易資訊,
-
位元幣中區塊有兩種:
??1. 全節點:保存整個區塊的內容,含有header和body,
????block header(存放了根hash值,無交易的具體內容)
????block body(存有交易的串列)
?? 2. 輕節點:只保存block header, -
位元幣系統的區塊鏈中,每個區塊都有一個Merkle tree:
- 如何向沒有保存交易串列的輕節點證明交易已經完成?—— Merkle proof(proof of membership)
??找到待證明的交易區塊tx,全節點向輕節點提供自交易節點往上到根節點程序中的部分hash值,輕節點SPV驗證計算出的根hash與block header中的根hash是否相等,如果兩者相等,則證明交易確實已經完成,整個程序構成了Merkle proof,
??不安全點:調整右邊(紅色H( ))不用驗證的hash值,使得修改后左邊(綠色H( ))的hash值與右邊調整后的hash的hash保持不變,實際上不可行,哈希函式的collision resistance性質保證,
- proof of non-membership 交易不存在證明
??1. 窮舉搜素(向輕節點提供整個Merkle tree)
??2. Sorted Merkle tree
??計算需要驗證交易的hash值,找到該hash值在hash序列中的排序位置,如圖紅色部分所示,
??這時提供的proof是第三個第四個葉節點都要往上到根節點,如果其中哈希值都是正確的,最后根節點算出的哈希值也是沒有被改過的,說明第三、四個節點在原來的merkle tree里面,確實是相鄰的點,通過驗證圖中黃色部分的兩個交易在Sorted Merkle tree中是相鄰的點,從而說明Merkle tree中無待驗證的交易,
- hash指標另一個用途:只要一個資料結構是無環的(非回圈鏈表),都能用哈希指標代替普通指標,有環的哈希值沒法計算,沒法確定一個哈希值固定的區塊,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/299014.html
標籤:區塊鏈
