我正在尝试用本文实现merkle树一致性算法:
然而,我有点坚持一致性检查,因为当我执行ConsProofSub部分时,我总是处于无限循环中。
示例:
新树有8
,旧树有7
个离开。
完成上一个功能后,我获取m = 7
,新树的叶子为向量E
,true
为b
。
该函数通过递归代码流,直到我们达到这种情况:
E现在有2
个元素,因此n = 2
。
m = 1
,由于m < k
的递归调用中的先前减法以及b = false
。
如果m = n && b = false
和m
不相等,我们不属于n
。
k
现在再次被计算为2
,因为上限正在将1/2
从log2(n)/2
更正为1
。
我们属于m <= k
情况,我们再次以递归方式调用具有完全相同参数的函数。现在我们处于无限循环中。
然而,我似乎无法弄清楚我做错了什么。我觉得k
计算中的上限就是问题所在。它基本上不可能离开循环,因为k
在一些迭代后似乎总是高于m
。
对我的错误有什么建议/暗示吗?
编辑:有趣的是,当n是奇数时,算法似乎完美地工作。它似乎只为偶数而失败。我只是尝试了一棵新的7片叶子树,它就像一个魅力,提供了证明一致性所需的正确节点。
但是,我仍然无法弄清楚要使其与偶数一起使用会发生什么样的变化。