查看原文
其他

干货 | Vitalik:Casper 的过去、现在和未来

1/ 今天我准备发一个推特流,解释一下以太坊 Casper 研究的历史和现状,包括 FFG 和 CBC 的分歧、(工作量/权益)混合共识到完全 PoS 的转变、随机性在 Casper 中的角色、机制设计挑战,以及其它。

2/ 以太坊权益证明研究开始于 2014 年 1 月,是从剑手协议(Slasher Protocol)开始的 [1]。虽然算法远远称不上完善,这一研究还是给了我们一些很重要的观念,尤其是用惩罚措施来解决无利害关系问题(Nothing at Stake)[2]

3/ 话虽如此,我当时使用的惩罚措施是非常轻的,只是取消了签名奖励(Signing Reward)。Vlad Zamfir 在 2014 年年中加入,他迅速地推进,指出要让验证者存储 保证金,而且数额要比奖励大很多,以此驱逐恶意行为。

4/ 这是 Vlad 的回顾:[3](编者注:中译本见文末《Casper 的历史起源,Part-1》)

5/ 2014 年下半年的大部分时间,我们都在试着处理“长程攻击(Long Range Attack)”:攻击者可以先取回他们质押在主链上的权益,然后创建一条替代性的“攻击链”,只要该链比主链有更多签名,他们便可愚弄客户端切换到攻击链。

6/ 如果攻击链在一个离当下非常近的时间点偏离主链,这就不会是一个问题,因为如果验证者为两条相互冲突的链签名了两条相互冲突的消息,我们就可以此为证据惩罚他们并没收保证金。

7/ 但如果这种偏转发生在很久以前的区块上(这就是为什么它被称作“长程攻击”),攻击者可以取出他们的保证金,在所有链上都免于受罚。

8/ 最终我们确定,长程攻击是无可避免的,因为 PoW 支持者说的许多原因(例如:[4])。但我们不同意他们的结论。

9/ 我们意识到,我们可以通过引入额外的安全假设来对付长程攻击:客户端每 4 个月登录至少一次(而保证金要 4 个月之后才能取出),那么客户端就可以直接拒绝比这个时间更长的回滚。

10/ 对 PoW 支持者来说这简直是大逆不道,因为这一假设似乎需要信任:在你第一次同步的时候,你需要从一些受信的来源获得区块链。

11/ 但对我们这些“没有底线”的主观主义者来说,看起来这没什么大不了的;不论什么情况下,你都需要一些可信源头来告诉你区块链使用的共识规则(而且还有软件升级这回事呢)。所以这一 PoS 假设所要求的额外信任也不是什么大事。

12/ 这是 Vlad 的回顾:[5](编者注:即《Casper 的历史起源,Part-2》)

13/ 明确了要使用保证金和惩罚措施还不够,我们还必需决定保证金和惩罚措施是什么样的。我们知道我们想要“经济确定性(Economic Finality)”,也就是说:

14/ 一旦某个区块得到验证者签名,被“敲定(Finalized)”,就没有任何 冲突 区块可以被敲定,除非大部分的验证者签署了与他们早先签署的消息相冲突的消息;此种签署方式可以被区块链检测到,因此这样的验证者也会受到惩罚。

15/ 我在自己称作是“打赌共识(Consensus by Bet)”的方向上走了很远,但最终没有结果 [6](编者注:中译本见文末超链接《理解 Serenity,Part-2》)

16/ 打赌共识是一种很有趣的结构:验证者是在打赌哪个块会被敲定,而这些赌注本身决定了共识偏爱哪条链。

17/ 理论上来说,PoW 也具有这种属性,因为挖矿就是一种赌博,如果你押中了对的链,你就赚钱(奖励 - 挖矿成本);如果你押错了宝,你就会损失挖矿成本;只不过,在 PoS 中,我们可以将赌注的赔率推得更高。

18/ 验证者一开始下注时赔率较低,但因为验证者看到其他验证者对某一个区块有越来越强的信心,每一个人的赔率都会互不干扰地迅速上升,直到最后,他们将自己全部的保证金都押在一个区块上,这就是“确定性”。

19/ 与此同时,Vlad 开始研究机制设计,特别是希望 Casper 可以更强健地抵制寡头形成;而我们也开始关注受传统拜占庭容错理论启发的共识算法,比如 Tendermint。

