【发布时间】:2017-05-31 03:41:44
【问题描述】:
我正在尝试用这篇论文实现一个默克尔树一致性算法:
但是,我有点卡在一致性检查上,因为当我执行 ConsProofSub 部分时,我总是陷入无限循环。
例子:
新树有8,老树有7叶子。
通过前面的函数,我得到m = 7,我的新树的叶子作为向量E和true作为b。
函数遍历递归代码流,直到我们到达这种情况:
E 现在有2 元素,所以n = 2。
m = 1,由于之前对 m < k 和 b = false 的递归调用中的减法。
如果m 和n 不相等,我们不属于m = n && b = false。
k 现在再次被计算为2,因为上限将生成的1/2 从log2(n)/2 更正为1。
我们陷入m <= k 的情况,我们再次递归调用具有完全相同参数的函数。现在我们处于无限循环中。
但是,我似乎无法弄清楚我做错了什么。我觉得k 计算中的上限是问题所在。它基本上使得它不可能跳出循环,因为在一些迭代之后k 似乎总是高于m。
对我的错误有什么建议/提示吗?
编辑:有趣的是,当 n 为奇数时,算法 似乎 可以完美运行。它似乎只对偶数失败。我刚刚用一棵 7 片叶子的新树进行了尝试,它就像一个魅力,提供了证明一致性所需的正确节点。
但是,我仍然无法弄清楚必须进行哪些更改才能使其适用于偶数。
【问题讨论】:
标签: algorithm recursion hashtree merkle-tree