比特幣中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。對於更大量的交易數的時候,處理邏輯都是這樣的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM