5月2日,以太坊核心开发者会议上宣布,以太坊 Phase 0 Beacon Chain 的代码将于 6 月 30 日准备就绪,该升级将启用一个 PoW/PoS 混合的共识协议 Casper the Friendly Finality Gadget (“FFG”)—aka”Vitalik’s Casper”,这是以太坊 2.0 升级路线图中,共识机制从工作量证明(PoW)转向权益证明(PoS)的第一步。
以太坊共识机制的转变,不仅是如今PoS 越来越流行的大趋势的一个缩影,同时其作为第一个由 PoW 转型至 PoS 的主流公链项目,想必还会为 PoS 阵营注入一股新鲜的血液,并推动 PoS 共识的发展。本文接下来就讨论一下应该如何看待公链的共识从 PoW 转向 PoS 的这股风潮。
和 PoS 在共识机制中的意义
首先需要澄清一点,无论是工作量证明、权益证明还是任何别的什么证明(PoX),它们本身都是用于抵抗女巫攻击,并不等同于共识机制。形象一点来说,它们只用于决定谁拥有投票权,而最终的共识则要通过统计得票数量才能确定。
以大家最熟悉的比特币为例,工作量证明仅仅证明一个打包好的区块是形式上合法的,最终决定块中包含的交易是不是有效,还要看这个区块是否处于最长链上。这里生成一个带有工作量证明的区块就相当于投出了一票,得到最多投票的那条链(也即最长链)才是有效的账本。
同样基于工作量证明的以太坊,就采用了另一种统计得票数量的方式,遇到分叉的时候不是根据最长链规则选择,而是按照贪心的方式选择可以观察到的最重子树,这种共识机制也被称为 GHOST(Greedy Heaviest Observed Subtree)。
另一方面,如何决定投票权在任何共识中都是非常核心的部分。基于同样的抗女巫攻击机制的共识协议常常具有很多相似之处,而更换该机制也往往意味着整个系统都需要重新设计。所以,很多时候我们就会简化地使用”PoW 共识”和”PoS 共识”来对共识机制进行分类。
PoW 和 PoS 机制的特点
基于工作量证明的 PoW 共识最大优点就是安全性高。
这个安全性来源于两个方面:一是投票本身的边际成本比较高,因为每次成功投票都需要完成大量计算,在此过程中要消耗很多电力;二是投出的票和投票权是强绑定的,因为工作量证明所需解决的计算难题是根据要投给的区块计算得出的,对于一个区块 A 所做的工作量证明无法用于给另一个区块 B 投票。
其中第二点对于安全性尤为重要,因为它保证了通过工作量证明作出的选择是无法撤销、无法修改的,即便是想要修改自己过去投出的票也不行——除非对别的竞争选项重新做出工作量证明,而这需要再次消耗大量时间和电力等资源,作为之前的投票者本人并不比攻击者享有任何优势。
PoW 共识机制的另一个优点在于结构简单,易于分析和实现。例如比特币所用的最长链机制就很容易从博弈论的角度分析普通矿工的行为,从而对其安全性有一个比较客观的判断;另外比特币判定最长链的逻辑也是相当简单的,实现起来不易出错。
但是 PoW 的缺点也很明显:首先是能耗较高,这也是 PoW 最被人批评和诟病的一点。例如发改委就拟将虚拟货币挖矿列入淘汰类产业。尽管有人辩解说现在的挖坑产业使用的多是因为种种原因难以并入电网、不用就会被浪费掉的廉价电,并且通过 PoW 达成的共识物有所值,但是这些说法仍难扭转主流观点认为 PoW 挖矿浪费能源的态度。
第二个缺点是,由 PoW 共识控制孤块率以保障安全性的设计带来的延迟高、确认速度慢、吞吐量低的问题。实际上这个缺点可以通过其他基于 PoW 的共识协议(例如基于 DAG 的 GHOST 协议和基于树图的 Conflux 协议等)在一定程度上缓解,但是相关技术还需要经过实践和时间的考验。
最后还有一点是PoW 共识机制造成的治理难题,特别是当矿工的利益和开发者、用户的利益相冲突的时候。现有的治理方式很难在三者之间平衡,处理方式稍有不当就有可能导致社区分裂、公链硬分叉。
基于权益证明的 PoS 共识最大的优点就是几乎完美地解决了 PoW 共识的所有缺点:首先,PoS 对于能耗的需求很低;其次,PoS 的确认延迟和吞吐量的主要瓶颈是网络通信,不需要像采用最长链规则的 PoW 共识那样刻意降低出块速度和吞吐量,通过合理的设计就可以把交易确认速度和系统吞吐量都提高到比较理想的程度;最后,由于 PoS 共识(DPoS 除外)不需要专门做工作量证明的矿工,只有开发者和用户两种角色,所以社区的治理相对更为简单。
然而另一方面,PoS 共识也几乎失去了前面所说的 PoW 共识的所有优点。
在安全性方面,PoS 共识的本质要求确定投票权和行使投票权是相互分离的,因此可以用同一份投票权产生两份不同内容的投票,且两份投票单独看上去都是合法的。
这直接导致了”无利害攻击”(Nothing-at-stake attack)和”长程攻击”(Long-range attack)两种在 PoW 共识中不曾有过的攻击方式。
“无利害攻击”指的是一个投票者可以同时给分叉的两个分支投票,从而在两个分支上都获得投票收益的问题;”长程攻击”指的是攻击者可以通过购买其他用户私钥的方式获得一段时间以前某次投票的投票权,如果对应于这份投票权的资产早已被转移,那么攻击者购买相应私钥的成本将远低于实际持有相同份额资产投票权的成本。
另外,因为 PoS 共识中总是先确定投票权后再决定如何投票,而且受限于通信量,每一轮投票只能选取一部分用户参加,所以攻击者也可以定向购买或者以 DDoS 等方式阻塞即将生效的投票权,从而在特定的轮次获得远高于其持有资产份额的投票权利,这就是所谓的贿赂攻击(Bribing attack)。
可以说,每一个 PoS 共识协议设计的过程都免不了同上面所说的几种攻击方式斗争的过程。为此,PoS 共识协议不得不设计出各种复杂的规则,来检测或抵抗这几种针对 PoS 机制的攻击方式,这直接导致 PoS 共识机制往往都比较复杂,分析和实现起来都比 PoW 共识难得多。即便如此,现有的 PoS 和 DPoS 共识(与 PoW共识相比)也都需要在安全性和/或去中心化上做出一些让步。
从 PoW 转向 PoS 是对是错?
在前面一节的对比中,我们可以看出PoS 共识相比与 PoW 共识在效率、特别是达成共识的速度上的提升,是显而易见的,缺点主要在于更复杂的协议设计和分析,以及潜在的安全性风险(代理的 PoS,即 DPoS,实际上放弃了一部分去中心化以降低系统的复杂性和进一步提升共识协议的性能)。
在理想的情况下,PoS 共识可以只进行两轮广播即确认一笔交易,这是 PoW 共识永远达不到的速度。因为按照 PoW 共识确认一笔交易必须等待包含交易的区块获得多数算力支持,这意味着要等待其他矿工产生足够多的区块,所需的时间和广播的轮数肯定远超过理想的 PoS 共识。尽管实际上的 PoS 共识可能需要多于两轮广播,并且每轮广播的延迟也可能显著高于由专业矿工组成的 PoW 共识网络,但是这无法动摇 PoS 共识在确认速度方面已经体现出的优势及其更高的上限。
在吞吐量方面,PoS 共识所能达到的上限并没有显著优于 PoW 共识,甚至可能还要略低一点。但是因为其确认快的特点,PoS 共识获取高吞吐量所需付出的额外成本可明显低于现有的 PoW 共识协议。例如基于 PoW 的Conflux 共识协议就需要从理论到算法多方面的改进,才能在保证和采用最长链规则的 PoW 相近的安全性下实现较高的吞吐量;而最花时间的投票过程,在大部分的 PoS 共识中所花时间实际上跟区块大小无关,可以通过简单地扩大区块把吞吐量提升到节点处理能力的极限——这样做的代价是增加确认时间,不能过分使用。
至于安全性方面,PoS 共识系统的缺点主要在于更多的潜在风险和被攻击的可能。比特币的共识机制的安全性已经经过了很长时间的考验,以太坊等主流 PoW 公链的安全性和可靠性也已被时间所证明,但是目前还没有哪个 PoS 公链经受过同等水平的考验。无利害攻击、长程攻击、贿赂攻击等多种攻击方式的存在,也使得人们更难相信 PoS 共识的安全性——即便它们可以抵抗这几种攻击,谁又能保证没有其它尚不被人们熟知的攻击方式呢?
PoS 共识中投票权和投票行为不绑定的特点,使得共识参与者可以采取的行动比 PoW 中的矿工丰富得多,这意味着攻击者有更大的自由度,而且也更难分析其他参与者们会如何行动。
现有的很多 PoS 共识的安全性依赖于”诚实的大多数”,但是实际上很难找到无条件执行协议的所谓”诚实的参与者”,在现实世界中的人更接近于经济学和博弈论所讨论的”理性人”——一个理性的好人能做到不干损人不利己的事,但是在有足够大的收益驱动的时候都也可能会干违反共识协议的”坏事”。
因此,一个安全的 PoS 共识系统除了保证在大多数参与者是诚实的情况下是安全的,还必须通过激励机制的设计,保证每一个理性的参与者都会遵守共识协议,而不是尝试通过违反协议获得更大的收益,这在博弈论中被称为”激励相容的”。现有的主流 PoW 共识都是满足激励相容的,例如按照比特币的规则,只有处在最长链上的区块的产生者才能拿到挖矿奖励,于是矿工们为了获得奖励就会按照规则在最长链后面挖矿。对于 PoS 共识系统,其本身的规则就已经非常复杂,参与者们的行动空间又比较大,因此想要深入分析 PoS 共识系统并证明类似的激励相容性自然也更为困难。
综上可以看出,PoS 在安全性上的缺点实际上更多的是一种隐患而不是不可修补的漏洞,是有可能通过完善的设计和精密的分析,做到部分、甚至是全部消除的。在某些合适的场景下,我们甚至可以通过在其它方面做出牺牲的方式得到堪用的安全性。因此笔者认为,在 PoS 共识的安全性可以达到应用场景的需求的前提下,使用 PoS 共识替代 PoW 共识是利大于弊的。
另外,原本是 PoW 的链转向 PoS,其实还有一点额外的好处,就是避开了 PoS 共识的公链在发布初期代币过于集中的问题。通常一个公链项目刚发布的时候所有代币都在开发团队和早期投资者手中,这就带来链上产生的收益甚至整条链的共识被少数人垄断的风险。当然,以太坊因为在 PoW 共识下已经过多年运营,其代币早被分散到大量用户手中,原本即不存在少数控制大量代币的用户通过 PoS 共识控制整条链的问题。
最后,笔者还是认为现有的主流公链从 PoW 转向 PoS 是需要慎之又慎的。毕竟,现在还没有一个公认可以安全地替代现有 PoW 的 PoS 共识,贸然启用一个尚未被证明安全的 PoS 共识机制,很可能会给整个共识系统带来不必要的风险、甚至是灾难性的后果。以太坊社区显然也非常清楚这点,所以自从 2015 年 12 月 Vitalik Buterin 第一次提出转向 PoS 共识的计划以来,为以太坊升级所设计的 PoS 协议,已经历了多个版本的反复讨论和迭代,并且规划出了先采用 PoW/PoS 混合共识的 Casper FFG,再过渡到纯 PoS 共识的 Casper CBC 的升级路线。
在此,我们预祝以太坊的这次”吃螃蟹”的升级一切顺利,可以作为一个成功转型的榜样,为整个区块链社区提供更多使用 PoS 共识的经验。当然,即使以太坊在这次升级过程中出现一些波折,也一定会以另一种形式为大家更好地了解和使用 PoS 共识做出贡献。