20/ Vlad 认为,传统拜占庭容错理论是很差劲的(他尤其不喜欢硬上限,比如实用拜占庭容错算法(PBFT)和 Tendermint 中的 2/3),他想尝试高效地彻底改造 BFT 理论,运用他称之为“建构中修正(Correct by Construction,CBC)”的方法。

21/ 这是 Vlad 自己说的 [7] [8] [9](编者注:Casper 历史起源的 Part-3、Part-4 和 Part-5)。

22/ “建构中修正”的哲学迥异于传统的拜占庭容错理论,因为其“确定性”是完全主观的。在 CBC 哲学中,验证者签署消息,如果他们签署的消息与此前自己签署过的消息相冲突……

23/ ……他们就不得不提交一份“辩护词”,证明在很大程度上,他们“更支持”新近投票支持的区块,因此他们有权利转投。

24/ 要发现确定性,客户端就要找到这样的消息模式:可以证明大多数验证者确实把票投给了区块 B,并且没有办法脱离区块B,除非大量验证者“非法地”转投其它区块。

25/ 举个例子,如果每个人都把票投给了 B,然后每个人都投票给了包含对 B 投票记录的区块,这就证明他们支持 B 并且意识到了其他所有人也都支持 B,因此他们也就没有合法理由从 B 转投到其它区块上。

26/ 我最终放弃了“打赌共识”,因为这一方案看起来实在是太过冒险了,那么我就转过去试图理解 PBFT 的工作原理。虽然花了不少时间,但几个月之后我就弄清楚了。

27/ 我简化了 PBFT [10],然后将它化用到区块链环境中,转述为 4 条“罚没条件”。这些条件规定了哪些消息组合是自我矛盾的因此是非法的:[11]

28/ 我定义了一条规则来确定什么时候区块会敲定,并证实了关键的“安全性”和“合理活性(Plausible Liveness)”:(i)一旦某个区块被敲定,除非 >= 1/3 的权益违反罚没条件,否则冲突区块不能被敲定……

29/ (ii)一旦某个区块被敲定,2/3 诚实验证者可以必定联合起来敲定一个新区块。所以只要诚实验证者权重超过 2/3 ,算法就既不能“自相矛盾”,也不能“卡死”。

30/ 我最终把最少罚没条件从 4 条简化为 2 条,那时候就出现了 Casper FFG(Friendly Finality Gadget),它被设计为可以覆盖在任何 PoW 或 PoS 或其它类型的区块上,用于增加确定性保证。

31/ 确定性是一个非常重要的进步:一旦某区块被敲定,它就是安全的,无论网络延迟如何(不像 PoW 还需要后续区块确认);并且回滚区块要求 >= 1/3 的验证者作弊,但作弊可以被发现,作弊的证据可用于罚没他们的保证金。

32/ 因此,回滚确定性的成本可以上升到数十亿美元。Casper CBC 和 Casper FFG 方案都实现了确定性,虽然用了不一样的技术。

33/ 注意,Casper CBC 和 Casper FFG 都是覆盖层,需要应用在已有的分叉选择规则上,尽管抽象工作的方式有所不同。

34/ 用大白话来说,在 Casper CBC 中,确定性覆盖层适应分叉选择规则;但在 Casper FFG 中,分叉选择规则适应确定性覆盖层。

35/ Vlad 最初对分叉选择规则的偏好是“最新消息驱动型 GHOST”,GHOST 用于权益证明的一种改良版本 [12];我一开始的偏好是从混合 PoS 开始,使用工作量证明作为基本的分叉选择规则。

36/ 在 Casper FFG 的最初版本中,工作量证明会一个一个区块驱动链生长,而权益证明会随后将它们敲定。Casper CBC 从一开始就是完全的权益证明。

37/ 与此同时,Vlad 和我都开始提出各自的思想流派关于共识算法 激励 理论的观点。

38/ 此处,一个非常重要的分歧是在“可独占归因型错误”与“不可独占归因型错误(Non-uniquely-attributable Faults )”之间的。前一种情境中,你可以分辨出谁对错误负有责任,因此也可以惩罚他;在后一种情境中,可能是多方中的一方对错误负有责任。

