我有一个带有私有数据的 JSON 对象。它具有以下(复杂!)结构:
{
name: "JB",
age: 35,
children:
[ {
name: "Alice",
age: "5",
favColor: "pink"
},
{
name: "Bob",
age: "8",
favColor: "blue"
},
{
name: "Charlie",
age: "9",
favColor: "green"
},
]
}
我想创建一个哈希树,允许其他人验证我发送给他们的数据片段——例如,通过在公共区块链上声明根。
例如,我希望能够只分享我的年龄,并让接收者能够计算散列并检查它是否正确。稍后,我可能想向其他用户透露我的第一个孩子名叫“Alice”,她最喜欢的颜色是“粉红色”。
我的理解是默克尔树是二元的——每个节点只有两个叶子。是否有一种固定的模式或方法可以始终如一地将上述复杂结构“扁平化”为默克尔树?
或者,是否有另一种类型的哈希树结构天生就可以为数据提供这种复杂性?
例如:
Root ( = hash of name + age + children)
/ | \
/ | \
name age children (= hash of all children in array)
/ | \
/ | \
/ | \
[0] [1] [n]
/ | \
/ | \
name age favC
似乎无论树是如何构造的,重要的是原始数据的结构以某种方式被保留并且可以由验证器仔细检查。
- 例如,阻止我提供孩子的年龄而不是我自己的年龄。
- 在二叉默克尔树的情况下:考虑到叶索引可能代表完全不同的数据,具体取决于它们拥有的孩子的数量。
解决这个问题的最佳方法是什么?我正在使用 Node.JS 和整洁的Merkle Tools 包,但我不确定 merkle 树是否适合这项工作。如果我遗漏了任何重要的内容,或者您有任何澄清问题,我会尽力改进问题。
非常感谢。