Merkle树的宽度是多少

时间:2018-04-10 02:15:43

标签: hyperledger-fabric

我正在尝试将hyperledger面料应用到我的项目中,以便进行研究。

我正面对json数据中的配置块,但在这部分却非常困惑。

"BlockDataHashingStructure": {
  "mod_policy": "Admins",
  "value": {
    "width": 4294967295
  },
  "version": "0"
},

官方文件说,"此值指定Merkle树的宽度" 但我不知道Merkle树的宽度是多少。 有没有人可以轻易解释我对Merkle树宽度的意义?

谢谢。

1 个答案:

答案 0 :(得分:0)

我会尝试回答,但我不是merkle树的专家(所以如果专家检查我的答案会很好!!)。树的宽度是您连接在一起作为下一个树级别的哈希的输入的字节数或字节数。

通常我们会看到二叉树=>树的每个节点都有2个孩子。所以宽度为2(或2个字节为16,我不知道对不起)。

但是看一下使用merkle树的MD6算法。树不是“二进制”,每个节点有4个子节点:

https://fr.wikipedia.org/wiki/MD6

值4294967295是uint32的最大值。因此树将具有最大宽度大小。它将导致只有2个级别的树:级别0“包含”块的所有字节,级别1“包含”级别0的连接字节的哈希。

织物似乎不支持“真正的”merkle树(超过2级)

树构造似乎是通过使用函数字节(参见https://github.com/hyperledger/fabric/blob/13447bf5ead693f07285ce63a1903c5d0d25f096/protos/common/block.go

来完成的
// Bytes returns a deterministically serialized version of the BlockData
// eventually, this should be replaced with a true Merkle tree construction,
// but for the moment, we assume a Merkle tree of infinite width (uint32_max)
// which degrades to a flat hash
func (b *BlockData) Bytes() []byte {
return util.ConcatenateBytes(b.Data...)
}

我不知道多级merkle树是否适用于超级边缘结构。我对使用merkle树的理解是简化块内事务存在的验证。但是在hyperledger中,你不需要简化这个,因为对等体在区块链(levelDB或couchDB)旁边维护着一个状态数据库。 但我错了。