Filecoin共识机制的探索
共识机制是区块链中最为核心的内容,业界对共识机制的探索也从未间断。从POW 到 POS,DPOS,PBFT 到现在比较热门的VDF/VRF相关的各种共识,无一不在探索更好的更安全更经济的方式。Filecoin现在无疑走在了前列。
共识机制 - 领导人选举 (LE:Leader Election)
在区块链的世界里,出块权是一个十分重要的课题。这是一个去中心化的世界,每一个参与者都有为网络服务的权利,当然也有因为服务而获取报酬的权利。这个权利就是出块权,并在出块的时候获得出块奖励和交易手续费。
那么,谁具有出块权,因为区块链是一个链式结构,每一个区块高度的出块人最好只有一个,这个人是谁呢?这就类似于我们现实生活中的领导人,每一轮出块都需要有一(或多人)人来负责,这个产生出块人的过程,就是选举。
这个选举当然不可能象我们现实世界里那样通过一人一票来投票进行,如果这样,就可能出现操纵或贿选的情况,而区块链的共识机制中,一个理想的选举模式应当具有如下特性:
选举秘密进行 (Secret)
选举是公平的 (Fair),基于一套规则,在规则的基础上概率起作用
最好每轮选举出一个领导人(Single Leader)
无法预测(Unpredictable)
十分容易验证 (Verifiable)
能够承受攻击(Anti-attack)
消耗资源不大(Efficient)
基于以上几点,POW是目前现实使用中最好的方式,但是POW有其致命的弱点,就是不满足最后一条。它需要浪费大量能源,来达成共识;另外,它不能保证每一轮只有一个领导人,因此会出现链的分叉,必须采用其他规则来进行收敛(比如最长链法则)。
共识机制的目标 - SSLE (Secret Single Leader Election)
为了克服POW的不足,有很多新的共识机制提了出来,但都不能达到POW的安全性、公平性和防攻击等各个方面的综合指标。
但从去年开始,理论界做了很多探索,自从VRF(Verifiable Random Function)和VDF(Verifiable Delay Function)提出之后,研究进展的很快。这些理论和实践包括:Algorand,Snow White, Stellar Consensus, BAR-Fault Tolerance Consensus, Mergeable Consensus 和 Filecoin提出的预期共识(Expected Consensus)。
这些共识研究要达到的目的,就是一个,实现SSLE:秘密单个领导人选举,也就是说:从一群持有不同(也可以相同)权利份额的参与者中,每一轮都可以高效地秘密地公平地选举出(仅仅)一个领导人。从这里你可以看出,SSLE其实实现了前面提到的全部7大特性。这个实现有很多好处:比如说,因为秘密,能有效地防止攻击;因为公平,能有效地激励;因为每次一人,能避免分叉;因为有效,自然节省能源。
但是,这是一个理想,但是到目前为止,尽管有很多进展,没有找到一个可行的算法和实现。所面临的难题主要是效率问题,具体讲来,可以分成如下几类:
链上效率:要实现链上尽量少的存储需求来满足共识;以及如何兼顾已有的和新进入的参与者
合理的通信复杂度:这是一个选举,如果通过大量的通信,比如安全多方计算的一些方式,完全可以实现这一目标,但是,通信过于繁复,使得成本可能增高和安全性可能降低
计算的有效性:任何的参与者都应该能够通过相对简单的计算就可以实现这一选举机制
可扩展性:设计要求支持大量的参与者,比如数十万甚至百万
强健性:作为一个共识,最好能够在全网50%(或2/3)以上的诚实节点的支持下,整个网络能够有效运行。
总结起来,就是一句话,只有实现了这些,才具有可用性。
预期共识(EC) - Filecoin的临时方案
既然SSLE是一个理想,也就是说目前没有现成的方案,那么有没有什么折衷的方法呢?是的,这就是Filecoin目前采用的方案:Expected Consensus(预期共识)。
预期共识实现了前面提到的几乎所有特性,就差一点。这一点就是不能实现单个领导人的选举,也也是预期共识的一个最大的弱点:每一轮选举出来的领导人可能是多个,也可能没有,平均下来是一个。除了这一点,其他的,EC都实现得非常漂亮。
Filecoin的共识机制吸收了共识机制发展中的各种成果,第一次实现了基于有价值的网络的共识算法。它包括:
基于存储的工作量证明(POW)共识
可扩展的拜占庭容错共识机制
权益证明(POS)共识机制
关于预期共识的详细介绍,参见我的文章:【Filecoin】理解预期共识 - 及它的优缺点。这里不再进行过多叙述。预期共识的实现非常简单,它不需要交互,节点自己可以计算是否自己成为领导人,而且公布之后他人可以十分方便地验证。
由于预期共识一轮选举可能产生多个领导人,这个问题怎么解决?很简单,都当领导,各自产生区块,而且每一个区块都有效。也就是说同一个高度就可能有多个区块。怎么处理?办法是,把这些区块再打包,称为一个tipset。因此,在Filecoin中,链并不能完全称为区块链,而应该是tipset链。一个tipset里包含一个或多个区块。也有的轮次中的选举没有领导人,怎么办呢?那就跳过,这个高度就是一个空块。这样一来,尽管不够均匀,但形成了链,而且是收敛的。
另外,我们知道POS共识有一个大问题,那就是参与者由于不用耗费大量的资源,因此可以同时跟踪多个链来保障利益的获取,但这样一来,使得系统的分叉变得十分难以收敛。预期共识对这一点也做了设计,那就是,强制参与者选择一条链,因为Filecoin有抵押机制,通过巧妙地结合抵押机制,对于同时挖多个链的矿工进行惩罚,这样可以非常快速地促进收敛。所有这些结合,堪称完美。
目前预期共识还差什么?
那么还有一个问题,每一轮是如何定义的呢?我们知道比特币是靠难度来进行调节的,如果没有计算量来进行抑制,如何实现轮次的时间控制,这就是VDF和VRF的作用了。
预期共识的每一轮选举要依赖一个随机数,这个在系统的实现中称为 ticket,这个ticket的产生中间要走一个 VDF 和 VRF的流程,来保证时间的花费。
VDF通过计算串行化的方式来保证时间的使用,同时,因为算法的设计,无法并行化,因此不会浪费大量的能源。
那么现在回到Filecoin目前代码的实现,目前已经发布了0.2.2版本。0.3版本正在开发过程之中。在0.2版本的实现中,VDF和VRF还没有进去,时间的把控完全靠sleep来处理,这也是为什么网络很容易被控制的原因,因为这部分功能还没有加进去。
另外,爆块的概率与已完成复制证明的存储量成正比,那么除了存储证明,时空证明也十分重要,但时空证明这个部分还在进行过程之中,目前还不完善。这些都要在0.3版本中有比较大的更新。
敬请期待吧!