39/ 不可独占归因型错误的经典情形是是下线 vs 审查,也被称为“说者-听者错误等价(Speaker-listener Fault Equivalence)”。

40/ 惩罚可独占归因型错误(例如,Casper FFG 罚没条件)是容易的。但惩罚不可独占归因型错误就很难。

41/ 如果你没办法分辨出区块敲定中止是因为少数人下线了还是因为多数人审查了少数人,那会怎么样?

42/ 对这一问题有三种流派的观点:(i)轻微惩罚双方;(ii)严惩双方(Vlad 偏爱这种方案);(iii)将链一分为二,各自只惩罚一方,让市场来决定哪条链更有价值(我偏爱这种方案)。

43/ 可以看看我的想法:[13]

44/ 在 2017 年 11 月, Casper FFG 罚没条件加上我用“二次泄压(Quadratic Leak)”机制解决“1/3 下线问题”的想法,变成了一篇论文 [14]

45/ 当然,我很清楚地意识到,诉诸社会层面来解决 51% 攻击不是一个非常好的事情,所以我开始寻找一种办法,至少能让在线的客户端 自动地 检测到哪条链是“合法的”,哪条是正在发动“攻击”的。

46/ 这是我早期的想法中的一种:[15]。它算是成型了,但仍不够理想;除非网络延迟绝对是 0,否则只能保证一点:不同客户端对同一链的怀疑值最多会有 δ 的差异,但客户端无法达成一致。

47/ 与此同时,我对 Vlad 模型的主要批评在于“威吓攻击(Discouragement Attack)”:攻击者们可以可信地威胁发动导致所有人都遭受损失的 51% 攻击,让其他所有人都逃离,然后几乎不费吹灰之力接管整条链。

48/ Vlad(以及 Georgios Piliouras)开始建立一些经济模型来估计这样一种攻击的实际成本。

49/ 值得指出的是,所有这些问题都不是权益证明独有的。实际上,在工作量证明中,人们倾向于放弃并假设从 51% 攻击中恢复是绝对不可能的,因此 51% 攻击是必须不计代价阻止的世界末日。

50/ 但是,正如以太坊一贯以来的传统,Vlad 和我都没有意识到,“雄心勃勃(ambitious)”一词绝对不是恭维,因此都用我们各自的方法不懈工作,致力于压制和缓解 51% 攻击,以及从中恢复的方法。

51/ 在 2018 年上半年,Vlad 在 CBC 中的工作开始快速推进,在安全性证明上有了长足的进展。要了解 2018 年 3 月的进度,请看这个两小时的演讲 [16]

52/ 与此同时,Casper FFG 也向前迈了一大步。我们决定用发布到以太坊区块链的合约来实现它,以让开发工作变得更加简单。2017 年 12 月 31 日 23:40,我们放出了用 Python 写成的测试网:[17]

53/ 不幸的是,FFG 的开发工作随后便慢下来。用合约来实现 FFG 的决定确实让一些事情变得简单,但也让另一些事情变得更难,这也意味着:从 EVM 最终切换到 EWASM,以及从单链 Casper 到分片 Casper,会变得更难。

54/ 此外,团队工作开始分化为“主链 Casper”和“分片链 Casper”;事情明摆着,在 Casper 团队和分片团队之间游走会导致很多不必要的重复工作。

55/ 在 2018 年 6 月,我们做了一个攸关生死的决定:彻底放弃“用合约实现混合 Casper FFG”的想法,代之以追求完全 Casper 的独立链,改变设计让整合分片变得更加容易。

56/ 转向完全的权益证明让我开始更加努力地思考权益证明的分叉选择规则。

57/ Casper FFG(以及 CBC)都要求,在每一个“轮次(epoch)”都有 完整 的验证者集来投票敲定区块;这意味着每秒钟都会有数以千计的签名要通过网络发送。BLS 签名聚合方案让这一点至少在计算开销上是可以接受的……

58/ ……但我想试着利用所有这些额外的签名方案,让整条链可以更“稳定”,在几秒内获得价值“100 个确认”的安全性。

59/ 这里是我最初的尝试:[18] [19]

60/ 然而,所有这些方法作为分叉选择规则都有一个弱点:将验证者区分为“见证者(Attester)”和“提议者(Proposer)”,而提议者变成了区块生产的关键一环,拥有了过于巨大的权力。

