解释 Namada 0.13.3 共识分叉
Namada 0.13.3于1月25日发布,以解决在时期35开始时测试网的停顿问题。停顿的原因是当小额债券转换为Tendermint投票权时出现了四舍五入误差。
然而,在升级到0.13.3后,验证器集合分叉,链无法继续。我们调查了分叉的每一侧的存储转储,以确定状态何时发生了分歧。经过一些调查,我们发现节点在每个时期为隐私池激励编写新的转换的方式存在微妙的错误,而较早的链停顿将这个问题暴露出来。
具体来说,新的转换在计算完成后立即提交到存储中——在共识正确提交区块之前。因此,对于大多数验证器来说,至少在时期35开始时,转换集合更新了两次,因为在停顿期间尝试的区块3501的更新也包括其中。然而,一些验证器在更新到0.13.3时从头同步了他们的节点,因此重新播放了整个链状态,从而在过程中正确更新了转换一次。
如果有足够的验证器从头同步并在过程中达到正确的转换状态,运行中的测试网可以使用Namada 0.13.3继续。
我们还开发了一种修复方法,其中转换更新只在区块提交时与区块提交一起提交,通过写入已完成但尚未提交状态更改的写入日志,而不是直接写入存储中。