logo头像

区块链学习小栈

什么是以太坊Gasper协议?

要讲清楚以太坊的Casper协议,首先要从先共识机制讲起,然后才能明白POW和POS(包括Casper)各解决什么问题。

共识机制

区块链是一种去中心化的分布式账本,与传统的中心化系统相比,具有不可篡改和不依赖任何
第三方的优点。

但是在这个账本中,因为没有了一个可信任的第三方,就带来了由谁来进行记账,以及由于网
络延迟可能造成若干节点所观察到的事务先后顺序不能完全一致的问题。这就需要每个节点对
在某一时间内发生的事务的先后顺序和最终由谁来记账有一个共识。

所以“共识机制”就是对某一个时间内的事务的先后顺序,以及由谁来记账达成共识的算法。

POW(工作量证明机制)

众所周知,比特币利用了POW解决了去中心化系统中的信任问题,通过贡献算力来竞争最终
的记账权。理论上来说POW只要算力达不到51%就不能对账本的信息进行篡改,也就是不能
作恶,本质上是通过提高作恶的成本来预防作恶。但是有个别的矿池其算力曾短暂达到5
0%,而且这种情况发生了不止一次,再加上POW本身具有海量能源消耗的缺点,于是人们就
提出了POS机制。

全球Hash算力分布图

POS(权益证明机制)

POW机制是拥有算力越大,则成为下一个记账人的概率越大。而POS将POW中的算力改成了
系统权益,既在系统中拥有权益越大则成为下一个记账人的概率越大。
POS有点类似于我们熟知的股权,你在一个公司中握有的股权越多,你在公司中的话语权就
越大,所以也有人叫它“股权证明机制”。其逻辑就是一个人在这个系统中的权益越多,就越
不会在这个系统中作恶,因为如果这个人在系统中作恶,就损害了这个系统,那么这个人在系
统中的权益将会贬值,这也就变相的提高了人们作恶的成本。

POS最大的优点就是不用再贡献算力,这就意味着非常省电。

但是POS同样具有缺陷。在系统中拥有权益越大则成为下一个记账人的概率越大,这并不意
味着这个人100%会得到记账权,如果有一个人在系统中的权益并没有大到能让他放弃作恶,
他作恶的成本是小于他作恶的收益的,那么这个系统就会受到威胁(无利害关系问题)。
为了应对这个问题,后来又出现了POS的变种DPOS,这个机制简单粗暴,没权益的干脆就没
机会参与记账,只有那些权益高的人才能参加共识,但是这样就变成了一个本质上是中心化的

以太坊的POS(Casper)

Casper是一种基于保证金的经济激励共识协议,它的出现是为了解决POS中的无利
害关系问题。

简单地说,一帮子在系统中拥有权益的人,通过支付在系统中的权益下注,来进行这一次记账的共识。获
得下注最多的那个记账行为将被认可为有效而保存在系统中,如果下注下对了,那么这帮子人
就能从这次下注的过程中获得奖励。如果这帮子人中有人想作恶,将注下在了其他记账行为
上,而这个记账行为并不被大多数人所认可,被大多人认为是无效的记账行为,那么下的注也
就会被没收。

Casper跟其他PoS协议到底哪里不一样呢?

Casper实施了一个进程,使得它可以惩罚所有的恶意因素。这就是权益证明在Casper下是如何工作的:

验证者押下一定比例的他们拥有的以太币作为保证金。
然后,他们将开始验证区块。也就是说,当他们发现一个可以他们认为可以被加到链上的区块的时候,他们将以通过押下赌注来验证它。
如果该区块被加到链上,然后验证者们将得到一个跟他们的赌注成比例的奖励。
但是,如果一个验证者采用一种恶意的方式行动、试图做“无利害关系”的事,他们将立即遭到惩罚,他们所有的权益都会被砍掉。
正如你可以看到的,Casper被设计成可以在一个无需信任的系统上工作,并且是更加拜占庭容错的。

任何人,如果以一种恶意的,或者说是拜占庭叛徒式的方式行动,就会立即受到惩罚、失去他们的保证金。这就是它不同于其他权益证明协议的地方。恶意元素会失去一些东西,所以,“无利害关系”是不可能的。

这不是唯一一个Casper可以惩罚验证者的地方。

正如Hudson James以及Joris Bontje在“StackExchange”的回答中标注的那样,Casper设计了苛刻的激励来保证网络的安全,包括惩罚离线的矿工,不管ta是有意还是无意的。

这意味着验证者将不得不变得对他们的节点正常运行时间小心翼翼。粗心或者懒惰都将导致他们失去自己保证金。这一属性减少了对交易和整体利用率的审查。围绕着所有这些,这种“惩罚”属性同样给予了Casper相对标准工作量证明协议的明显优势。

