Filecoin 的 EC 原理探索

Chunhui Shi
6 min readSep 27, 2019

Filecoin 使用 Expected Consensus 来作为区块链的共识机制,那么这个共识机制跟传统的 PoW,PoS,或者 PBFT 有什么区别呢?

这篇文章就来探索 EC 的原理。

我们知道区块链世界中,最重要的就是出块权,谁获得出块权(也叫记账权),谁就能拿到出块奖励。Bitcoin 中,千千万万个矿工夜以继日的运算争夺的就是这个出块权,它使用的是 PoW 的工作量证明机制,具体来说就是谁先算出哈希难题,谁就有权出块得到奖励。在 PoS、PBFT 或者其他主流共识机制下,目标也都是一样,争夺某一个高度唯一的出块权而获得奖励。在正式的术语中,我们可以把这个具有独占的出块权的成员(矿工)叫做 leader,每一轮的出块争夺中,为了保证账本的可靠性,都有一个唯一的 leader 来进行记账。也就是说,共识的核心就是选择谁来当 Leader。

EC 中采用了非交互式的方式来选举一个 Leader。怎么是非交互式?我们知道 PBFT 中,几个参与选举的人通过互发信息,得到多数票( 超过 2/3 )的人就是 Leader,

他们通过一种交互的方式收集投票来完成选举。

而非交互式就意味着,参与的各方根本不给彼此发消息,而是每个节点各自独立私下进行运算。最后某个节点说,我赢得了选举,然后给出一个证明,其他人可以很容易就验证,他确实赢得了选举。很神奇吧!

这到底是什么原理?其实就是零知识证明(ZKP, Zero Knowledge Proof),更具体的是指 zk-SNARK 算法。

但是,关于零知识证明,并不是这篇文章的重点,因为它是一个比较通用的密码学领域算法,并非 filecoin 独有,有兴趣的读者可以搜索相关文章。

这篇文章重点介绍 filecoin 怎么设计实现选举,这是一个比较复杂的过程。

先来看看一个可靠安全的选举需要满足哪些条件,通常需要满足下面 7 个条件:

  • Secret, 选举秘密进行
  • Fair, 选举必须公平,每个人都有同样的概率被选为 leader
  • Single leader,结果必须唯一,最好每轮选举出一个领导人
  • Unpredictable,无法预测,防止作弊
  • Verifiable,容易验证
  • Anti-attack,选举过程必须容错,也就是能够承受攻击
  • Efficient,消耗资源不大

可以看到,POW 是目前现实使用中最好的方式,但 POW 最致命的弱点,就是不满足最后一条。它需要浪费大量能源,来达成共识;另外,它不能保证每一轮只有一个领导人,因此会出现链的分叉,必须采用其他规则来进行收敛(比如最长链法则)。

在 EC 中,采用 SSLE(Secret Single Leader Electio)可以避免 PoW 的缺点,秘密选举可以防止攻击,并且公平性也能提高参与者积极性。而且其不仅消耗能源少,还能很好的防止分叉。唯一的缺点就是 EC 暂时无法保证每一轮只选举出一个 Leader,所以会出现一轮中有多个 Leader 的可能,但是通过对 block 赋权重,可以有效收敛。

选举是一个抽象的过程,因为没有一个具体的选举方都参与投票的这么一个过程。

我们知道,PoW 是通过难度来控制出块间隔的,也就是我们说的轮次,每一轮一个区块,大约 10 分钟一轮。在 EC 中,是怎么控制轮次的呢?

答案是 Ticket。每个 miner 在参与选举前,需要先生成一个 Ticket,这个 Ticket 实际上是一个随机数,他需要走一个 VDF 和 VRF 的流程,这个流程是串行的,需要花费一定的时间,并且这个时间无法通过多核并行的方式进行缩减。这保证了每个 miner 产生 Ticket 时必须要消耗的时间,没有人可以通过优化硬件的方式来获得加速。

这也就保证了整个选举过程的公平。

Ticket 的数据结构如下:

Ticket Generation

产生 new ticket 之后,实际上选举结果就已经是确定的了。现在就是自己计算是否已经赢得选举。

这个过程就是比较 miner 自身 power 与总 power 的比值。

这个过程有可能产生多个 winner,这就导致存在多个 miner 同时提交 Block。EC 的处理方法是,把这些 Blocks 都收集起来,放在一个叫 TipSet 的结构中。而如果一个 winner 也没有产生的话,那么某个高度就是一个空块。我们可以看到,Filecoin 链会出现不均匀的现象,但是由于形成了链,并且采用的加权的方式,所以 Filecoin 链会收敛。

另外,我们还注意到,在传统的区块链中,每个高度是一个 Block;而在 Filecoin 中,每个高度是一个 TipSet,这个 TipSet 中可能包含了多个 Blocks。所以实际上 Filecoin 是 TipSet 链。

了解了这些,我们还知道,对于传统的 POS 共识机制来说,有一个重大问题就是无法控制分叉。也就是说,由于挖矿成本低,参与者可以同时挖多个链获取利益。而预期共识对这一点做了设计,那就是通过权重和抵押机制来促使矿工选择一条最好的链,对同时挖多个链的矿工进行惩罚,这样可以非常快速地促进收敛。

具体的惩罚方式就是,如果一个矿工在一轮中提交了两个区块,被另外一个矿工检测出来,那么这个作弊的矿工将会被没收所有的抵押金,其中一半给检测者,另一半收归全网。

另外,爆块的概率与已完成复制证明的存储量成正比,那么除了存储证明,时空证明也十分重要,下一篇文章,我将重点介绍 PoRep 和 PoSt 两个核心的存储证明算法。

如果你对我的文章感兴趣,欢迎留言或者关注我的专栏。

微信公众号:“知辉”

搜索“deliverit”或

扫描二维码

--

--