RChain的Casper共识算法

RChain的Casper共识算法是基于Vlad Zamfir的correct-by-construction共识协议和CTO Greg Meredith和其余RChain成员讨论而来的。他们还为Casper开发了一个模拟器:https://github.com/rchain/Casper-Proof-of-Stake/tree/simulation-dev。git

一、通用预估安全协议

一个预估安全协议须要如下内容:github

1)一个可能共识的值的集合C 算法

2)一个逻辑Lc,用来判断集合C中的元素声明的命题是正确或者是错误api

3)一个分类,∑表明协议,∑中的对象是协议状态和态射的协议执行安全

4)一个调用评估器的函数ε,用于把协议状态映射到逻辑中的命令网络

咱们假设这么一个命题:P是一个已经预估过安全的协议状态,Q是全部可能的将来状态都被预估器标明是P。ide

在逻辑中给定少数合理的约束以及预估器,咱们能够获得如下的安全共识结果:函数

1) 若是Q1和Q2有共同的将来状态,那么它们的安全预估就不可能相互矛盾(若是P是安全的,非P确定是不安全的)。所以若是节点按照预估器的行为,就不可能到达不可调和的状态,所以达成共识是可能的。再者,一旦一个节点看到一个命题是安全的,它知道最终的公示结果也会保持是正确的。oop

 

二、RChain的预估安全协议

RChain在通用预估安全协议上扩展以知足自身的需求,同时仍然保留上面所但愿的一致安全结果。区块链

2.1 The Consensus Values

集合C会包括全部可能的块DAG(blockDAGs) 。与链结构相反,DAG结构的缘由在于共识协议的某些部分须要多个父块指针。

在区块的上下文中须要有如下的属性:

1)父区块的指针

2)政治资本(PC)

3)数据

4)原则 (指向其余区块的指针,那些在建立的时候就被验证器看到的区块)

一个区块包含的数据取决于它是什么类型的区块,与用户最相关的将是运行在RhoVM上包含计划交易的区块,可是与当前讨论最相关的将是包含DAG中其余区块的“确认”的区块。这些区块在共识协议当中扮演者重要的角色。这些数据还可能会强制执行“削减条件”,从而惩罚生成无效块的验证人。

2.2 The Logic and Propositions

其次,咱们须要定义咱们用来谈论blockDAG的逻辑Lc。 在这里,想一想天然陈述是真的仍是假的,彷佛是最简单也是最明智的。例如,“区块在DAG中”或“区块有父母”。 最终,咱们最关心的声明将是前者,由于这是咱们的“分岔选择规则”。 (对于严格的数学处理,咱们须要对逻辑细节作更精确的描述,但上面的直觉对咱们来讲已经足够了。)

2.3 The Protocol's Specification

如今咱们要给定一个明确的协议规范,这在数学上咱们认为是一个类别∑。协议的状态是来自一个元组的集合中的{A, P, H}. A∈{"propose", "acknowledge"}是预期的行为,P∈R 是政治资本的平衡条件,H是接收过的历史消息。 消息里面包括用户执行智能合约的请求和来自其它验证器的区块。那些包含区块的消息必须只有建立它的验证器的签名。协议执行的操做是“更改意图”、“执行”和“接收消息”(以及“不作任何事”的动做和各类动做的任何组合,由于这是一个类别的需求)。

在给出每一个协议执行如何更新协议状态的细节以前,咱们须要定义预估器ε。前面提到过,估计器最关心的是那些与DAG中哪些块有关的逻辑命题。ε是分叉选择规则,它选择多个可能的替代块中的选出区块来继续结构。在工做证实的区块链协议它的是最大工做量的链的头部。这里咱们选择的是greedy heaviest observed sub-tree (GHOST) 算法,它会选择得分最高的区块来继续这个结构。一个区块的得分b,关于消息历史,H,它是DAG中来自其发送者的最近消息中的区块的权重的总和。

一个区块的权重的公司能够用下面的公司来定义:

其中f是参数的一个协议,0<f<1, ack(b)是确认b的区块,pca(b)是链接到b的政治资本的数量。

下面是一个具体的例子:

假设有3个验证器:A, B, C,让咱们以A的角度来看,假设她有一个与下图一致的消息历史:

 

在图中,区块在其建立者之上对齐。每一个区块上都标有它的名字还有政治资本的数量,箭头指示父区块指针。

此外,标有“ACK”的标记还表示目标区块中的确认数据存在于来源区块中。消息历史记录显示来自每一个发件人的最新消息是 A - b6, B - b5, C - b4。

所以只有这些块有非0的得分,按照上面的公司,W(b6) = 3, W(b5) = 4f2, and W(b4) = 2f。而后遍历整个DAG,咱们计算出来得分:

Score(b6) = 3 +4f2 + 2f, Score(b5) = 4f2 + 2f, Score(b4) = 2f。所以b6有最高的得分,将来经过A建立的区块必须从b6构建,除非它收到一条改变得分的消息。

注意,若是咱们回顾一条消息(在建立B6以前),Score(b5) = 4f2 + 2f + 2(+2是来自b1,它具备A最近的消息,b6没有)它的得分是最高的,这是为何b6是创建在b5以后的缘由。

