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