我最近在研究 Midnight 的底层机制,发现一个有意思的但是容易被大多数人跳过的设计:它的区块共识用了两套机制同时运行,非大多数公链只有一套。
先说我为什么觉得这件事值得认真看。一笔交易被写进区块,和这笔交易真正"不可撤销",是两件不同的事。很多人不知道这个区别,因为在使用层面感受不到:但在网络压力大、出现分叉、或验证者之间产生分歧的时候,这个区别会变得非常重要。
Midnight @MidnightNetwork 用的是AURA加GRANDPA的双层结构。AURA负责出块,它把时间切成固定的时间槽,验证者按照轮换顺序依次出块,保证网络持续往前走,不会停顿。 但AURA出的块不是最终的。GRANDPA负责最终确认。它不出块,只监听网络里已经产生的块,然后让验证者对"哪条链是最好的链"进行投票。一旦超过三分之二的GRANDPA验证者对某个块投票,这个块就被视为不可撤销的最终状态,永久写入历史。
我这里用一个更直白的比喻来说:AURA像是工厂的生产线,负责不停地生产;GRANDPA像是质检部门,负责确认哪些产品真的过关,可以出厂。生产线停了,工厂就没有产出;但没有质检,产出的东西就没有保障。

这套双层设计的好处是,GRANDPA不是一个块一个块地确认,而是一次性确认整条链上的多个块,效率更高,对网络延迟的容忍度也更强。这对于 #night 这样一个主打隐私计算的链来说尤其重要,隐私证明的生成本身就需要计算时间,如果共识层还因为网络波动频繁出问题,整个系统的可靠性会大打折扣。
关于Midnight在测试网上GRANDPA的实际确认时间数据我还在找具体的数据,这是我还没有答案的问题。如果有人跑过节点,实测过确认延迟,我很想看这个数字。

等月底主网上线后这套双层共识机制在真实网络压力下的表现,是第一批可观测的数据。

这不是最性感的研究方向,但共识机制够不够稳,是所有上层应用能不能可靠运行的前提。在主网上线之前把这部分搞清楚,比主网上线之后再去找答案,要值得得多。
你觉得,AURA加GRANDPA的双层设计,是对隐私链的合理加固,还是不必要的复杂度?👇