merkletree被廣泛的應用在位元幣技術中,merkle tree 是一種資料結構,用於驗證在計算機之間和之間儲存,處理和傳輸的任何型別的資料。 目前,merkle樹的主要用途是確保從對等網路中接收的資料塊未受損和未改變,和檢查其他對等網路沒有撒謊傳送假資料塊。
位元幣中每個塊中都包含了所有交易的集合簽名,這個簽名就是用merkle tree實現的,merkle樹用於位元幣以彙總塊中的所有事務,產生整個事務集合的整體數字指紋,提供非常有效的過程來驗證事務是否包括在塊中。 merkle樹乙個很重要的用處是檢查塊中是否包含指定的交易,merkle樹是通過遞迴雜湊節點對來構造的,直到只有乙個雜湊。
merkle tree,是一種樹(資料結構中所說的樹),網上大都稱為merkle hash tree,這是因為 它所構造的merkle tree的所有節點都是hash值。merkle tree具有以下特點:
1. 它是一種樹,可以是二叉樹,也可以多叉樹,無論是幾叉樹,它都具有樹結構的所有特點;
2. merkle樹的葉子節點上的value,是由你指定的,這主要看你的設計了,如merkle hash tree會將資料的hash值作為葉子節點的值;
3 非葉子節點的value是根據它下面所有的葉子節點值,然後按照一定的演算法計算而得出的。如merkle hash tree的非葉子節點value的計算方法是將該節點的所有子節點進行組合,然後對組合結果進行hash計算所得出的hash value。
例如,下圖就是乙個merkle hash tree形狀,如果它是merkle hash tree,則節點7的hash value必須是通過節點15、16上的value計算而得到.
這裡我們使用乙個二叉樹來模擬merkle tree的操作
過程分為:
- 準備交易的資料
- 計算出每個資料的雜湊值,從左到右逐步組成樹的左右節點
- 執行迴圈直到最後乙個節點
這裡核心的演算法就是構造樹,並且要計算每個節點的雜湊值
private
list
<
string
> getnewtxlist(list
<
string
> temptxlist)
// sha2 hex value
string sha2hexvalue = getsha2hexvalue(left + right);
newtxlist.add(sha2hexvalue);
index++;
}
測試:
我們構造乙個5個葉子節點的二叉樹,然後測試返回根節點的雜湊值
public static void main(string args)
執行結果
區塊鏈 默克爾樹 Merkle Tree
merkle tree 也被成為 hash tree,見名思意,這種樹其實就是用來儲存 hash 值的一種樹。關於hash我們在之前的文章已經說過了,對於乙個輸入,都有乙個唯一的長度的固定的輸出,且以我們目前的科技狀況,無法找到兩個不同的輸入使得輸出一樣。簡單來說就是 y h x y h x 我們無...
區塊鏈 區塊鏈雜湊演算法
雜湊演算法是區塊鏈中保證交易資訊不被篡改的單向密碼機制。雜湊演算法接收一段明文後,以一種不可逆的方式將其轉化為一段長度較短 位數固定的雜湊資料。它有兩個特點 加密過程不可逆,意味著我們無法通過輸出的雜湊資料倒推原本的明文是什麼 輸入的明文與輸出的雜湊資料一一對應,任何乙個輸入資訊的變化,都必將導致最...
區塊鏈演算法
交易記錄就是這個樣子的 賬本可以理解為一組交易記錄,乙個下列結構稱之為乙個區塊hash值 賬本的摘要,序號 記賬時間 交易記錄1 交易記錄2 指向下乙個區塊的指標 第乙個區塊 hash 賬本 hash值 後續區塊 hash 前乙個賬本的hash值,新賬本 新的hash值 產生新的乙個區塊 區塊使用鍊...