CBC Casper教程

作者: 526ba0512193 | 来源:发表于2018-12-27 15:14 被阅读0次

u每晚八点,我们在社区分享知识,等你。

为想创建项目的朋友搭建创业平台,请感兴趣的朋友加乐乐微信:sensus113

NervosFans 微信公号:Nervosfans

谢谢!


特别感谢Vlad ZamfirAditya AsgaonkarAmeen Soleimani以及Jinglan Wang

为帮助大家理解“另个Casper”(Vlad Zamfir的CBC Casper),特别是最适合区块链协议的实例化,我决定以不抽象、“近”具体使用的方式亲自为CBC注个解。Vlad对CBC Casper的有关描述见这里、这里还有这里;鼓励大家提前浏览下这些材料。

CBC Casper的设计本身非常通用化且抽象,能为近乎任何数据结构达成共识;CBC可以用来决定选0还是选1,CBC上可以运行从简单的区块链到292的维超立方体DAG,以及两种间的任何结构。

简单起见,我们先把注意力放在简单的基于链的结构上。假设有个由N名验证人组成的固定验证人集(验证人是‘权益节点’的高级叫法;假设每个节点‘押注’相同数量的硬币;考虑到押注数量不一致的情形,可为部分节点分配多个验证人ID),时间被分成10秒的时隙(slot),验证人k可在时隙k、N+k、2N+k..中创建区块。每个块都指向特定的父块。想要信手拈来的话,用下面的结构再加个最长链规则即可。

绿色链,长度为6,是最长链,因此被认为是规范链。

当然了,还是有必要引入“最终性(finality)”概念的,意思是有些区块能坚挺地立于链中,除非有大部分(例如1/4)验证人集体造反。否则不会被竞争块所取代。发现这部分验证人明显是在恶意恢复区块的行为,可将不当行为的证据提交至链,同时对验证人施以没收全部押金的处罚,目的是让恶意恢复最终块的成本相当之高(比方说几亿刀那种)。

LMD GHOST

我们一步一步的解释下这个。首先,替换分叉选择规则(就是在多个链中选出用户应追随的规范链的规则),意思是从‘最长链规则’转向‘最新消息驱动GHOST’。我们稍微改动下上面的例子来解释一下LMD GHOST的原理,假设验证人集的大小为5,验证人分别是A、B、C、D、E,则验证人A在第0、第5个时隙生成块,B在在插槽第1、第6个时隙生成块,以此类推。评估LMD GHOST分叉选择规则的客户端只关注各验证人签名的最新(时隙最高)消息(块):

蓝色为最新消息,时隙从左到右(即,最左边A的出块是时隙0)

现在,我们只把这些消息用作(GHOST)分叉选择规则的源数据:从创世块起,每当有分叉选择了有更多最新消息支持的某个区块子树的那一侧(意思是有更多的最新消息支持该块或其某个后代),按此规则继续执行,直至某个无子节点的区块。我们可以为每个块计算出支持该块或其后代之一的最新消息的子集:

现在,为计算出块头,需要从头开始,然后在每个分叉处选择数字最大的那个:首先,选择底部链,因为它有4个最新消息支持自己,而顶部链只有1个(消息支持),在下个分叉处支持了中间那条链。可以看到,结果仍是最长链。实际上,运行良好的网络中(即孤块率低),LMD GHOST和最长链规则基本上都会给出完全相同的答案。极端情况下就不一样了,譬如,考虑下面这个3叉链:

按链长度评分区块。若根据最长链规则,顶部链更长,因此顶部链胜出。 按支持(链)的最新消息数量并使用GHOST规则(来自各验证人的最新消息以蓝色示)评分区块。 底部链有更多的最新消息支持,若根据LMD GHOST规则,则底部链获胜,尚不清楚3个区块中哪个优先。

LMD GHOST在某种程度上还是有优势的,比如该方式在高延迟条件下能够更好的提取信息。两名验证人创建出父块相同的两个区块时,即便二者同时是竞争票,也应被视为父块的共同票。 最长链规则无法捕捉到这种细微的差别,但基于GHOST的规则可以。

最终性检测

LMD GHOST还有另个不错的特性:比较粘。譬如,假设两轮(投票)中有4/5的验证人投票给同一个链(假设5名验证人中的1人投反对,验证人B在实施攻击):

顶层链想成为规范链,具体来说需要什么条件?需要4/5的验证人在E的首个区块上做构建,且全部4人认可E在LMD分叉选择中得到最高分。 根据链的结构,能够看出验证人必在不同时间看到部分消息。以下是4名验证人所看到的:

 A看来 C看来 D看来 E看来

各验证人生成的区块绿色示,各自看到其他验证人的最新消息蓝色示

注意,四名验证人应该能看到B的一个或两个出块,D和E能看到C的第二个出块,因此使得各验证人视图中最新消息是C的第二个区块而非第一个;然而,链的结构本身并没能佐证上面是这些陈述。所幸,下面我们会看到,这种模糊性其实无妨。

A的视图包含支持底层链的四个最新消息,B的出块无消息支持。 因此,在A看来,有利底部链的得分至少为4-1。C、D看到的也差不多,都是四条支持底部链的最新消息。因此,全部4名验证人是处于‘共识’状态的,除非有另外两名验证人改主意。

