区块链100讲:共识算法的比较-Casper vs Tendermint

image

1

权益证实的漫漫长路

权益证实的定义能够查看理解权益证实(https://link.jianshu.com/?t=https://blog.cosmos.network/understanding-the-basics-of-a-proof-of-stake-security-model-de3b3e160710)。git

1982年,拜占庭将军问题首次被Lamport,Shostak和Pease提出。Cosmos的Ethan Buchman这样描述它:”这是一个在可妥协的通讯网络中实现分布式协议的问题,也就是在不可靠的环境中创建一个可靠的系统的问题“。从1982年到1999年,都没有人可以创造一个能够解决拜占庭将军问题系统。长久以来,拜占庭将军问题与计算都是无关的,由于在那个时候,互联网演进出基于云的中央中心化计算模式,所须要解决的只是容错问题。github

因此,故障容错算法获得普及,例如1998年发明的Paxos算法和2013年发明的Raft算法被普遍的应用。而1999年发明的实用拜占庭容错(PBFT)却没有被学术界以外采用。直到2008年,中本聪将网络规模级别的分布式拜占庭容错(BFT)算法设计到区块链方案中,才使拜占庭容错获得推广。当这种原型出现以后,系统研究界的人都开始围绕将学术界“奇物”应用到真实世界而去构思各类想法。算法

在2011年,BitcoinTalk论坛对一个叫作权益证实(PoS)的概念组织了一场讨论。最初的PoS协议例如点点币,实现结果的并不理想。第一个真正提出将BFT研究应用到PoS公有区块链环境中是Jae Kwon,他在2014年创造了Tendermint。编程

在当时,PoS研究作出了很大的假设:假设系统中的一系列对等节点都是静态的,而且在长时间内都是稳定的。在区块链环境中彻底是不现实的。 Jae Kwon的重大突破是使Tendermint可以使用区块,哈希连接,动态验证器集合和循环的领导者选举来将BFT研究适应复制状态机(区块链)的领域。安全

在Tendermint环境中,出现了大量的共识算法(Honeybadger, Ouroboros, Tezos, Casper),它们都包含了BTF研究的元素以及在区块链上其余模块观察的元素。网络

为权益证实作的全部研究都指向一个重要问题:在不耗尽物质稀缺资源的状况下,咱们能够达到工做量证实(PoW)的安全级别吗?这个问题能够转化为:PoS的投票权以链上货币计价而不是计算力计价。区块链的POS共识问题比可扩展性更被普遍讨论,运行PoW挖矿的高开销成本以及环境外部性方面存在的问题都刺激了大量资源涌入PoS安全研究。异步

本文主要探讨了在加密货币中使用了权益证实的三个主要PoS协议的特性:由Vlad Zamfir带领研究的Casper the Friendly Ghost(CTFG)和由Vitalik Buterin带领研究Casper the Friendly Finality Gadget(CFFG)以及Jae Kwon带领研究的Tendermint(https://github.com/tendermint/tendermint.com/blob/5c111743a03d2c6ed2e0b14bd3091cac8974c8da/docs/tendermint_v02.pdf)。编程语言

2

权益证实的陷阱

无利害关系分布式

起初,有多种不一样的说法来描述权益证实的通常陷阱,无利害关系就在这时被提出。Jae Kwon 2014年5月以“错误选择谬论”的不幸名字第一次提到这个问题(https://github.com/tendermint/tendermint.com/blob/5c111743a03d2c6ed2e0b14bd3091cac8974c8da/docs/tendermint_v02.pdf)。模块化

在2014年7月Vitalik把比特币开发者所描述的确切定义的问题普及推广为“无利害关系”。问题呈现出此状况:验证者经过在给定高度为多个有冲突的区块投票能够有效的破坏安全性而不用付出任何代价。

简单的PoS实现对于这些攻击而言是很是脆弱的。灾难性的是,由于没有任何的激励来鼓励你们永远集中在一个独一的链上,而且每次激励都要同时在相互冲突的链条上进行重复签名,因此为了得到更多的区块奖励,在经济上最优的策略就变成了尽量的在多个分杈上进行投票。下面这张图就展现了:

image

在简单的PoS设计中竞争链上的期待投票数高于单一链上期待的投票数

在工做量证实中,对于在多个链上进行挖矿的矿工“惩罚”是他们必须分开他们的计算力(很是稀缺的资源)。在现代非简并的PoS设计中,这种成本必须嵌入到协议里面以此模仿物理PoW挖矿的限制。

Vitalik Buterin在2014年1月引入的“slasher”概念或协议内惩罚能够减轻这个攻击。Jae Kwon在同一年进一步推算了此方法(https://tendermint.com/static/docs/tendermint.pdf),这是实现Tendermint共识协议的第一个迭代进展。苛刻以及容许这种惩罚的条件,对于全部的非简并BFT协议都是有帮助的,甚至在本文中出现的三种共识都采用了。

远程攻击

远程攻击来源于用户不得不撤回保证金的权利。这就产生了一个基本问题,由于这意味着攻击者能够从任意长度的距离创建一个分杈而不用担忧被削减。一旦保证金被解除绑定,激励不从某个高度区块前进行长距离投票就被取消了。换句话说,当超过2/3的验证者解除了绑定,那么他们就能够恶意的创造包含以前验证者集的第二条链,这可能致使任意的交易。

对于权益证实协议这是至关致命的,由于安全模型必然是“主观”的。当参与网络要求大量的社会信息,那么这个安全模型就会被称为是“主观的”。一个新节点加入网络以后,对于当前网络的状态可能会得出不一样的结论,由于他们的决策是基于主观信息的,即社会声誉。在相反面,工做量证实的安全模型必然是“客观的”,由于当前网络状态老是工做量最多的那个状态,新节点对于网络状态的结论老是相同的,由于他们的决策是基于客观信息。

PoS的远程攻击在弱主观性模型下进行了纠正,这要求接入到网络中的后续新节点:

  • 当前必须是被绑定的。只相信当前有保证金的验证节点

  • 解除绑定保证金必需要通过一个"解冻"期。解除绑定以后,代币须要数周到数月的“解冻”时间,用以实现“同步性”前提(即延迟的消息)

  • 禁止在N个块以前恢复,其中N是保证金的长度。 这个规则使任何长程分杈无效。

  • 可选择的将验证者集存放在PoW的链上

image

Casper(s)和Tendermint采用一种简单的锁定机制(“Tendermint”中俗称“冻结”)来锁定股权一段时间(几周到几个月后“解冻”),以防止任何恶意联合验证者 违反安全。在CFFG算法中,一个分杈选择规则永远只能修改最终块以后的块阻止了远程攻击。经过使用时间戳,在CFFG中的长距离分叉试图修改比最终块还要更早的块的时候会被协议直接忽略掉。

卡特尔形式

第三,最后的障碍是面临任意价值的任何经济形式都将面对一个真正的寡头垄断问题,就算本土加密货币也不例外。

“加密货币使人难以置信的集中,挖矿算力也是同样。寡头垄断竞争是不少现实市场的常态。少数相对富有的验证者之间的协调比多数相对贫穷验证者之间的协调要容易的多。在咱们这种状况下,卡特尔形式是彻底被预料到的。”

——Vlad Zamfir,Casper的历史第4章节

Tendermint依靠额外协议管理方法来与寡头垄断验证者进行对抗。虽然在审查制度方面没有任何协议措施,但依靠带外社会信息解决卡特尔造成,其中的基本原理是:用户最终将不可避免地注意到卡特尔的造成,社会上也会对此处处八卦,而后放弃或者投票从新组织受到攻击的区块链。

到目前为止,Vlad的Casper协议是惟一一个明确使用共识内审查激励来打击卡特尔形式一种模式。

3

概述

有不少不一样的方式来实现权益证实的算法,可是权益证实设计的两个主要原理是基于链的PoS和基于拜占庭容错(BFT)的PoS。Tendermint是基于拜占庭容错的PoS设计,CTFG是基于链的PoS设计,而CFFG则混合了二者。

计算机科学中的CAP理论(https://en.wikipedia.org/wiki/CAP_theorem)返回在分布式数据系统中提供超过2/3担保的不可能性:可用性、一致性、分区容错。基于链的PoS算法倾向于选择可用性高的而不选择一致性高的,由于可用性高意味着全部的交易都能被处理,不过要以牺牲整个网络中一致性状态复制为代价。基于BFT的却相反,会倾向于选择高一致性。

基于BTF的权益证实

拜占庭容错共识算法源于30多年的丰富研究。Tendermint(2014)是Castro和Liskov在1999年引入的实用拜占庭容错(PBFT)算法的第一个PoS的改编版。基于BFT的PoS协议伪随机的安排一个验证者在多轮投票的过程当中提出一个区块。可是,提交和最终化区块取决于大多数——全部验证者中2/3的验证者在提交的区块中签名。在区块最终化以前可能须要进行几轮(译者注:这种多轮投票和现实世界的波尔卡舞蹈相似, 这也是polkadot 名字的由来)签名。BFT系统只能容错1/3的失败,其中失败包括故障或是恶意的攻击。

Tendermint核心

Tendermint主要包含两个主要的技术:区块链共识引擎和通用的应用接口。共识引擎被称为Tendermint核心模块,确保相同的交易在每一个机器中都按照相同的顺序被记录下来。应用接口被称为应用区块连接口(ABCI),让交易能够被任何编程语言编写的程序处理。

在核心模块中,Tendermint基于循环投票机制进行工做,这也是共识协议的原理。一个回合被分红3个处理步骤:验证者提出一个块、发送提交意图、签名后提交一个新区块。这种机制为原子广播提供了一个安全的状态复制机,增长了一个责任层——安全故障能够彻底归结于Tendermint。

Tendermint共识算法从验证者集开始。验证者们都维护了一份区块链的全拷贝,而且能够用公钥来识别验证者的身份。在每一个新的块高度他们轮流的提出一个区块。每轮投票都只有一个验证者能够提出块,而且要用验证者相应的私钥对此进行签名,这样的话若是有错误发生就能够找到为此负责的验证者。而后剩下的验证者就须要对每一个提议都进行投票,投票都须要用本身的私钥进行签名。这些组成一个回合。不过可能由于网络的异步须要好几个回合才能提交一个新块。

image

验证者提交块的时候因为几种缘由可能会失败:当前的提议可能下线了,或者网络可能遇到了延迟。Tendermint容许验证者能够被跳过(就是轮到一个验证者出块的时候可是此验证者没出块)。验证者在移到下一轮投票以前等待一小段时间来接收提议者(此轮出块的验证者)提出的整个区块。这种对超时的依赖让Tendermint成为一个弱同步协议,而不是一个异步协议。不过,剩下的协议是异步的,而且验证者只有在接收到了超过2/3的验证者集消息时才会进行处理事物。正是由于这样,因此Tendermint须要大多数的验证者能够100%正常运行,若是1/3或更多的验证者离线或脱机,网路就会中止运行了。

假设少于1/3的验证者是拜占庭,Tendermint保证安全永远不会被破坏——也就是,验证者(2/3以上)永远不会在同一个高度提交冲突的区块。所以,基于Temdermint的区块链永远不会分叉。

目前为止,Tendermint的设计决策确实是把安全性和不可改变性地位放在了灵活性之上。在现实世界上有至关高的可能性是,系统真的会中止运行,参与者将会须要在协议外组织在某种软件上更新后重启系统。

在数字加密货币社区中只有少数人理解 Casper以及为何它颇有价值的时候,Tendermint就为Casper研究奠基了基础。这个洞察力就是:若是一个链的自己是高度容错的,那么你就能够依赖链来对于谁来生产区块作出一个好的决定,可是若是链的自己就是不可靠的,那么你就陷入了鸡和鸡蛋的问题中去了,这也是以前全部其余共识算法的灭顶之灾。

这个设计决策被认为不如可用性优先的协议例如以太坊和比特币。比特币中的权衡是:若是它的网络被分裂了,比特币在各类攻击的状况下就失去了它的安全保证。这其实就是一个不可修改理论,也就是你的置信区间是100%的时候,那么你跟随的就是一条正确的链,你会使用这条链来选择谁来生产下个区块,可是一旦你转移到一条不安全的链上以后,并无一条明确的路径让你回到正确的链上。

Tendermint的明确属性

  • 可证实的活跃性

  • 安全阈值:1/3的验证者

  • 公有/私有链相容

  • 即时的最终肯定性:1-3秒,取决于验证者数量

  • 一致性优先

  • 在弱同步性网络的共识安全

基于链的权益证实

基于链的权益证实模仿了工做量证实共识算法,在此权益证实中协议让伪随机选择出来的验证者产生一个新块,新块是哈希链接(包含上个块的哈希值)到前一个最长链的父区块上。基于链的PoS很是依赖同步的网络,一般优先考虑可用性而非一致性。Casper(s)对于倾向于活跃性而非安全性环境而言,它就是Tendermint核心思想的一个改编。

CFFG

CTFG是一个明确的PoS构造,可是CFFG是一个覆盖在已存在的以太坊PoW提议机制上的PoS——融合了PoW和PoS二者,由Vitalik Buterin带领实现。

比特币和以太坊的PoW共识协议都不会作“最终”决定,而且区块可能会潜在的被从新组织到一些过去区块高度。当区块没有机会再被修改的时候才能称为“最终肯定”的。由于工做量证实没有提供这样的修改保证,因此它被认为是共识不安全的。相反,当咱们持续加长链的时候区块的最终肯定性几率也愈来愈高。为了为以太坊区块链增长想要的最终肯定性和51%的攻击阻力,CFFG实现的逻辑就完美的提供了这种效果。

CFFG将经过多个步骤推出,以保守的方式将以太坊的PoW安全模式逐渐过渡到PoS安全模式。Casper的第一个迭代将会是实现这里讨论的混合PoW/PoS协议,Casper的最后一个迭代颇有可能吸收CFFG和CTFG的教训,朝着一个完整的PoS协议发展。

CFFG是基于链的PoS和基于BFT的PoS的之间的混合体,由于它吸收了二者的思想。它的模块化覆盖设计让如今的PoW链的更新变得更加容易,由于它对于将系统升级到彻底不一样的共识模式而言是一种更保守的方法。

Casper的应用逻辑存在于智能合约的内部。要想在Casper中成为验证者,必需要有ETH而且要将ETH存储到Casper智能合约中做为杠杆的权益。在Casper第一次迭代中区块提议的机制会被保留:它依然使用Nakamoto PoW共识,矿工能够建立区块。不过为了最终化区块,Casper的PoS覆盖掌握控制权,而且拥有本身的验证者在PoW矿工以后进行投票。

Casper的PoS共识最重要的一个部分就是检查点(checkpoints)。Casper在50区块增量的时候评估最终肯定性就称之为检查点,每50个块片断就称之为周期(epoch)。经过验证者在每一个周期发送投票消息时触发这个处理过程。

在一个周期前最终化检查点须要2个周期才能完成,也就是须要两轮投票。例如,当超过2/3的验证者(也就是大多数)给一个检查点c投票了,那么就说这个检查点已经被"审判"了。下一个周期,当大多数人给检查点c投票了,会发生两件事情:c变成了被审判的而且c已经最终化了。c这个周期也就表明着最后一个最终化的周期(LFE)。

回顾一下,一个区块最终化须要两个条件:

  • 大多数(超过2/3)验证者在周期1的时候给区块1进行了投票,所以审判了区块1

  • 大多数(超过2/3)验证者在周期2的时候给区块2进行了投票,区块2是区块1的子区块,所以在周期2的时候最终化了区块1

在理想执行中,一个区块的最终化是按照下面的步骤的:

区块1的2/3投票→审判区块1→2/3投票区块2→最终化区块1

  • 其中区块2是区块1的子区块

image

当一个检查点被最终化以后验证者就会获得报酬。不过,若是有两个最终化的检查点在相同高度上分杈时,那么就破坏了安全性,这个时候就达到了消减的条件,最少1/3的保证金将会被消减掉。当安全性被破坏的时候能够将错误归因的证据看成交易广播给PoW的矿工。而后PoW就将这个证据交易组成一个区块来进行挖矿,提交了这个证据的验证者会获得查找者的费用。当此事发生的时候,签署了在冲突区块的有罪验证者将会在两条链上被消减掉。

如今若是一个矿工进行蛮力攻击,那么会发生什么?如今Casper的最终化区块链能够防止PoW的攻击者,就算是51%或者更多的计算力重写最新检查点以外的历史也会被阻止。所以,Casper协议提供了安全。不像CTFG,由于CFFG就是不一样提议机制上的一层覆盖,Casper不能确保活跃性,由于活跃性是取决于提议机制的。

验证者是被激励着集合在权威链上的,由于若是他们持续在不一样的链上进行投票将会受到惩罚。slasher 2.0(https://link.jianshu.com/?t=https://docs.google.com/document/d/13_FSQ1Koq8uLvqTaSvZdb6OT2SpUZZq53vFiiDQj4qM/edit?usp=sharing)的造成让验证者不只仅会为双重投票而受罚也要为在不正确的链上进行投票而受到惩罚。不过这也形成了一个“泄气”的窘境,由于验证者担忧若是出现一个分杈而本身不肯定到底哪一个才是权威的,而后投错票以后被消减因此选择退出投票。

CFFG的明确属性

  • 最终化:超过20分钟最终化。每隔50块(一个周期)就最终化一次区块,防止PoW挖矿暴利攻击

  • 共识安全性

  • 可证实的活跃性

  • 优先可用性

CTFG

CTFG是Vlad Zamfir的正确构造(CBC)共识协议专用于对抗寡头垄断的真实世界的环境。CTFG是工做量证实中GHOS(https://eprint.iacr.org/2013/881.pdf)或GHOST协议的PoS改编版,用于其分杈选择规则。CTFG背后的指导设计原则是基于加密经济学的,使用旨在实现评估安全的正规方法。与前面详细说明的CFFG混合协议不一样,CTFG是纯粹的权益证实的概念。

“Casper刚刚开始的时候只是简单的‘友好的幽灵’,它对于PoS而言是GHOST的改编,完善的激励让卡特尔‘友善地’变成‘非卡特尔’的验证者。”

——Vlad Zamfir,Casper的历史第5章

与工做量证实相似,CTFG会为一致性和可用性进行权衡。特别,在区块没有被最终化的时候,随着在链中的深度越深的它们就会越安全。CTFG与CFFG有一点类似,链头部的处理老是比区块最终化的处理要快不少。

Casper的PoS提议机制与Tendermint提议机制最大的区别是相比较伪随机选择领导者,前者的验证者能够基于本身见到的块提出块。

Casper提供的一个独特功能是参数化安全阈值。与比特币中使用6个确认来肯定一个经济最终状态相似,CTFG中的“评估安全”提供了一个验证者能够有一个与其余验证者不一样的安全阈值功能。Casper的设计目标是在网络维持PoS低开销的时候可以容许验证者选择本身的容错阈值。

Casper对Tendermint的核心优点在于网络随时能够容纳必定数量的验证者。由于Tendermint中的区块在建立的时候须要最终化,因此区块的确认时间应该短一点。为了达到短区块时间,Tendermint PoS可以容纳的验证者数量就须要有个限制。因为CTFG和CFFG到在区块建立的时候都不须要安全性,因此以太坊网络相对于cosmos容纳100个验证者来讲,能够容纳验证者的数量会更加的多一点。

CTFG的明确属性

  • 可用性。Casper的节点在它们达成共识以前能够块分杈

  • 异步安全性

  • 生存。Casper的决策能够在部分同步中存活,可是不能在异步中存活

  • 卡特尔阻力。Casper的整个前提是创建在抵制寡头垄断攻击者基础之上,所以不会有任何勾结的验证者能够超越协议

  • 安全性。取决于每一个验证者的评估安全阈值

4

将来的工做

公链在产品上运行是一个比较新生的技术。在这个范例中到目前为止显示出不会腐败的惟一安全模型就是工做量证实。权益证实的设计空间还很是的大,并且工程学上权衡的理解也远远不够,由于权益证实是一个研究前沿也没有足够的数据。不用多说,要达到一个最佳的PoS共识算法,咱们还有不少将来工做须要完成。

Tendermint的一个改进多是新的提出机制,或者将Tendermint的多轮投票过程压缩成一轮投票。

第二个将来工做的领域多是利用更高级的加密技术让区块头的签名更小一点。由于咱们是经过Cosmos来创建一个“区块链的互联网”,因此将轻客户端证实从一条链上移到另外一条链上就是咱们的核心工做。从这个观点来看的话,使用更加高级的密码学将区块头的大小减小三十倍或者更可能是很是有利的。目前,100验证者,Tendermint的区块头接近4KB,它们都是验证者的签名。咱们可使用高级的加密技术让100个签名从3.2KB减小到64字节。

还有一些优化p2p层的方法,这样咱们就能够显著减小点对点须要最终化块的流量。在将来的工做中,不只仅是压缩区块头中的数据量,还会减小发送到对端的数据量。这样的话,在Cosmos网络初始100个验证者的阈值之上,Tendermint还能够增长更大的验证者集。

内容来源:简书

做者:Lilymoana

原文地址:Consensus Compare: Casper vs. Tendermint

翻译做者:许莉

如下是咱们的社区介绍,欢迎各类合做、交流、学习:)

image

相关文章
相关标签/搜索