为什么不从头开始简单地创建一个新系统,而是费劲的在1.0上修改出2.0?
以太坊技术应用大会今天在北京举行,V神、以太坊基金会核心成员、以太坊DAPP开发者等重量级嘉宾云集,此次大会以以太坊2.0为主要议题。
大众也普遍关注以太坊2.0的进展,此次大会V神发表了名为“以太坊2.0之跨分片交易”的演讲。
讨论以太坊 2.0 路线图、研究提案及其发展现状的文章已经很多了,然而有关以太坊 2.0 内部运行背后的设计原则和不变量的文章却不多。
作者简介:Raul Jordan,Raul Jordan 是 Prysmatic Labs 联合创始人,也兼任 zk Capital 合伙人,毕业于哈佛,区块链工程师、以太坊开发者,专注于 Prysmatic Labs 分片技术开发。
很多文章都在讨论以太坊2.0的路线图、研究方案和现状。然而,关于其内部工作背后的设计原则和不变量的公开写作并不多。对于这种协调多年的努力来说,拥有一套明确的不变量,对其成功至关重要,并且,这会使得执行者思考以太坊哲学的一面。
本文将解释其中一些设计决策、背景以及它们对协议未来的重要性。
一、历史
自从以太坊网络诞生以来,试图将以太坊从PoW转换为PoS,是一个重大的进展。Vitalik Buterin当时正在探索一种可行的解决方案,以防不成熟PoS的缺陷,并提供比PoW更大的安全保障。
尤其是,他和以太坊研究小组设计了一种称为slasher的的机制,来惩罚PoS中恶意行为者并削减其全部抵押(Buterin 2014)。
数学家Vlad Zamfir随后加入了该项目,2014年的大部分工作都集中在解决所谓的PoS的远程攻击。
当攻击者可以从头开始创建一个比当前规范区块链更长的全链,以便在新的规范状态下说服网络中的其他人时,远程攻击就会发生。
这几乎不可能在PoW中执行,因为它需要大量的复合计算能力。然而,PoS不依赖于计算能力,因此在这种攻击下会崩溃(Zamfir 2014)。
Vitalik和Vlad都赞同:除了“严格阻止客户同步比某个检查点更早的链”之外,没有可行的远程攻击解决方案(Buterin 2015)。
这意味着,不需从创世区块同步链,网络中的新节点只需要从最近的“检查点”同步网络中最终确定的其他节点。
也就是说,当新节点加入网络时,旧节点存在固有信任。这种现象后来被称为PoS的弱主观性。当新节点加入时,对于“最终确定的”、“不可逆转的”区块在网络中的参与者之间存在主观信任(Buterin 2018)。
在此期间,来自以太坊基金会的Vitalik和Virgil Griffith致力于在ArXiV上发布Casper PoS白皮书的初始版本(Buterin和Griffith 2015)。
2014-2017年,是一段很长的时期,它标志着以太坊试图在目前运行的PoW链上覆盖基于PoS的终结系统。与此同时,人们正努力实现状态分片,以作为分区方案以扩展以太坊区块链。
然而,在2018年,当这两项举措被结合在一起,并且在3月份的台北标志性研究会议之后,以太坊研究团队提议将Casper PoS 与分片合并为一项名为Ethereum Serenity的计划,也称为作为以太坊2.0。
二、为什么选择ETH 2.0?
本文要解释核心问题背后的设计理由:“ 为什么要使用以太坊2.0?”。
当然,对现有系统的共识协议和数据完整性进行彻底检查,并不是通过硬分叉就可以轻松完成的—-从头开始简单地创建一个新系统并完全放弃以太坊1.0不是更容易吗?
构建ETH 2.0 时,我们面临的一个难题是,需要让社区了解这一挑战,并清楚地了解过渡到ETH 2.0 背后的巨大利益和需求。
在理解这种范式转变带来的巨大责任的同时,没有比现在更好的时间来构建ETH 2.0 。无论喜欢与否,加密行业仍然处于起步阶段,我们今天做出的决定,将对加速增长和这些年的采用多年的产生复合的效果。
向PoS的迁移,已经等待了足够长的时间,以太坊应用程序的可扩展性也是如此。没有比现在更好的时间来构建ETH 2.0 了,团队已经做好了准备。
三、挑战未来
缺乏经验的Layer 1 扩展可能会带来巨大的安全花费:将区分链分片防止全球交易验证,就像当前比特币和以太坊链所做的那样。
关键问题是:如何在不牺牲去中心化或安全性的同时,获得可扩展性?许多竞争链旨在寻求中心化路线作为解决这一问题的手段。
以太坊选择不同的方法:将网络状态划分为1024个分片,这些分片表现为一组同质的区块链,每个区块链由称为信标链(beacon chain)的单个根链协调。信标链在完整的Casper PoS上运行,没有委托也没有中心化投票权。
在这种方法中,每个节点仅负责整个网络中发生的一部分交易,并且许多块可以并行发生,从而线性地增加整体网络吞吐量。
此解决方案旨在回答以下问题:
如果交易未被全局验证,网络的安全配置文件会如何变化?如何在防止卡特尔形成的同时,选择验证参与者?如何设计激励措施,以最大化数据可用性和鼓励积极参与?
经过多年的研究、探索以及对取舍的理解,以太坊寻求PoS作为其共识算法。如前所述,奖励是确定性的,验证实体在协议中具有相同的待遇、参与委员会的概率相同、同样获得奖励/惩罚。
全局交易验证变为间接验证。每条分片链中的每笔交易都将首先由该分片中的验证者进行验证,并且,信标链在ETH 2.0 上扮演“协调器”的角色。
四、设计不变量
协议设计的一个关键支柱是,理解协议将在哪些不变量下运行。对于以太坊及其开发者社区而言,拥有一份不可协商的设计决策清单,对项目的未来至关重要。
我们可以将ETH 2.0 的核心分解为以下要点:
1、参与网络应该是无需许可的;
2、Layer 1 在其范围内应该简洁,抽象和紧凑;
3、该协议应该是最具表现力的,而不是假设它的未来用途 ;
4、网络应该倾向于有生命力,以有效地从任何灾难性场景中恢复;
5、将协议的复杂性与应用程序开发的复杂性区分开来。
1、无需许可
以太坊2.0与其他“下一代”区块链之间的显著差异在于如何确定参与共识。以太坊2.0对验证者的唯一要求是拥有32枚ETH。
这里没有代理,不需要投票去选择验证节点,没有中心化的宪法来决定谁参加。更重要的是,以太坊2.0中的验证者都被平等对待:每个实体参与的硬性要求都是32个ETH。
但是,任何个人都可以拥有多个验证者身份。这仅仅是为简化共识协议的安全性和紧凑性而做的决定。从激励设计角度考虑,且为了形式化建模,在对区块进行投票验证时,平等对待所有参与者是非常重要的。
1个验证者= 质押32个ETH,不能比这个多。其他链旨在通过采用更中心化的验证方法来解决可扩展性问题。然而,对于以太坊而言,不考虑这种选择。
2、简洁,但最具表现力
以太坊2.0在其核心定义和实现目标上,力求简洁和紧凑。从根本上讲,它是一个可扩展的、无需权限的平台,用于搭建去中心化的应用程序。
没有必要在以太坊2.0中引入应用程序逻辑,这是有充分理由的。人们可以将以太坊2.0系统类比为一个精简的Linux内核 - 它不是由操作系统来决定其所包含的功能或假设的用例,而是由为内核搭建应用程序的开发人员决定。
“假设意图”这种做法是有限制性的。旧的以太坊格言说“我们没有任何特征”,这理念同样适用于以太坊2.0。
3、保证安全性
以太坊2.0的PoS模式,也就是Casper the Friendly Finality Gadget,在一系列旨在保持高度活跃度和网络参与度的激励措施下运作。
以太坊2.0扩展了Casper,以利用其属性来保护分片区块链网络的安全。也就是说,以太坊2.0使用“链终结性阈值”的概念来确保系统中的1024个分片共享与信标链相同的安全池。
PoS的核心前提是,验证者都会因为按预期完成指定工作而获得奖励,或因为处于离线状态而损失质押金,或因为恶意违反协议而受到严厉处罚(质押金被没收)。
虽然前提很简洁,但细节决定成败。一旦我们意识到我们不仅要考虑每个验证者的行为,而且要且要考虑整个验证者委员会行为,Casper的经济学很快变得更加复杂。
一般来说,PoS链的一个开放性问题是,应该何时惩罚行为,以及如何根据某些验证者行为的严重性来进行不同的处罚。也就是说,我们需要找到一种足够全面的惩罚措施,以便在保持简洁的同时涵盖所有边缘案例。
鉴于协议依赖于验证者活动,且依赖于对运行时间的持久观测,那么可能存在诚实的验证者无法参与的情况。诚实的验证者可能会由于停电、网络不稳定或其他因素而离线,但我们需要明确区分离线处罚和恶意行为造成的处罚。
以太坊2.0的部分设计理由是,攻击者为任何企图破坏协议的尝试付出巨大代价。也就是说,在其他链中常发生的51%攻击,在以太坊2.0上应该是成本巨大的,甚至结果会适得其反。
也就是说,在具有明确最终性的协议中,“将最终性逆转将”会使攻击者对于诚实的验证者来说显而易见,这就使得社区可协调一致地进行软分叉,以移除恶意行为者并使其攻击无效。
当然,即使攻击成功并且这种社区协调不成功,如果攻击者的唯一目的是破坏系统并造成巨大损失,系统的完整性会减少。
基于PoS机制系统的另一个限制是验证者困境,也就是说,系统中的验证者是懒惰的、并且简单地信任协议中的其他人正在正确地完成其工作,因此不验证他们本该负责验证的消息。
除非面临重大处罚,否则这些验证者可以通过不履行其责任来节省带宽或一般的计算要求。通过为网络中丢失的数据或错误签名的信息添加极其强大的惩罚和质询机制,可以缓解这种问题。
五、以太坊2.0的验证者激励
以太坊 2.0 的验证者激励措施如下:
1、验证者离线:Quadratic Leak
以太坊2.0依赖于拜占庭容错阈值,必须保证网络中三分之二的验证者是诚实参与者。对不参与验证的验证者的处罚被称为“inactivity leaks”。
如果一条链超过4个epoch时期还未能最终确定,那么协议对验证者奖励就会尽可能严格。也就是说,最大期望奖励会变为0,因此验证者需要表现得很完美,否则就会面临更多的惩罚。
惩罚的大小与上一次链实现最终性以来的时间成正比,以阻止验证者离线。
某些验证者离线的时间越长,这种惩罚就会呈现指数增长,这种就被称为“Quadratic Leak”。之所以涉及这种惩罚,是希望不会对短期离线造成不利影响,但考虑到预期的现实世界行为,较长时间离线会有很大的不利。
这种罚款而损失的资金会被销毁,而不会重新分配给诚实的验证者。
2、故意恶意活动:罚没
在针对以太坊PoS的早期提案中,恶意验证者将遭受大规模的惩罚,称为罚没(slashing),通常这些机制只讨论个别恶意验证者的处罚,而不讨论验证者串谋起来的严重性。如果大部分验证者协同恶意攻击网络,网络就会受到影响。
根据拜占庭容错,对恶意行为者的处罚将是在特定时间间隔内恶意行动的验证者数量的3倍。这有助于惩罚大型协同攻击,并且还可以阻止恶意验证者池的产生。
也就是说,在网络上执行聚合攻击,对恶意验证者有利而对普通验证者不利。通过举报机制进行罚没,激励验证者发现其他验证者的可罚没的违法行为。
3、验证者奖励
根据Vitalik的以太坊Serenity 设计原理,他在每个epoch时期中概述了验证者基本奖励的4个特定组成部分:
1.通过证明以确定正确的 epoch 检查点而获得的奖励的 1/4;
2.通过证明以确定正确的 chain head 而获得的奖励的 1/4;
3.通过证明使区块得以快速进入链中而获得的奖励的1/4;
4.通过证明以确定正确的分片区块而获得的奖励的1/4;
根据正确参与的验证者数量,在基本奖励之外还有额外奖励。这个额外奖励是激励每个验证者做正确的事情,为诚实的行为创造集体推动力。奖励的发布时间表应该是一致并直接的。增加更多的复杂性只会使系统更容易出错,并且从宏观经济的角度来看更难理解。
六、把程序复杂性与协议复杂性分开
“以太坊2.0路线图令人生畏”的说法并不确切,因为以太坊2.0可能是最雄心勃勃且历时多年的计划之一,它可以从行业中获得最好的经验教训,并创建一个优雅地解决扩展性三难困境的协议,并且,该协议将能够持久运行下去。
关于“分片如何显著降低开发人员体验”已经进行了大量讨论。其依据是,在以太坊2.0协议内部结中剥离应用程序开发人员的需求是非常困难的,因为高度复杂的分片系统需要彼此交互(跨分片交易)。
乍一看,以太坊2.0从外部看起来令人生畏,并且,在以太坊2.0中智能合约如何执行仍不甚清晰。然而,事实要更加微妙。
应用程序开发人员只需要知道一小部分以太坊2.0协议。普通智能合约开发人员无需了解验证者注册表或信标链终端小工具的内部结构。
因此,阶段0从应用层中完全移除。最近阶段1和阶段2也提出了非常有力的提案,主张对执行环境进行更高程度的抽象化,使以太坊2.0更强大、更简洁。
最坏的情况是,钱包/应用程序开发人员需要了解跨分片交易的某些细节,以通过一些技巧显示即时交易结算。如今的计算机操作系统和内部设备比10年前复杂得多,但是,大多数应用程序开发人员无需了解隐藏的内部结构,即使这些内部结构构成强大的计算机体系。
这种“将关注点区分开”,是良好架构设计的核心,人们可以把它作为在构建以太坊2.0时应该牢记的设计不变量。
七、构建真实的世界计算机
总而言之,以太坊是图灵完备的,这意味着它可以像今天的计算机一样,运行任何类型的可想象的代码,尽管它还是一台缓慢的、单线程的计算机。
今天的以太坊类似于早期的弱处理器。如今在以太坊运行应用程序是昂贵的,因为该协议已建立机制,以防止困扰公共事业的公地悲剧的出现。
以太坊充满活力的开发者社区从未停止对当前网络的改进创新,无论是在核心层还是在layer 2。但是,从治理的角度来看,未来计划的升级可能会出现问题且很痛苦。
如果以太坊2.0上线几年后,我们感到受限,并希望建立一个以太坊3.0,那就表示我们在前者的核心设计上失败了。
可升级性应该以不需要有风险的硬分叉的方式被纳入协议。也就是说,一旦系统长期处于运行中,layer 1 的创新应该是最小的或接近于零。
我们还有很长的路要走,但我们谨慎提醒自己为什么要构建这个软件,以及我们希望在10年内看到它走向何方,以编写出更具鲁棒性的、可以经得起时间的考验的代码。
评论
查看更多