比特幣中MerkleTree默克爾樹的構造

有點比特幣基礎的應該都知道,在一個區塊的區塊頭中有一個字段叫RootHash,這個根哈希是該區塊中所有交易構建默克爾樹之後計算的樹根哈希。但是基本上所有的文章都只說到如果交易數不是偶數個的時候需要補齊,但是具體怎麼補齊呢?下面簡單說明一下,以解這個細節上的疑惑。

一、3個交易時

如果只有3個交易Tx1,Tx2,Tx3,那麼在構造默克爾樹的時候,只需要把最後的那個Tx3和自己再算相加,計算Hash33即可。如圖:

Tx3

二、5個交易時

如果是有4個交易,那最簡單,沒什麼好說的,接下來說如果有5個交易的情形,那麼這裏就需要做多次自己和自己相加,然後計算上一級哈希的情況,具體計算如圖:

Tx5

三、6個交易時

那麼如果有6個交易的時候,是把Tx6複製多次進行填充嗎?不是的!!!而是在計算的過程中遇到單個Hash的時候進行重複,也就是對H56就行重複,所以實際上是把Tx5和Tx6進行了填充,如圖:

UntitledImage

總之在計算默克爾樹的根哈希時,都是簡單的從下到上層層推進,每一層在算的時候如果下面的哈希是奇數,就複製一個哈希,在5個交易時,計算H55就是複製了一份H5,然後上一層計算H5555的時候下面又是奇數,所以複製了一份H55。同理在計算6個交易的默克爾樹時,算H5656時,因爲下面只有一個H56,所以複製了一份H56。對於更大量的交易數的時候,處理邏輯都是這樣的。

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