还要注意的是,b3和b4能够被认为是另外“促进”A的区块两个验证人,b5充当前两个非冲突块的区块“链接”成一个区块,这样就可使结构继续扩展,又不留下任何已经确认一致的块。

咱们再回到指定协议执行上,更改意向协议执行只是改变了预期的行为,而行为触发了当前的预期行动。这里有两种可能采起的行动:

一、提议(Propose),根据消息历史记录中的一个或多个未处理的智能合同请求建立交易计划,建立一个区块须要根据合约中涉及的父区块的名字、GHOST分叉规则、政治资本的数量(由验证器选择,须要注意的的是政治中心越多区块的权重越高,这觉得着它更可能被GHOST分叉规则选出来)、做为数据建立的计划、从消息历史记录中可做为理由的全部区块(这里能够作的一个哟优化是,只选择那些相关的区块)。

二、认可(Acknowledge),促进或者链接。从发件人中选择消息历史记录中最新消息的任意数量的独立块(一个区块是一个选项,它将是"promoting")。独立性的含义是既不能经过DAG链接从另外一个达到,而且包含在它们的未链接的DAG的部分中的任何数据不冲突。而后建立一个新的区块,须要的东西和提议是同样。

两种执行对协议状态的影响是将生成的块添加到消息历史中(验证器当即收到全部发送给网络的消息),减小区块的政治资本的余额。政治资本的余额的增长是根据递归公式在区块中确认的。

pce(b)是区块b挣到的政治资本数量。须要注意的是,最新的消息的约束会组织它去增长旧的区块的政治资本。
单一确认规则一样能够防止重复提交同一区块进行的快速“政治资本挖掘”。

最后的协议执行,接受消息,并无像它刚开始表现的那么简单。固然,它把新消息添加到消息历史中,但一样重要的是这条消息是在这个动做当中验证。
这一步是必要的,以确保blockDAG的完整性。实际上,由于这是一个不信任的系统,全部验证人都须要独立的验证它所受到的全部消息。
收到新消息时,有几个不一样的事情须要验证:

1)消息不产生歧义。歧义的定义是,来自同一个发送方的两条消息无法证实另一条消息。也就是说,这两个消息都不出如今另外一条消息的理由(或递归地在这些理由中)。这是一种拜占庭式的故障,由于它代表发送方的行为就像在运行协议的两个独立版本。不然,发件人的最新消息将包含发件人在其理由中的全部过去消息。

2)若是一条消息是一个包含交易的区块,那么它的全部交易都是合法的。即智能合约尚未被前面的区块执行,而且使用事务来更新虚拟机状态成功没有错误。 例如。 致使双重花费的交易应该是错误的,所以是无效的。

3)若是消息是链接类型的确认,那么区块是相互独立的,而且以前没有被相同的发送方确认过。 一样的事务不会存在于多个确认区块中。

4)若是消息是一个削减区块,它确实对应于一个真正的违反行为。

5)若是消息是任何类型的确认,那么确认的全部区块都是有效的。也就是说,这个子弹使验证成为一个递归过程。

若是上述的任何条件违反了,那么这条消息就是无效的。这种违规行为就会被报告。在这种状况下,将建立一个新的“削减”块,惩罚无效消息的违规发件人。

 

协议的最后一部分是终结的概念,即咱们怎么知道这个区块会永久的存在于DAG当中?目前的区块链使用区块的深度做为最终的代理,而且在技术上没有区块是结束了。这里用一个区块的深度以便了解一个区块是否仍然是主DAG的一部分的可能性,然而咱们也能够引入合理的“同步约束”来具备真正的结束。一个验证人(或者用户)在消息已经存在它的历史当中有一段时间T(假设说是1星期),就会认为一个区块已经结束了。这表示终结的概念是相对的,它取决于消息的接收,但实际上,在时限足够长的时候,这并不构成太大的问题。若是两个节点完成相互排斥的区块,这确实容许共识失败的可能性,可是当时间窗口很长而且因为下面讨论的激励时,这种状况也是不可能的。

2.4 Economic Considerations: 

与其余区块链同样,提出交易块的验证人也包括反映验证人为执行计算而得到的“费用”(以REV的形式)的一些交易。所以,验证人被激励来确保他们建立的区块保留在主DAG中,不然他们被奖励的交易将会丢失。GHOST分支选择规则会致使更多权重的区块更可能在主DAG中结束,所以,将大量政治资本附加到他们建立的去块上的验证人更可能保留他们得到小费。所以,在提出区块时花费政治资本是经济上的激励。并且,因为政治资本被归入共识协议,花费以后赚取政治资本的惟一途径就是认可其余区块。被别人认可的区块(本身提议的区块没有政治资本,得分会比原来的要低,由于f<1,而且GHOST只会考虑最近的消息)是最有可能用于扩展DAG的,由于他们的得分比较高。所以,推进区块对于每一个人都是有利的,由于推进者可得到政治资本供将来使用,而推广者可有可能得到小费。所以,链接区块是更加激励,由于它把全部我的促销的好处的进行了加和。

我的行为的好处:

