比特币区块链中,每个区块都有一个Merkle Tree,区块头中的Merkle Root(也称为Merkle树的根哈希值)是由区块体中所有交易的哈希值生成的:
(1)如果一个区块仅有一个CoinBase交易(例如创世区块),这个CoinBase交易的哈希值Hash_Tx0就被用作Merkle树的根哈希值。
(2)如果一个区块有两个交易:CoinBase交易和一个其它交易,那么就将CoinBase交易的哈希值Hash_Tx0和其它交易的哈希值Hash_Tx1,按照顺序拼接在一起,然后进行SHA256(SHA256(Hash_Tx0 | Hash_Tx1))计算,得到Merkle树的根哈希值。
(3)如果一个区块有3个以上的交易,交易哈希值按顺序排列并配对。CoinBase交易的Hash_Tx0排在第一位,每一对拼接在一起,然后进行SHA256(SHA256(HashTxi | Hash_Txj))计算,形成第二排哈希排列。如果有奇数个交易哈希值,则最后一个交易哈希值复制自己组成一对,然后进行SHA256(SHA256())计算。如果第二排有超过2个以上的哈希值,则重复上一步的操作。直到只剩2个哈希值的时候,再拼接,最后进行SHA256(SHA256())计算,得到Merkle树的根哈希值。
注:CoinBase交易为区块的第一个交易,由矿工创建,也被称作:创币交易(新挖出比特币的交易)。
网友评论