我正在尝试将hyperledger fabric应用到我的项目中,所以正在研究它。
我面对的是json data中的config块,但在这一部分中我感到非常困惑。
"BlockDataHashingStructure": {
"mod_policy": "Admins",
"value": {
"width": 4294967295
},
"version": "0"
},官方文档说,“这个值指定Merkle树的宽度”,但是我不知道Merkle树的宽度是多少。有没有人能很容易地给我解释一下Merkle树的宽度的含义?
谢谢。
发布于 2018-04-10 15:04:59
我会试着回答,但我不是merkle trees的专家(所以如果专家评论我的答案就好了!!)树的宽度是您连接在一起作为下一个树级别的散列输入的字节数或字节数组。
通常我们看到二叉树=>,树的每个节点都有2个子节点。所以宽度应该是2(或者16代表2个字节,我不知道抱歉)。
但是看看使用merkle树的MD6算法。树不是“二进制”的,每个节点有4个子节点:

值4294967295是uint32的最大值。因此,树将具有最大宽度大小。这将导致只有两个级别的树:级别0“包含”块的所有字节,级别1“包含”级别0的连接字节的散列。
看起来fabric还不支持“真正的”merkle树(超过2级)
树的构造似乎是通过使用函数Bytes完成的(参见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树在hyperledger fabric中是否有用。我对使用merkle树的理解是为了简化块中事务是否存在的验证。但在hyperledger中,您不需要简化这一过程,因为对等节点与区块链(levelDB或couchDB)一起维护一个状态数据库。但我可能是错的。
https://stackoverflow.com/questions/49744274
复制相似问题