61/ 这当然不是我想要的,因为它使得我们必须拥有一个强大的链上随机数源来公正地选出提议者。而链上随机性是 难以实现的,像 RANDAO 这样简单的方案可以发现越来越多的问题 [20]

62/ Justin Drake 和我用两种方式来解决这个问题,Justin 使用可验证延迟函数(Verifiable Delay Function,VDF),这一函数有确定且可验证的输出,不过要花大量不可并行化的连续时间来计算,消除了提前操纵的可能……

63/ ……我自己则对 Vlad 神教TM 做了重大让步,使用了基于 GHOST 的分叉选择规则来大幅减少对提议者的依赖,这使得即便 >90% 的提议者都是恶意的,只要 >50% 的见证者是诚实的,链就可以不受干预地生长。

64/ 那时候 Vlad 非常开心,不过还不能算开心得飞起:他偏爱的 GHOST 版本基于验证者的 最新消息,而我偏爱的版本基于 即时消息:[21]

65/ 大约同一时间,我还想出一种办法来“管道化” Casper FFG,将实现确定性的时间从 2.5 个轮次减少到理论上最优的 2 个轮次:[22]

66/ 我非常高兴 RPJ 分叉选择规则(在那以后我该称其为“即时消息驱动型 GHOST”)可以用一种别的算法都做不到的方式很好地兼容 Casper FFG……

67/ …… 并且它也有非常重要的“稳定”属性:从当前分叉选择中可以很好地预见未来分叉时的选择。看起来很明显,但分叉选择规则很容易不小心就 丧失 这种属性。

68/ 所有这一切的最新进展是:最新消息驱动型 GHOST 也许,因为技术原因,在两轮内只有 25% 的容错能力,而即时消息驱动型 GHOST(加上 FFG 或 CBC)可以有完全的 33%(虽然还没有写出来)。

69/ FFG 和 CBC 之间的主要权衡是,理论上 CBC 具有更好的属性,但 FFG 看起来更容易实现。

70/ 另一方面,可验证延迟函数方面出现了 大量 进展:[23]

71/ 同样地,我最近决定深入学习 Lamport 1982 年的旧论文,里面有一种共识算法可以实现 99% 的容错能力,只要你加入一个假设:所有节点,包括观察者,全部都在线且网络延迟很低:[24]

72/ 网络延迟假设可能使它不适合作为一种首要的共识算法,不过,在一种场景下它可以运作得 非常 好:作为怀疑值的替代方案,用于发现 51% 审查。

73/ 基本上,如果 51% 的权益开始联合审查区块,其它验证者和客户端可以发现这一点,然后使用 99% 容错算法来达成共识,联合发动少数方分叉。

74/ 这一研究的长期目标是尽可能减少对社会层面的依赖,最大化扰乱链运行的成本,使其必须回到社会层面来。

75/ 那么还剩下什么议题呢?在 FFG 这一方面,包括形式化验证、改进技术规范、实现上的不断推进(已经有 >= 3 支团队开始了),还有对安全和迅速部署的关注。在 CBC 这一方面,大体相似。快高长大吧!




一些网友对 Vitalik 的回应:


-我的推特客户端验证了这是推特历史上最长的推文,因此称为最有效的推链!

内容很有意思,非常感谢!-


-回复第73条:如果大于 51% 的联合是大集团与政府的联合呢?如果你正在使用的某个被中心化机构控制的 app 选择了在谷歌链上运行呢?如果你只是一名用户,你关心的是什么?-


-又一个对于以太坊发展蓝图的天才计划!大神请不要停下来~-


-这可能是 V 神承认 “Vald 是对的” 最长的一次解释。Vlad 肯定在偷笑,“早就告诉你我是对的啦!”不过说正经的,还有很多人都很感谢你们作出的贡献,虽然我们没有那些诋毁者叫得大声。非常感谢~ -



原文链接: 

https://twitter.com/VitalikButerin/status/1029900695925706753
作者: Vitalik
翻译&校对: 阿剑 & Elisa


你可能还会喜欢:

干货 | Casper 机制的历史起源:第一篇
Casper机制的历史起源—第二篇
干货 | 以太坊 Casper FFG Overview


    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存