如果你一直关注 Casper 的相关研究,那么你可能已经对 Devcon4 上发表的 Casper CBC 初稿论文有所耳闻。如果你看过那篇初稿,可能你会想,怎样才能把那么多艰深晦涩的数学符号转成通俗的大白话呢!本文就尝试让初稿中那些概念变得更加容易理解。
本文将重点简化初稿中的技术细节。更干货的解读可以参考 Barnabe Monnot 的 技术博客。如果对 Casper 的发展历史感兴趣,还可以去读一下 Vlad Zamfir 在此论题上的相关博文(编者注:见文末超链接)。而对于有兴趣比较 Casper 两种实现方式(FFG vs. CBC)的读者,还可以去看看 Vitalik 关于此讨论的一系列推文(编者注:见文末超链接)。
过去多年中,很多社区成员都为实现一个完善的“建构中修正”的共识机制做出了积极的贡献。该机制最终将用于实现基于纯权益证明的区块链共识算法(可能会支持分片)。目前在以太坊团队中,负责这项研究的成员包括 Vlad Zamfir,Nate Rush,Aditya Asgaonka 和 Georgios Piliouras。
-漂亮的 LaTeX 排版,快去看看论文初稿吧!-
CBC 协议背后最基础的设计理念在于,首先构建一个非常抽象但足够灵活的框架,并证明该框架能保证实现某些重要性质。然后,我们在此基础上逐步加强框架的定义,并自然而然地继承构建过程中已完成的所有理论证明和保证。通过这种"定义-证明-继承"的迭代式方法,我们就可以创建一簇在顶层满足相同理论证明和保证的协议集合,但同时该协议簇也足够灵活可为实际场景下的使用作特别的定义。
之所以称这种方法为"建构中修正",是因为新协议的形式正确性是由其建构过程来保证的,即通过不断加强一个抽象但得到理论证明的协议来实现。
Casper CBC 把权益证明共识的问题理解成一个分布式系统的问题。与其它权益证明共识机制不同,在我们的共识机制里,并没有定义一些基于密码经济学的典型方法,比如存款和罚没条件!但是,我们定义的协议足够通用,所以如果需要,我们后面仍然可以把这些内容加上。分布式系统中“错误”的概念对于 Casper CBC 共识来说非常重要。初稿 1.1 章节描述了一种分类方式,用于区分可能发生的若干种错误。最有意思的一种错误(也是唯一一种导致共识安全失败的错误)被称作模棱两可错误(equivocation fault)。我们将在后文讨论共识规则时更深入地来解释它。
共识机制的基础假设在于“只要发生的错误数量足够少,那共识安全就可以得到保证”。换句话说,“只有错误数量多到一定程度,共识安全机制才会失败”。
让我们先来熟悉几个名词:
消息是由验证者参与达成共识过程中生成并传递的信息片段。在 Capser CBC 共识机制中,消息有如下结构:
消息结构 = (数据,验证者,证明)
现在让我们来仔细看看这个消息结构的每个部分:
在我们讨论有关发送消息的限制规则之前,先来看看两个重要的概念:
以下规则定义了两种类型的错误:非法消息和模棱两可消息。
当一个节点产生模棱两可的消息时,本质上它是产生了共识协议的多个独立运行实例,然后试图把每个独立运行实例产生的消息呈现给网络中的不同节点。为了更清楚地阐释,什么是共识协议的不同运行实例,让我们来看:假设一个违背第二条共识规则的验证者产生了两条消息 A 和 B,该验证者即已经开始维护共识机制运行的两份不同的历史版本,其中一份只包含消息 A,另一份只包含消息 B。从每份共识的运行版本单独来看,验证者的行为是合法的,即没有出现模棱两可。
-一个发生模棱两可错误的节点且尝试把不同版本的共识协议运行结果呈现给网络中的不同节点集合-
举例来说,如上图所示,某个节点从状态 A 开始运行共识协议,并持续维护同一份运行版本直到状态 B。在绿色圆圈内(左侧)和蓝色圆圈内(右侧)的其它节点都可以通过见证该节点发出的消息确认其运行的共识版本历史是唯一确定的,即从状态 A 到状态 B。随后,该节点发生了模棱两可错误,即开始维护两份不同的共识协议运行历史。它把最终产生状态 C 的共识历史呈现给绿色圆圈内(左侧)的其它节点,却把产生状态 D 的共识历史呈现给蓝色圆圈内(右侧)的其它节点。处于两个圆圈集合交集的节点们则会发现该节点正在产生模棱两可的消息,且随着网络节点的互相消息交换,越来越多的其它节点也会发现这个行为。最终,当足够多数量的网络节点被卷入到此种类型的拜占庭错误中,共识机制就会失败。
共识规则可以保证(有严格的数学证明),只要有足够多的验证者按规则产生合法消息,那么对于任一给定的共识数据值而言,除非有非常多的验证者产生了错误,否则全网不可能对与给定数据相矛盾的数据值形成共识。
所以,任一网络节点可在它见证到有足够多数量的验证者都在他们各自的合法消息中提及了同一共识数据值后,来确认在该数据值上的共识结果(也称作在该值上取得了确定性)。“足够多数量”的具体值取决于节点配置的容错期望阀值。有一个用来帮助节点检测最终共识结果的重要工具被称作决策预言机。
决策预言机是一种帮助节点基于它们见证的消息在某一具体共识数据值上判断最终结果的工具。其背后的基本思想是,看看是否有足够多的验证者在该数据值上达成共识,并且这些验证者互相都能确凿地见证它们的确是在同一值上达成了共识。
但这些讨论还未包含在已发表的初稿中,因为还有一些关于决策预言机的严格数学证明有待解决。关于这些证明,我们已经在斯坦福大学的一个研究项目中取得了重要的进展(多谢 Greg Price 的帮助),而且 Nate Rush 正付出极大努力去完成后续证明工作。
基于上述 Casper CBC 的方法体系,让我们为共识协议多定义一些重要概念然后创建一个(基于 GHOST)区块链共识机制 (参见初稿4.4章节)
我们需要定义两个概念来达成我们的目标 (参见初稿定义4.31)
共识数据值:共识数据集合即所有可能的区块。
评估函数:我们规定,该函数的输出,只能是在消息所附证明中运行 GHOST 分叉选择规则所产生的区块,或其子孙区块。(GHOST 表示Greedy Heaviest-Observed Sub-Tree,它是一种从若干候选区块链中选择主链的方法,可以被认为是最长链规则的一个变种)。
好了!通过上述更进一步的有关 Casper CBC 共识机制的定义,我们就已经完成了一个拥有具体决策安全保证的全新区块链共识算法,而且它的理论证明是显而易见的!
接下来是啥?当然就是尝试为支持分片的区块链实现一个共识机制了!(参见初稿4.6章节)
原文链接: https://medium.com/@aditya.asgaonkar/casper-cbc-simplified-2370922f9aa6
作者: Aditya Asgaonkar