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