注意,这里模拟出的验证人视角其实是“过时的”,意思是没能捕获D和E可能已经看到C最新的出块。但是,这一点不会改变顶部链vs底部链的计算方式,原因是可以普遍的认为任何验证人的新消息(所持)意见都与自己之前的消息相同,除非另外两个验证人已经提前切换到了另一边(改主意)。

最小可行攻击。验证人A、C‘叛变’,改为支持B的出块(并因此受处罚),那么B的出块就有了3-2的优势,此时,验证人D、E改为支持B的区块则是合法行为。

由于LMD GHOST等分叉选择规则都有这种‘粘’性,且客户端能够检测到分叉选择规则“卡在”特定块上,可以利用这一点实现异步安全共识。

安全预言机

实际当中,想要检测到链条卡在某个块(CBC术语中,区块是“明确的”或“安全的”)上的所有可能情形是非常困难的,但可以提出一套启发式(“安全预言机”),帮助人们检测发生这种情况的部分情形。最简单的方式就是团体预言机(clique oracle)。设某验证人子集V构成总验证人集的p部分(p>1/2),且子集中全部验证人出块都支持某区块B,然后令另一轮出块参考第一轮出块,仍然支持B,那么可以推理如下:

两轮消息传递后,已知该子集V全部(i)支持B(ii)知晓B得到良好支持,因此除非子集中有足够数量的其他人首先切换(支持其他的意思),否则都不能合法地切换。对于B的某个竞争块B',B'能合法拥有的支持(数量)起初至多1-p(来自团体外的其他人),且要从LMD GHOST分叉选择中胜出,支持量需达到1/2,因此至少需要1/2 - (1-p) = p - 1/2数量的验证人非法切换才能得到LMD GHOST规则的支持自己。

注意p=3/4的团体预言机提供了1/4级别的安全性,且只要3/4的节点在线,就能生成满足团体的一系列区块。因此,BFT角度上来说,两轮团体预言机,就活跃性及安全性而言,可以达到的容错水平是1/4。

以此种方式达成共识有诸多益处。首先,短期链选择算法和“最终性算法”不再是Casper FFG中那种被‘硬生捆在一起’的感觉,而是个连贯统一的整体。 其次,由于安全检测在客户端一侧,因此无需设定某个协议内的阈值,客户能自行决定视区块为最终所需的安全级别。

深入探讨

CBC的扩展方式相当多样。 比方说有人提出了容错能到1/3的多轮团体预言机方案。再比方说,我们还可以引入验证人轮换机制,最简单的方法是每当q=3/4的团体预言机得到满足时,允许验证人集变更一小部分。另外,也可以跨过链式结构寻求能增加单位时间消息密度的其他结构,譬如Serenity信标链的证明(attestion)这种结构:

此情形下,有必要将证明与区块相分离:区块是实际推动底层DAG增长的对象,而证明有助分叉选择规则。根据Serenity信标链规范,每个区块可能有几百个与之对应的证明。采取的方式虽各不相同,CBC Casper的核心逻辑不变。

为使得CBC Casper的安全性在“加密经济上可执行”,需要引入有效性及削减条件。 首先是有效性规则。区块包含父块及‘自己已知但尚未不是区块链一部分的’一组证明(类似当前以太坊PoW链中的‘叔伯’)。为使区块有效,区块的父级必须是给定区块内含有的包含在链中的信息后执行LMD GHOST分叉选择规则的结果(For the block to be valid, theblock’s parent must be the result of executing the LMD GHOST fork choice rule given the information included in the chain including in the block itself.)。

虚线为叔伯链接,譬如验证人E出块时,注意到验证人C尚不是链的一部分,因此包含了对C的一条引用。

现在,只要一个削减条件就能保障CBC Casper的安全性:不允许做M1、M2两个证明,除非i)M1在M2证明的链中或ii)M2在M1证明的链中。

可以 不可以

有效性及削减条件描述起来虽不复杂,但实施中需要检查哈希链并在执行共识内分叉选择规则,因此不像Casper FFG 中‘接收两条消息并检查这些(消息提交的)数字间若干不等式’那么简单。

CBC Casper中的活跃性则依赖于底层链算法的活跃性(譬如,每时隙一个区块的结构中,取决于全部节点在时隙N+1开始前能看到时隙N中产生的全部内容的同步假设)。因此不存在所谓‘卡住’不动的情形;但是有可能从任何情况下最终确认新块,即使是那种有攻击者和/或是网络延迟高于底层链算法规定的情形。

假设在某个时间T,网络“平复下来”并再次满足同步假设。随后,所有人对链状态的看法重新一致,就是看到的头部都是H的意思。自此,验证人开始签名支持H或H后代的消息,链得以平顺延伸,并最终满足团体预言机,此时H被最终确定。

高延迟下的网络混沌   网络延迟平息。执行分叉选择是,多数验证人在观察到全部或足够数量的相同块后到达相同头部,并由此做构建,进一强化其在分叉选择中的优势地位。 链以低延迟的方式优雅延伸,随后,团体预言机得到满足。

写完啦!实施层面来讲,CBC看上去确实比FFG复杂的多;但就协议的论证以及可提供的属性而言,真没看上去那么复杂。

https://vitalik.ca/general/2018/12/05/cbc_casper.html

相关文章

网友评论

    本文标题:CBC Casper教程

    本文链接:https://www.haomeiwen.com/subject/rnwrlqtx.html