写在以太坊ICO五周年之际:谈以太坊2.0的进展
阶段0的代码已经冻结、客户端正在进行互操测试、阶段2的相关研究如火如荼……这对以太坊的未来到底意味着什么?
我最近重读了 Eric Raymond 在1997年发表的有关开源开发的经典著作“The Cathedral and the Bazaar”。当有一群数量可观的开发者参与软件开发时,会形成一种非常积极的局面。他将其称之为开源软件开发的“市集”模式。
这种模式看似喧嚷、混乱,但其实激发了开发者的活力,使其更加高产,而且最重要的是,会取得更好的成效。他将“市集”模式与传统的“教堂”模式进行了对比,在传统模式中,开发都是由少数且封闭的个人合作形式进行的。二十年后,“市集”模式将带来的改变是不可置否的。目前应用于世界上绝大多数计算机设备的 Linux 操作系统只是“市集”开发模式的其中一个例子。
我发现这是一个有趣的角度,透过它我们可以窥见以太坊2.0区块链的发展。从以太坊2.0项目开始到目前已经经历了一年多,正是反思的好时机。
以太坊2.0项目可以说完全采用了这种开放式、“市集”式的开发模式。然而,我们大大拓展了 Raymond 的愿景:在以太坊2.0 中,我们所做的不仅仅是构建软件,我们还在以这种完全开放的方式设计整个协议。我不确定之前是否有过这样的先例。
这不是指无序状态。与 Raymond 的概念一致,这个项目主要由以太坊基金会的一个小团队领导,负责设定路线并管理主存储库。但是一切工作都在透明公开的前提下进行,并囊括尽可能多的参与者。举些例子:目前有62人为规范贡献了代码,还有更多的人参与了客户端执行进程及ethresear.ch 上的研发讨论,还有每两周一次的开发者电话会议(最近一次会以中超过50个人参与)。
是的,尽管过程中有时候显得混乱、无组织、效率低下,因而出现了很多新设计、修缮和重写的情况。然而,在这市集般的喧哗中,涌现出了一些奇妙非凡的事物,这也是非开放的开发者社区难以望其项背的地方。
我一直以来主张(也将长期主张)的看法是,这种开发模式是以太坊的杀手锏。“激进”的开放性使社区获得了强有力的参与和支持。对于我们这种依赖社区驱动“网络效应”的技术,做到这一点至关重要。仅仅是社区大规模的参与就使得以太坊与众不同。
以下是我经常思考的关于这种开发模式的一个例子,Vitalik 最近发推说道:社区最好的一点就是当某个问题被提出,就会有人自告奋勇站出来解决。2017年底,Justin Drake 出现了,在以太坊2.0计划休眠了一段时间以后重新激活了相关研究工作。在2018年中,当以太坊需要更好的协调和规划时,Danny Ryan 站了出来。2019年初,从未有所耳闻的 Diederik Loerakker 成为了以太坊2.0客户端测试套件的关键开发者。我们的下一个难关是攻克点对点网络,具有专业知识的成员已经开始逐渐参与其中。例子不胜枚举,但我想说的重点已经清晰明了:大家喜欢“市集”。
“市集”有发展路线图吗?图源 Microsoft
我有时会被问到一个有趣的问题,通常是对以太坊感兴趣的企业问的:路线图在哪里?恰当地说,虽然参与者之间对于以太坊的发展方向以及发展方式有许多共识,但其实并没有公开发布的、详细的、承诺性的、“官方认可”的路线图。
“市集”模式下不存在“确切”的路线图。Linux Weekly News 的一篇经典文章也遭遇了同样的问题,他们的结论是:
“试图在此进程中制定路线图不太可能起到促进作用。”
话说回来,对于以太坊2.0系统计划,我们确实分了三个独立步骤,每一阶段在前一阶段的基础上继续进行。阶段0主要内容是信标链,它将实现了权益证明(PoS)协议,作为工作量证明(PoS)的替代方案来维护区块链网络。阶段1以分片链的形式提供巨大的可扩展性,能够将网络的交易处理能力提高至每秒一千多笔。阶段2是提供用户帐户和智能合约的执行层,并为去中心化未来所需的全部分布式应用程序提供支持。
经过一年的集中开发,以太网2.0信标链规范于6月30日冻结,即研究和设计已经完成,我们完全进入交付阶段。信标链是以太坊2.0系统的基础。它负责管理权益证明协议并协调所有独立并行的分片,这是开发中最为复杂的部分。
去年7月,信标链的想法在柏林诞生,并定为以太坊2.0的未来方向。这个概念虽然是从无到有,但绝不是无中生有。其中的想法可以追溯到以太坊的最早期。该规范通过深入的洞察、讨论、检查和测试过程才得以形成。
同时,目前已经有九个以上来自不同背景和地区的团队在不同的编程语言中实现了该规范,并且添加了使其完全运行的工程基础设施(虽然规范本身就是引擎,但我们要使其具有完备的功能,还有很多其他事情需要做,例如添加网络、数据库、工具等)。一些团队已经发布了概念证明公开测试网,让人们可以尝试成为以太坊2.0中的验证者,例如 Prysmatic Labs。
有时,规范变化得很快,但我们一直在保持跟进。最近的信标链规范冻结是一个重要的里程碑,并且将带来两个良好效应。
首先,信标链规范现在可以进行形式验证。这涉及到将其翻译成一种叫做作“K”的特殊用途语言,才能进行严谨的分析和正确性证明。运行期验证将执行这项工作。目前已经完成了对验证者质押合约的分析,该合约将部署在以太坊1.0上,以便验证者转移到以太坊2.0。
规范冻结的第二个效应是它使得所有客户端都能处于同步状态,并启动下一个关键阶段:互操作性。以太坊2.0信标链客户端类似于当前的以太坊节点,例如 Geth,Parity 和 Pantheon。这些运行以太坊网络的节点彼此沟通,无时无刻达成共识是不可或缺的。可能一个小错误引起的分歧都会导致网络分裂。
布鲁克林 “互操作性”研讨会
要实现互操性本身就是一个过程。首先,所有客户端都需要通过通用参考测试。该规范的一个非常有趣的特性是它已经实现了可执行性,即可以运行规范本身以直接生成客户端测试。相比于当前使用 Python 编写的规范,有些人可能更喜欢叙述风格,但尽管如此,当前的规范确实是一个非常有用的工具。另一种类型的测试是“模糊测试”,过去它成功地针对以太坊1.0客户端的问题进行了追踪,即反复向客户端输入随机无效数据来找出导致客户端非正常运行的个例。目前正在为信标链开发这类模糊测试工具。
一旦每个以太坊2.0客户端团队都能保证客户端可以正常运行,接下来就要使这些客户端能够在网络中实现通信。问题在于,当分布式系统出现问题,是很难排查出来的。因此,第一步就是让各客户端执行一个简化协议(Hobbit),从而使得在执行完整网络堆栈之前更容易进行漏洞排查和分析。为此,计划的内容是今年9月份让所有的客户端团队汇聚在加拿大安大略省的某个地方:在确保所有客户端执行可以正确进行互操作之前,任何人都不能离开。
成功实现互操作性将为今年即将推出的一个共同的、长期的公共测试网铺路搭桥。到那时,任何想要加入该测试网中的用户都能自主选择安装一个以太坊2.0客户端,质押测试 ETH 代币,并参与测试网中的验证活动,或者寻找测试网漏洞。发现bug和缺陷的人都有机会获得奖励。
最后,如果进展顺利,信标链将于2020年初启动。有人建议启动日期定于2020年1月3日,因为这天是比特币创世区块诞生的周年纪念日。但对于信标链来说要完全产品化还为时尚早,我认为最有可能在2020年第一季度末发布。
信标链启动前所需的最后一步是将验证者质押合约部署到当前的以太坊1.0区块链上。质押合约规定,任何想要成为验证者的用户都需要抵押 32 ETH。计划将在今年10月初的第五次开发者会议(DevCon V)期间进行部署。一旦该质押合约中的 ETH 质押数量达到了约 200 万枚,即代表验证者数量足够多时(65,000 名左右),我们就可以有把握地正式启动信标链,使其安全性达到能够抵御攻击的程度。
虽然以太坊2.0的交付计划是分阶段进行的,但每个阶段其实是并列进行的。
阶段1主要囊括了分片数据链的设计和交付。在此阶段,我们将在系统中增加1024条独立的区块链(分片链),每条链都与信标链相连。阶段1的协议比信标链阶段要简单得多,几近完成的该协议总代码行数大约只有信标链的一半。
以太坊2.0将是一个具有空前扩展性的点对点网络 图源 Daniel Aleksandersen
阶段1的主要挑战是:点对点网络的设计要求当验证者被分布到1024条分片链上之后,能够快速地和正确的验证者互相进行准确的信息传递。相关工作正在与客户端互操作性同时进行。
最近最令人兴奋的进展是以太坊2.0的最后一个交付阶段,即执行层阶段,有了明确的前进方向。作为具有写作经验的人,我清楚地知道当面对一张白纸时,其中的挑战多么巨大。同理,当设计空间巨大且不受约束时,“开头难”这个问题十分棘手。因此,以太坊2.0的执行层设计就经历了这样一段困难时期。
直至几周前,还没有人十分有把握从何处下手:我们将能够在以太坊2.0上运行什么样的程序?用户账户将会是什么样?各分片将如何相互通信?想法天花乱坠,可能性也无穷无尽,但如何一步一步实现却令人费解。
打破这一僵局的是 Casey Detrio,他在多伦多举行的扩展以太坊大会(Scaling Ethereum conference)上做了一次精短的历史总结,除此之外他还公布了一个提议方案,随后该提案的有效性被证明。Casey 的建议被 Vitalik 采纳并得到进一步拓展,其他开发者也热情地参与进来对其进行试验以及定义。
当前的以太坊区块链上只有一个执行环境,即以太坊虚拟机 (EVM)。EVM 之前被写入了以太坊协议中,因此每个智能合约只能经由 EVM 执行,合约的执行以某种方式收取一定费用(即gas),并且只有特定的加密签名和重放攻击保护方案(replay-protection)得到许可。EVM 的功能非常强大,但也因此受到了一些限制:即使用户只想发送少量 ERC20 代币,也需要在账户中充值 ETH;完全匿名交易难以实现;使用一些创新的加密技术也需要付出成本。
简言之,以太坊2.0的提案就是要将这些问题剥离出来。以太坊2.0区块链不再强制使用这些机制,相反,它将为用户提供许多不同的执行环境,每个环境都将根据其使用目的以制定适宜的规则,并在此基础上运行。
例如,除了针对智能合约的、在eWASM中编译的通用执行环境之外,可能还会运行一些其他的执行环境:以期优化匿名代币交易、支持新智能合约语言 (Haskell 之类的语言) 、处理高容量的 Plasma 链、加入受许可和隐私性功能以服务企业级用户。甚至还有可能出现一个能够运行 Libra 项目中 Move 虚拟机的执行环境。
以太坊2.0仍然处于快速开发阶段,更多的细枝末节我将在后续的文章中讨论到。在此我还将提到“市集”开发模式对阶段2产生的一个重要影响。一直以来,我们希望将整条现行的以太坊1.0链作为一条分片链安置在以太坊2.0中。这不仅能保障目前已存在的以太坊应用程序的未来,并且并不妨碍我们最终移除工作量证明(PoW)机制。对此我们已经有了一个切实可行的方案,并且我们正在针对此方案进行详细设计。“Eth1 Eth2”没有必要在以太坊2.0初期就急于实现,在后期仍然可以进行部署,所以目前我们还有时间强化这个方案。
忙碌的市集 (图源 Diego Delso)
就目前的发展速度而言,我对以太坊2.0的未来比以往任何时候都更加看好。我不喜欢夸夸其谈,但我不禁产生疑问:按照目前的发展,作为以太坊2.0最后交付阶段的阶段2似乎将在2020年就投入使用,这比原先设想中的时间要早(仅作为个人假设)。
从现实到实现,我们还有很多工作要做,但绝不会像无头苍蝇一样乱撞,因为我们的前路无比清晰,开发者和社区成员提供了强有力的支持,并且还有源源不断的新生力量汇入我们。以太坊“市集”的能量惊人,这是一个令人振奋的舞台,我相信,有这么多出类拔萃、斗志昂扬的参与者,最终的成果一定非同凡响!