Casper不是一个具体的项目。

它是两个研究项目的融合,这两个在最近一直由以太坊开发者团队承担:

  • Casper the Friendly Finality Gadget(FFG)
  • Casper the Friendly GHOST: Correct-by-Construction(CBC)

Casper FFG

Casper FFG也就是众所周知的Vitalik版Casper,是一个混合PoW/PoS共识机制。它是正准备进行初步应用的版本,也是被精心设计好来缓冲权益证明的转变过程的。设计的方式是,一个权益证明协议被叠加在正常的以太坊版工作量证明协议上。虽然区块仍将通过工作量证明来挖出,每50个区块就将有一个权益证明检查点,也就是网络中验证者评估确定性(Finality)的地方。

什么是确定性(Finality)?

确定性(Finality),从一个非常宽松的意义上来说,意味着一旦一个特定的操作完成,它将永远被蚀刻在历史上,没有任何东西可以逆转这个操作。在处理金融事务的领域,这是非常重要的。想象Alice在一个公司里拥有特定数目的一种资产。就算公司的某些进程中出了一点小故障,她也不应该需要恢复对该资产的所有权(因为小故障并不影响她的所有权)。

有人说,工作量证明是唯一一种在区块链上实现确定性的方式。但是,这并不是必然正确的。真相远比这个要复杂很多。

正如Vitalic Buterin提出的,世界上没有一个系统可以提供100%的确定性。黑进一个系统,或者物理上破解一份注册表并篡改数字以改变一个人的资产负债表,都是有可能的。这也是中心化机构的一个大问题。但是,分布式的系统也会面临同样的问题。

实际上,比特币,工作量证明机制的典范,至少三次曾经面临确定性问题。在一个例子中,链必须分叉,因为一个Bug存在于软件的一个版本中但在其它版本中并不存在。这在社区中导致了分裂,一部分人拒接接受被另一部分人所接受的链。这次分裂在6个小时中被解决。

所以,问题在于,Casper FFG如何能够提供确定性?根据Vitalik的说法 ,因为下面三个理由,Casper保证可以提供比工作量证明更强的确定性:

完全经济确定性。三分之二的验证者会下最大几率的赌注使区块达到最终一致。因此,对他们来说,串谋以及攻击网络的激励是非常小的,因为,如果他们这样做的话,他们将危及自己的保证金。Vlad Zamfir更好地解释了这一点,他说:“设想一种版本的工作量证明,如果你参与一场51%供给的话,你的矿机会烧毁。”
假设整个网络由三个人组成:Alice,Bob,和Charlie。假设Alice和Bob将他们的保证金放在一种结论上,同时,Bob和Charlie把他们的保证金放在一个与之对立的结论上。不管发生什么事,Alice或者Charlie其中一人肯定会损失一大笔钱。所以,正如你可以看到的,验证者没有动机去串谋或用恶意的方式行动,因为他们总会失去一大笔钱。
然而,如果双重确定性(Double Finality)发生的话,还有一种意外事故处理方案。如果双重确定性发生的话,用户可以选择他们想到哪条链上去。不管哪条链,得到多数票的就成为主链。基本上,在Casper上,双重确认会导致硬分叉而不是回滚。

Casper CBC

Casper CBC也就是我们所知的Vlad版Casper使用建构修正(correct-by-construction,CBC)协议。

那什么是CBC协议呢?

这是一个普通的协议设计的样子:

你正式指定协议。
定义该协议必须满足的属性。
证明该协议可以满足给定的属性。
而CBC协议的样子是:

你正式地但只是部分地指定协议。
定义该协议必须指定的属性。
从满足所有它被规定去指明的属性中推导出该协议。
用大白话来说,你是动态地推导出该协议的。获得完整协议的其中一种方式是运行一种Vald称为“理想对手(ideal adversary)”的预估安全预言机(estimate safety oracle),它运行下列两者之一:

提出一个合理估计的错误的例外情况。
列出所有在未来可能发生的错误。
所以,这个理想对手要做的事情,就是不断进行微调、让这个只是部分建构好的协议更加完美,直到它变成完全版。

可以看到的是,以太坊开发者团队一直在努力地开发这两个Casper项目。很明显,这不会是最终版本,但不管这最终版本是什么,它肯定会受到Vlad的和Vitalik的Casper的深刻影响。正如刚刚提到过的,Vitalik的Casper将被初步运行以缓冲从PoW到PoS的转变。而Vlad的Casper,通过使用一个“理想对手”推导出一个安全性论证。