一、自动轮流验证人。最好赚取政治资本的方式是从别的验证人花费的,政治资本的流动(以及所以提出障碍的能力)在不一样的验证人之间;

二、减小分叉。推进区块和合并区块工做,以保持单一的主要DAG。

2.5 Slashing: Punishments for invalid blocks

产生无效块的验证人应该避免他再次这样作,所以惩罚应该包括减小他们的政治资本。事实上,容许经过惩罚减小政治资本,能够防止一个坏的验证人。然而,和解原则上老是可能的,由于验证人仍然能够得到政治资本,而且若是须要的话,慢慢地将他们的余额回到零以上。

有关各类违规行为的确切数额的细节还没有制定出来。

 2.6 The one free parameter in the protocol f

f的值应该是多少呢?f的值会不会由于网络中的参与者数量的变化而随时间改变?这些问题还须要经过模拟器进行更多的验证。

2.7 Initiating the protocol: Where do the first validators and political capital come from?

因为政治资本只能经过已经拥有政治资本的区块来推进,因此一个天然的问题是第一个政治资原本自哪里。一个解决办法是让创世纪块有必定的政治资本附在他们身上。

全部的验证人须要推动至少一个区块,为了增长政治资本(初始值为0)。单一认可规则防止这种剥削得到无限量的政治资本。请注意, 即便一个验证器人建立了一个无限链,它从创世区块开始不断的推动区块, 可是几何系列将收敛到一个有限的值。此外, 单一确认规则可防止建立多个此类链。

一个相关的问题是,谁会成为验证人?一个简单的答案,任何人。每个用户加入网络以后,它的政治资本是0,他们不能提出建立新的区块,可是他们能够参与验证的过程。只有参与共识过程的用户才能得到政治资本。咱们确保只有那些真正对网络感兴趣的人才能贡献将来的区块,同时仍然让任何人都有机会达到这个水平。

 2.8 Bad Behaviour Technically Allowed in Present Protocol Specification

一、提出一个区块,本身立刻去推销它。这能够防止别人立刻认可了你提出的区块。这能够减小对手从你的提议里面得到的政治资本。确实减小了你正在构建的分支的分数(由于得分只考虑了最近的消息,而升级区块的权重将低于原来的),所以有一种可能性,你的的区块将错过叉选择规则。所以,目前尚不清楚在这种状况下垄断政治资本的策略是否会成功。

二、用毫无心义的确认淹没网络,试图崩溃更小的节点。例如,写一个脚本,在创世区块的基础上建立一个全是确认区块的无限链,相似于DDOS攻击。如上所述,这种攻击行为是不被系统自己鼓励的,可是出于一些外部的缘由,有人想搞垮RChain的话,这是一种能够想到的方法。

一个简单的(虽然不方便)的方式去这将验证人在发出确认以前要出入一个验证码。另一个选项是内置一个防火墙,在检测到这种攻击的时候能自动的屏蔽掉另外的验证人。

 2.9 Future Optimizations

容许冲突区块的链接,解决冲突的一个方案是在提出区块的同时确认独立区块的分片。

Other Notes

一、一个验证人离开了几个月,而后又回来怎么办?怎么样在保证网络不受攻击的状况下从新创建信任?

政治资本是经过在达成共识的过程当中积极活动而得到的,所以是信任的表明。这个问题是政治资本有某种“半衰期”的一个很好的论据。这就意味着当验证人离开以后,他须要从新努力才能回到之前的地位。关于这个半衰期是多久,这个还在讨论中。

 

二、咱们有没有解决囚徒困境的方法?

交易收入(代替验证人验证每一个共享跨分片状态的分片)就是一个囚徒困境。囚徒困境,做为一个无限重复博弈的游戏。它有一个最优的默认合做策略,甚至在失去信任以前原谅一次背叛。咱们简化了这个游戏,值得信任的名称空间将获得很好的处理,而不可信的命名空间与网络的其余部分隔离开来。咱们还会有一些跨名字空间的验证人,确保不会被一些垃圾玩家把整个网络都搞臭了。

 三、有没有可能操纵共识协议来得到免费的存储?也就是说,由于共识的历史须要做为证据永久存储,那这些信息是否能够由客户端使用,而不须要支付适当的存储费用。

这是可能的,能够经过设定确认区块中的数据格式来避免这种状况。

 

 

 

该文章翻译自:https://rchain.atlassian.net/wiki/spaces/CORE/pages/92536846/Casper+for+RChain 

翻译水平有限,我自己对区块链的了解也有限,若有错误,请及时联系我,你们一块儿提升,谢谢!

相关文章:

一、https://medium.com/rchain-cooperative/a-visualization-for-the-future-of-blockchain-consensus-b6710b2f50d6

二、https://github.com/ethereum/research/blob/master/papers/cbc-consensus/AbstractCBC.pdf

三、https://github.com/ethereum/research/blob/master/papers/CasperTFG/CasperTFG.pdf

 

 

对区块链技术感兴趣的童鞋能够添加QQ群:711399035。你们一块儿研究区块链技术,投资好的区块链项目。

 

岑玉海

转载请注明出处,谢谢!

相关文章
相关标签/搜索