非常感谢 Sacha Saint-Leger、Joseph Schweitzer、Josh Stark 和 protolambda 提供的宝贵意见和反馈。
我花了很多时间来回答和解释 eth2 的相关问题,真的花了很多时间。我在向技术贡献者们介绍研究、规范时,收到的问题难度比较大,技术性比较强;但最近我越来越多地在回答来自社区的问题,包括关于 eth2 的进展、方向、动机、设计决策、推迟的问题。我真的非常喜欢这种与社区成员的交流。当我在解释 eth2 时,有时恍然大悟,灵光一闪,突然想到全新的方式来描述 eth2 的组成部分,或者找到适合不同受众的类比,就会兴奋不已。
这种动态的、互动的方式虽然很有意义,但许多社区成员还是处于一无所知的状态。我一次又一次地被问及同样的问题,更糟糕的是,六个月之后又会有人提出同一个问题!显然其中存在信息传递的问题。这些信息都在网上,但是分散在各处——包括研究类的帖子、规范、规范的解释性文章、公开的电话会议、公共聊天室、reddit 帖子、博文等等。在 devcon5 会议之后,我第一次尝试在深入了解 eth2 的人和其他社区成员之间建立起一座信息的桥梁,以系列博客文章“eth2 quick update” (eth2 更新速览) 的形式呈现。这些都是可以帮助各位理解 eth2 的小片段,但我意识到,这些系列文章并不能真正传递更宏观的信息。虽然通过播客、AMA (在线问答) 和会议,我们的确能够和社区沟通和讨论更宏观的信息,但即便如此,书面文章依然会所有帮助。
因此我写下了这篇文章。本文面向社区,旨在向大家全面介绍如今的 eth2 是什么:它未来的发展方向和形态,以及它对以太坊社区意味着什么的意义。我将通过 适当的技术内容来 说明 eth2 的动机、愿景、项目进展状态以及将要进行的工作,但不会涉及太多数学内容或专业术语。
如果您是以太坊技术专家,但至今对 eth2 还不太了解,本文可能对您也有所裨益。没关系,毕竟这个项目非常庞大、复杂,而且似乎遥不可及,好像在很长一段时间内并不需要您的特别关注,还有其他更重要的事项等待您解决。希望这篇文章能帮助您更好地理解它的未来发展。
至于熟悉 eth2 的人,你们可能也可以通过本文有所收获:从更广阔的视角看待现状,以及我个人对未来的看法。
免责声明:本文是我 (Danny Ryan) 个人对现状的看法。还有其他很多观点推动着 eth2 不断发展、不断演化。本文仅为我个人理解的一部分内容。
什么是 eth2
“eth2 是一个可扩展的 PoS 基础架构。”
如果你在过去 6 个月里听过我的演讲,那你一定记得我反复地说过这句话。eth2 为以太坊而搭建,最终它将取而代之,成为以太坊。eth2 旨在为当前以太坊主网提供一个安全性和可扩展性更高的环境,同时尽量减少对当前以太坊运作的干扰。同时,它为我们的发展提供了一个升级的环境。
早在以太坊区块链推出之前,人们就知道单一的区块链模式无法提供足够的带宽来作为一个全新的去中心化互联网的支柱。与以太坊相关的权益证明(PoS)和分片(sharding) 研究可以追溯到 2014 年。研究 PoS 和分片的目的都是为了回答一个问题:假设一个加密经济系统由一定数量的资金支撑,我们能否在提升安全性和吞吐量的同时,依旧允许消费级硬件设施参与到共识中并紧跟区块链?虽然我在这里不会详细地介绍相关研究历史,但这一探索花了数年时间,而且一开始就多次出师不利。最终,这个问题的答案是肯定的,并以 eth2 的形式呈现。
eth2 是一个雄心勃勃的项目,将持续多年,分多个阶段开展。已经有很多关于 eth2 各个阶段的文章和讨论,但在本文中,我将用通俗易懂的方法快速地对这些阶段进行介绍。
阶段 0
阶段 0,也称信标链阶段,是 eth2 全新的共识机制的核心。所有的系统级活动和统筹在此发生。在阶段 0,成千上万的共识实体 (即验证者) 达成共识,这些实体分布在世界各地节点上。
由于在阶段 1 及以后,验证者子集将被分配到各个分片中,我们需要能够处理大量验证者的技术能力。阶段 0(信标链)设计的复杂性在很大程度上都是源于这一项技术需求。其他不实现分片的 PoS 机制往往只有数百或者数千的验证者,但 eth2 的设计目标是至少承载大约 1.6 万验证者,且这个数字在未来几年内将达到数十万。
阶段 1
阶段 0 着重达成共识,而阶段 1 则是要在众多事项上达成共识。这些“事项”以分片链的形式呈现。我们可以将每个分片链理解为一条与当前的以太坊链有着相同复杂性的区块链,但分片链存在于 eth2 共识之下(也就是说,分片链存在于信标链之下,并由信标链构建/控制)。信标链的验证者被随机分配短期任务来构建和验证分片链,同时向核心系统(信标链)做出加密经济承诺,从而保证每条分片链的状态、可用性和有效性。
目前,我们预计初期将形成 64 条分片链,系统可用的总数据为每秒 1~4 MB(这的确是庞大的数据量)。
阶段 1.5
阶段 1.5 的工作重点是将当前的以太坊主网作为一个分片并入到全新的 eth2 共识机制中(当前的以太坊主网将作为在阶段 1 创建的多个分片中的一个)。众所周知,目前我们所熟知和热爱的以太坊链是通过 PoW(工作量证明)挖矿算法的方式来搭建的,但并入到 eth2 之后,它将由 eth2 验证者来搭建。这种共识机制的转变在很大程度上将是潜移默化的,不会对当前以太坊上的应用程序和用户造成影响。这些应用程序将继续运行,但届时开发者们将拥有一个更加强大的系统(更强的安全性、更高的经济确定性、更多用于 rollups 的 Layer 1 数据、更多有趣的应用程序)。
阶段 2
在阶段 2,除了初始的以太坊分片链,更多的分片链(在阶段 1.5 期间并入其中的分片链)将增加状态和执行功能。这一目标可通过多种形式实现。具体通过哪种形式以及之后的细节是当前的研究和原型设计的一个热点,我将在下面的章节进一步讨论。
未来 eth2 给社区带来的益处
以上就是 eth2 所有阶段的介绍,其中阶段 0 即将来临。但这个发展路线图听起来还是有点长。那么随着这些阶段的开展,eth2 能为我们带来哪些实际的益处的呢?
这是个好问题!总的来说,每个阶段都将有一波升级,对以太坊和社区的覆盖面将越来越大。作为用户,您可以尽早地参与到阶段 0 的质押中来,或者等到阶段 1.5 以太坊链完全迁移至 eth2(对 dapp 开发者还是用户来说,这一迁移都是无缝进行的)之后再参与进来。无论您的参与程度如何,在哪个阶段参与进来,随着每个阶段的逐步开展,您都应该关注以下重要的里程碑和益处。
首先,我知道很多人都是坚定的以太币持有者,渴望参与到质押中来。阶段 0 正是为所有潜在的验证者,特别是爱好者,量身定做的。阶段 0 存在风险和投资回报期,因此一些参与者不想在这个阶段参加,而我个人希望这个阶段能为爱好者和长期的以太坊支持者带来利好。阶段 0 是一个进入 eth2 的独特时机,对 eth2 的愿景贡献力量,且早期参与者将获得更高的 ETH 奖励。
那阶段 1 呢?在以太坊链迁移至 eth2 之前,我们能对这些数据做些什么有用的事情吗?答案是肯定的!
即使没有本地计算,Layer 1 的数据也非常有用。事实上,在过去 12 个月中,最具前景的 Layer 2 扩展性解决方案是“rollup” 链(包括 optimistic rollup 和 ZK rollup),这些方案会随着 Layer 1 数据可用性的增加而扩容。eth2 数据层预计将为以太坊提供大约每秒 1~4MB 的数据可用性,如果与 rollup 技术相结合,这些数据可用性将大幅提升可扩展性。但由于一开始以太坊旧链与全新的 eth2 分片系统是脱节的,因此获取 eth2 分片数据非常困难。这就是EIP2537提案对以太坊主网来说如此重要的原因之一。通过本地的 BLS (即全新的 eth2 签名算法)预编译,我们可以编写一个高效的 eth2 轻客户端作为 solidity 合约,从而使当前以太坊上的应用程序能够在阶段 1.5 的迁移之前获取 eth2 中的数据。
如上文所述,阶段 1.5 是一项浩大的工程。eth2 为以太坊设计搭建,而在这个阶段,eth2 将取而代之,成为以太坊。所有我们熟悉和喜爱的应用程序都将整合进升级后的 eth2 共识机制中,在保留我们所习惯的特性的同时,由安全的 PoS 共识开启广阔新前景,并在本地获取高度可扩展的数据层。在我看来,这是整个过程的关键,是成功的伟大时刻,因为我们将以太坊旧链完全锚定在全新的系统中。
除此之外,随着时间的推移,在之后的阶段,通过 在其他分片链上实现状态/执 行,还可以获得更多的可扩展性提升。这可以通过 以太坊虚拟机(EVM) 或称为 eWASM 的全新虚拟机来呈现。不管选择哪一种虚拟机,现有的 EVM 分片 (即在阶段 1.5 期间迁移进来的以太坊旧链) 和其他全新的分片链将可以通过信标链进行交互和通讯,从而实现 eth2 多执行、分片化的愿景。
现在明白了吗?这将是一个过程,但也会是一次收获满满的旅程。
升级的难点,以及为何值得采用这种方式
大量验证者
分片技术的关键之一就是将共识参与者(即验证者)随机分配到委员会中,使其对 eth2 协议的一部分(比如一条分片链) 进行验证。假设协议中存在足够多的验证者,某个攻击者控制了最大数量的验证者节点(比如控制了1/3的验证者节点),那么从数学的角度来说,该攻击者无法控制任何一个委员会,也无法击垮整个系统(概率为 1/2^40,趋于零)。因此系统设计可允许任何人仅凭消费级设备(比如笔记本电脑,甚至一部旧手机)就成为一名验证者(因为验证者会被分配到系统中的某个分部,而任何分部的验证使用单台机器的计算资源即可完成)。
这就是分片技术的不可思议之处,同时也带来了一定挑战。首先,系统必须要有足够多的验证者,以保证随机分配的安全性:这意味着,eth2 的验证者数量多于其他多数 PoS 协议所要求的数量。而这给整个过程的各个层面——从技术研究到共识机制的规范,再到网络、客户端的资源消耗和优化等——都带来了挑战。每个阶段都必须考虑到,每个新增的验证者都将增加系统负载。各个 eth2 客户端团队已经完成了艰巨的任务,使成千上万个验证者达成共识,这样我们就可以安全、有效地在阶段 1 对众多分片链进行集成。
大量分片链
eth2 的建设工作如此困难,另一个基本设计决策方面的原因在于,在以太坊中,我们选择在不牺牲去中心化的情况下提升可扩展性。
如果我们不关心用户是否能够自己验证区块链,不关心如何确保数据在网络中可用,那么将区块链扩展到每秒数万笔交易并不困难。分片共识机制必须拥有复杂性,从而将系统分成可验证的小块。为这样的共识机制制定规范并加以实施是一项非常艰巨的任务。
大量客户端
以太坊的核心原则之一是,协议第一。以太坊是协议所含规则的抽象集合,而非这些规则的任何具体实现。为此,以太坊社区从一开始就鼓励采用多种客户端。当前的以太坊主网上有 besu、ethereumJS、geth、nethermind、nimbus、open-ethereum、trinity 和 turbo-geth 等客户端。而在 eth2 系统中,将有 cortex、lighthouse、lodestar、nimbus、prysm、teku 和 trinity 等客户端。
多客户端的模式有许多显著优势:
- 多客户端使社区得以对创意、算法和架构进行更广泛的探索(每个客户端都有自己的方法和理念)。随着系统愈发强大,这个过程将创造良好的氛围,各个客户端相互沟通,相得益彰
- 各客户端通常有着不同的设计目标。随着时间的推移,这将带来用户和应用程序的多样化。客户端可能或多或少地侧重于以下方面中的一项:性能、安全性、水平扩展、UI/UX、轻客户端、浏览器、资源受限的设备等等。
- 由于存在许多生产级客户端,当某个重大攻击(比如 DOS 攻击)击垮一个客户端时,其他客户端能够免受影响,保证系统复原力。以太坊早期的“上海 DoS 攻击”就凸显了多客户端的这一优势,当时的一系列 DOS 攻击导致许多 geth 和 parity 客户端瘫痪,但它们并不是同时被击垮的。
- 每个客户端用不同语言编写,作为通向某个编程语言社区的门户,打开基于各种语言试验和创新的大门。一个客户端的基本工具通常会如滚雪球般形成一个强大生态系统,聚集众多该语言的工具和贡献者。因此多客户端的模式增强了以太坊的吸引力。
为了实现上述优势,需要攻克一些难点:
- eth2 的规范和测试必须无懈可击,从而避免主网发生任何意外的分叉。如果协议只有一个客户端实现,那么这个实现就成了协议本身。在只存在单个客户端的情况下,如果客户端的任何一个共识方面的“漏洞”影响到了主网,那么这个漏洞将成为协议常态的一部分。从单一程度来看,这不是件好事,但是这又完全消除了任何分叉风险发生的可能性。要解决这一难题,如果主网状况良好,分布着许多不同的客户端(比如,没有哪种客户端拥有超过 1/3 的节点/验证者),那么区块链网络即便存在单个客户端的共识问题,仍然可以继续保持运行。
- 与只有单个客户端的情况相比,N个客户端在最佳情况下的协作能够带来线性开销 (linear overhead),但在某些情况下可能会导致二次方开销(N^2)。我们会使用一些技术来减少这种开销,比如共识测试(以及即将开展的网络测试),但这种开销在某种程度上总是存在。
eth2 客户端和测试网的进展
在过去两年中,eth2 阶段的客户端已经发展为相当复杂的软件,能够处理数千个节点中成千上万的验证者的分布式共识。当前我们正处于测试网阶段,每天都离信标链的发布更近了一步。我原本预计整个过程的最后一步会很长,事实证明的确如此。
在信标链发布之前的这段时间,我希望大家可以走出舒适圈去 尝试不同的客户端。这些客户端有各自的权衡取舍,亲自体验才能找到最适合你的那一个。如上所述,以太坊以多客户端的模式运行,为了发挥这种方式的优势,我们需要用户运行各种不同的客户端,从而使各种不同类型的客户端分布在网络中,保证网络状况良好。
除此之外,eth2 协议中还内置了 反相关性激励机制。在一些极端的情况下,比如某个主要客户端出现意外,导致大量验证者离线,或导致大量验证者执行了可被罚没的行为,此时如果验证者节点的行为与该客户端存在关联,那么你受到的惩罚将比当你本身有错但与他人无关时受到的惩罚严重得多。换句话说,在这些情况下,使用小众的客户端比使用占据网络大部分的主流客户端要好得多。
需要明确的是,如果存在不止一个可行且安全的客户端,那么你应该选择用户较少选择的客户端软件,从而促进各客户端软件在网络上均匀分布,这是你的职责所在。
还有,千万不要拘谨。如果文档存在问题,请让他人知悉。如果发现了拼写错误,请提交 PR。如果出现崩溃、漏洞等情况,请务必在 github 或客户端的 discord 聊天室中上报。各位作为测试阶段的用户,可以帮助我们不断改善。
测试网
我们目前正在运行小型公共开发网络(devnets),大约每一到两周重启一次。我之所以将这些测试网称为“开发网络”,是因为这些测试网络首先是各客户端团队开发人员解决漏洞、优化等问题的工具。这些测试网络是公开的,欢迎各位加入,但需要注意的是,这些测试网络还会不像 Goerli 或 Rinkeby 那样长期存在。最新发布的测试网是Witti 测试网,由 Afri Schoedon 领导,基于 v0.11 版本规范运行(如果你想运行一些节点,请点此查看教程)。
各客户端团队都正在积极地升级到最新的v0.12 版本规范,此规范集成了最新版本的 IETF BLS 签名标准。在此基础上,我们将把这些测试网络过渡到 v0.12 规范,继续扩大测试网的规模,增加客户端的负载。当我们通过 2-3 个客户端成功启动 v0.12 测试网并高负载运行之后,我们将推出一个更公共的测试网,用于运行大多数节点和验证者。其目标是创建一个长期存在且尽可能模拟主网的多客户端测试网(用户将可以在该测试网中可靠地运行节点和进行任何测试)。理想情况是该测试网仅需搭建一次,在维护的同时解决所有故障。但是,根据故障的存在情况和严重程度,我们可能需要运行多次才能达到这一目的。
除了正常的测试网之外,我们还将提供一个具有激励作用的 “攻击网络”(attack net),客户端团队可以在其中运行一个稳定的测试网,我们将邀请你尝试使用不同的方法来攻击这个网络。如果攻击成功,以太坊基金会将提供 ETH 奖励。更多详情,敬请期待!
eth2 工具的进展
虽然 eth2 的工具还处于起步阶段,但这是一项令人兴奋且不断发展的工作。如上所述,工具通常源自客户端代码库以及客户端团队的努力,但每天都有越来越多的人参与进来。为了更好地理解、保护和增强 eth2 并与之进行交互,作为社区,我们需要构建基本的 eth2 工具。
已经有许多团队和个人通过自身的 eth2 工具提供了巨大的价值,我在此为你们欢呼喝彩,也希望有更多的人搭建新的工具,或对已有工具进行扩展和增强。
eth2 工具是一个充满机遇的新领域。这是一个深入研究、创造价值和获得认可的大好机会。
以下是一些正在研发中的工具,但还有很多发挥的空间!
- 浏览器: Beaconcha.in、Etherscan、Eth2stats
- 网络工具: Prrkl、Rumor、Pyrum、Stethoscope
- 密钥库和钱包: ethdo、deposit cli、EIP 2335, 以及其他新的标准 API 设计和原型绑定
- 罚没监测: Prysm “hash slinging slasher”
以下是一些公开的工具创意:
- eth2 验证者警告:当验证者没有以最优的方式执行任务时,提供一种向节点运营者发出警告的服务;
- 验证者保证金追踪:通过追踪验证者的质押过程,在当前的以太坊和 eth2 浏览器之间架起桥梁;
- 通过代理服务保护验证者:使用代理服务来追踪验证者的消息,从而确保你的客户端不会发送不安全的消息。
还有更多——这种类型的贡献并不局限于某个规范。创意非常重要。如果你希望有所贡献,请与 eth2 客户端团队讨论。
eth1+eth2 合并的进展
在当前的以太坊客户端 (比如 geth 客户端) 中,几乎所有的复杂性都在于处理用户层面的活动:交易池、区块创建、虚拟机计算以及状态存储/检索。就协议而言,以太坊实际的核心共识——工作量证明(PoW)非常简单。大部分复杂性由协议之外的复杂硬件来处理。
而另一方面,eth2 客户端就是共识。在 PoS 和分片中,协议引入了许多复杂性,以实现可扩展性共识的目标。
关注点的区别使得 eth1 和 eth2 相得益彰。
eth1 和 eth2 合并的初期工作正在由 Geth(以太坊基金会)和 TXRX(ConsenSys) 团队进行。这项工作涉及到:(1)在 eth1 和 eth2 之间定义一个通信协议;(2)向 eth1 客户端增加一个共识引擎,该引擎可以通过该通信协议进行控制;(3)原型化和模拟 eth2 阶段 1 的行为来测试耦合。我们预计将在今年夏天看到具体的成果。
点此阅读更多关于 eth1+eth2 客户端关系的概述,以及关于合并的技术范围的介绍。
执行和跨分片通信的进展
如上所述,关于采取哪条确切路径实现跨多个分片链的执行,研究和探讨已经进入白热化阶段。这方面还有很多问题需要回答,比如:
- 多少条分片应该实现执行功能?
- 对于新增的分片,虚拟机应该使用 EVM 还是 eWASM?
- 如何有效地组织和处理跨分片交易?
- 为了支持跨分片交易,当前的 EVM 需要进行哪些调整?
- 通常状态下,执行和账户结构是否可以/应该扩展? 在过去的 12 个月里,eWASM(以太坊基金会)和 Quilt(ConsenSys)团队都在这些领域进行了大量的研究。事实证明,解决方案存在诸多可能性,尽管我们现在已经很好地掌握了该领域的广度,但最近的重点一直是深入研究简单、切实的解决方案,以便能够测试、创建原型并真正为通信打下基础。eWASM 的Eth1x64 计划也由此诞生(点此了解该项目的总体介绍,并查看近期正在讨论的规范)。
在将抽象的跨分片通信引入具体的规范中、组织讨论并最终形成原型方面,我们已经取得了快速的进展。请密切关注这方面的进展,如果你是 dapp 开发人员,这一点尤其重要。我们打算在接下来的几个月里提供一些通俗易懂、可供试用和反馈的成果。
无状态以太坊与 eth2 的关系
与 eth2 并行进行的另一项主要研发工作是“无状态以太坊”(Stateless Ethereum)。无状态以太坊旨在解决状态大小增长问题。这将允许参与者无需在本地存储整个状态的情况下验证区块。当前的以太坊状态转换函数中存在一个隐式输入:整个状态。通过无状态以太坊,将在区块内提供所需状态的证明(即见证数据 witnesses)。区块将可作为纯函数进行转换/验证。
对于用户来说,这种转变意味着用户可以在无需存储所有状态的情况下跟随这条链,甚至可以关注自己关心的那部分状态。一些网络参与者(比如区块生产者、区块浏览器、收费的状态提供者等)可能会存储所有状态,但绝大多数参与者将只存储一小部分状态。
对于 eth2 而言,这是一种重要的技术机制,可以确保节点和验证者能够在无需存储每个分片的完整用户状态的情况下验证和保护协议。验证者可能会选择成为某些分片的区块生产者,而基线验证者(baseline validator)可能只验证无状态区块。无状态以太坊对 eth2 愿景来说是一个非常有价值的补充,它使分片协议的基础非常精简。虽然我们计划以无状态的方式运行 eth2,但我们仍保留有几个选择,以防无状态的方式最终不可行(但我本人对无状态非常有信心)。
在这篇文章中,我不会深入探讨无状态以太坊。只需知道这是一个令人兴奋的并行研发路径,旨在确保以太坊的长期可持续性。想了解更多信息,可以查看 Griffin 发表的eth1.x系列博文。
总结
eth2 是一项宏伟的工程,它将为以太坊提供新一代的共识,同时保证高度的可扩展性、安全性和去中心化水平。每天都有数十个团队和数百个人在为这一目标努力。我们任重而道远,但已经并将继续取得巨大进展。
这一全新机制的核心部分即将问世。
如果你是一名有抱负的验证者,现在就可以加入进来了。通过尝试多个不同的客户端来支持 eth2 的多客户端模式,增加客户端多样性,为 eth2 的创世奠定坚实的基础。
如果你是一名用户或者 dapp 开发者,请继续助力当前以太坊的发展。同时我们将继续为你准备一个更加安全和可扩展的环境。当时机成熟时,eth1 将尽可能无缝过渡为 eth2。
感谢每一个出色的团队和个人,感谢所有为 eth2 的未来添砖加瓦的人,是你们赋予了以太坊源源不断的活力;也感谢所有的用户和开发者,是你们让以太坊拥有无穷无尽的魅力。