ETH 2.0进展更新:欢迎来到以太坊集市
前言
阶段0的规范已经冻结;各个以太坊2.0客户端正在测试互操作性;阶段2的相关研究已经爆发。所有这些对于以太坊的未来意味着什么呢?
欢迎来到以太坊集市
我最近重读了 Eric Raymond 1997年发表的关于开源开发的经典文章《大教堂和集市》[1]。当你允许广泛的参与者参与某个软件项目的开发时,将会发生什么呢?Eric 称之为开源软件开发的“集市”模式。这个“集市”嘈杂而混乱,但却极具成效,充满活力——最重要的是,它能带来更好的结果。
在其文章中,Eric 将这种集市模式与更传统的“大教堂”模式进行了对比,在“大教堂”模式下,所有的开发都由一小群封闭的人完成。在20多年后的今天,这种“集市”的力量是不可否认的。我们知道,Linux 操作系统现在主导着世界上大部分的计算,而它仅仅是软件开发“集市”模式的其中一个例子 [2]。
我发现这是观察有关以太坊2.0开发工作的一个有趣视角。从以太坊2.0项目在一年前开始,到当前这项巨大工程已经取得的进展,现在正是一个对其“集市”开发模式进行思考的好时机。
以太坊2.0项目在很大程度上采用了开放、集市式的开发模式。但我们正在大力提升 Eric 的愿景:在以太坊2.0中,我们不仅仅是在搭建软件,我们正在以这种完全开放的方式设计整个协议。我不确定以前是否有过类似的尝试。
这不是混乱的状态。与 Eric 的观念一致,以太坊2.0的工作主要由来自以太坊基金会的一个小团队领导,该团队负责设置进度和管理主要的代码库,但一切都是在尽可能广泛的参与下,以透明和公开的方式进行的 [3]:
已经有62人对以太坊2.0规范做出了贡献 [4],更多的人参与了正在进行的9个以太坊2.0客户端实现,其他人在 ethresear.ch 网站上参与了以太坊的研发讨论,还有一些人一直在参与两周一次的以太坊开发者电话会议 (最近一次电话会议超过50人)。
当前以太坊2.0客户端的9个团队,来源:ethhub.io
是的,这个过程有时会显得有些混乱、无组织、效率不够。有很多的重新设计、修改和重写。然而,在这场集市般的喧嚣中,一些奇妙的东西正在出现。这是一些非凡的东西,是一些不太开放的开发者社区将很难与之竞争的东西。
我认为,这种“集市”发展模式是以太坊的超级力量。彻底的开放带来了社区的广泛参与和认同。对于以太坊这种从根本上依赖于由社区驱动的“网络效应”的技术来说,这是至关重要的。这种参与度本身就使以太坊有别于其他平台。
Vitalki 最近在推特上写道:令人惊讶的是,当某种需求出现时,往往会有人站出来解决这种需求 [5]。2017年底,Justin Drake 出现在了以太坊2.0项目研究的舞台上,让一度沉寂的以太坊2.0研究重新焕发了活力;2018年年中,以太坊2.0相关的研究需要更好地进行协调和规划:Danny Ryan 加快了这一步伐;在2019年初,Diederik Loerakker 突然冒出来,担当起搭建以太坊2.0客户端测试套件的关键角色。
我们的下一个挑战是对等网络技术,很多人已经开始参与其中。
我还可以再举几十个相关的例子,但上述这些例子已经说明,人们喜欢以太坊这座集市。
集市会有发展路线图吗?图源:Microsoft
我有时会被问到一个有趣的问题,通常是对以太坊感兴趣的企业问的:以太坊的发展路线图在哪里?
公平地说,尽管在涉及到我们将何去何从以及如何实现这一目标的问题上,各方有很多共同的理解,但不存在一份已发布的、详细的、坚定的、“官方认可的”以太坊发展路线图。
集市的发展并没有真正“合适”的路线图。《Linux每周新闻》(Linux Weekly News)上的一篇老文章也在讨论这个问题 [6]。他们的结论是:“试图在这个过程中强加一个路线图不太可能会改善它 (指Linux)。”
话虽如此,我们需要知道的是,以太坊2.0系统计划通过三个独立的阶段来进行交付,每个阶段都建立在前一个阶段的基础上:
阶段0是信标链阶段,此阶段将实现 PoS (权益证明) 协议,这是用于对保护整个以太坊网络的 PoW 协议的替代方案。
阶段1将以分片链的方式为以太坊网络提供大规模的扩容性,将整个网络的交易处理能力提升1,000多倍。
阶段2将实现提供支持用户账户和智能合约功能的执行层,并支持以太坊去中心化未来所需的一系列分布式应用。
阶段0:信标链
经过整整一年的集中开发,以太坊2.0信标链规范已于6月30日被冻结;相关研究与设计已经完成;我们完全进入了交付阶段。
信标链是以太坊2.0的基础,负责管理 PoS 协议和协调所有独立并行的分片链,是整个系统开发中最复杂的部分。如果你对信标链不太了解,请参阅 Unitimes 近期邀请以太坊2.0开发者 Hsiao-Wei Wang 做的一场有关信标链的 AMA 线上问答整理文章:《对话以太坊核心开发者 Hsiao-Wei:以太坊 2.0 信标链 | Unitimes AMA》
作为以太坊2.0的未来发展方向,信标链是去年七月份在柏林举办的一场 workshop 时构思的 [7]。从最初的一张几乎空白的纸开始,但编织着可以追溯到以太坊早期时候的想法,信标链规范是通过一个对见解、讨论、审核和测试的迭代过程制定出来的。
与此同时,来自不同背景和地域的9个团队已经通过不同的编程语言来实现该规范,并为该规范增添了基础架构来使一切运作起来 (包括网络连接、数据库和相关工具等--规范就像引擎,但我们需要增加很多其他的东西才能得到一辆完全运作的车辆)。
一些团队已经发布了公共信标链测试网,允许人们体验成为以太坊2.0中的验证者,比如 Prysmatic Lab 发布的 Sapphire 测试网,详情请参阅 Unitimes 此前发布的文章《Prysm 以太坊2.0 阶段0测试网发布!》[8]
曾经信标链规范变化地很快,各客户端实现团队也不断紧跟着规范,而最近的信标链规范冻结是一个重要的里程碑,其冻结有着两个很好的影响:
首先,现在可以对信标链规范进行形式化验证。这包括将其转换成一种特殊用途的语言 K,这种语言能够对正确性进行严格的分析和证明 [9]。当前 Runtime Verification 正在进行这项工作。他们已经完成了一项针对验证者抵押合约 (deposit contract) 的分析 [10],验证者抵押合约将被部署到当前的以太坊1.0链上,用于将验证者带到以太坊2.0系统中。
信标链规范冻结的第二个影响是,它允许所有客户端赶上同一个目标并开始下一个关键阶段:互操作性。以太坊2.0信标链客户端就类似于当前的以太坊节点 (比如 Geth、Parity 和 Pantheon 客户端),这些节点运行整个网络,它们相互通信,且至关重要的是,它们必须始终达成共识。任何不一致 (比如由于出现bug等) 都会导致出现网络的分裂 [11]。
在布鲁克林举办的针对以太坊2.0客户端的“通往互操作性”研讨会
实现互操作性是一个过程。
首先,所有客户端都需要通过常见的参考测试 (reference tests)。信标链规范的一个非常有趣的特性是它已经是可执行的——可以通过运行该规范就能直接进行客户端测试。相比于当前使用 Python 编写的规范,有些人可能更喜欢叙述风格,但尽管如此,当前的规范是一个非常有用的工具。
另一种类型的测试就是过去成功地对以太坊1.0客户端的问题进行跟踪的“模糊测试 (fuzz testing)”,就是反复地向客户端输入随机坏数据来寻找导致客户端崩溃的情况。目前正在为信标链开发这方面的模糊测试工具。
一旦每个以太坊2.0客户端团队都确信其客户端实现能够正常运行,接下来就是开始让这些客户端在同一个网络中进行通信了。
我们知道,当分布式体系出现问题时,是很难诊断出来的。因此,作为第一步,各客户端正在实现一个简化的协议 Hobbits [12],从而更容易进行调试和分析,之后再实现完整的网络堆栈。
相关的计划是让所有的客户端团队在今年9月份在加拿大安大略省的某个偏远地区汇聚一堂:在确保所有客户端实现可以正确地进行互操作之前,任何人都不会离开。
互操作性的实现将为今年晚些时候推出的一个共同的长期公共测试网铺平道路。
任何想要加入该测试网中的用户都将能够根据自己的选择来安装某个以太坊2.0客户端,在该公共测试网中质押用于测试的 ETH 代币,并参与到该测试网中的验证中来。或者为该测试网寻找漏洞。任何发现bug和缺陷的人都可能将获得奖金。
最后,如果一切顺利,信标链将于2020年初启动。人们建议启动日期在2020年1月3日,这一天将是比特币创世区块诞生的周年纪念日。但那时信标链要完全投入生产可能还为时过早。最有可能是在2020年第一季度晚些时候。
信标链启动前的最后一步是将验证者抵押合约 (deposit contract) 部署到当前的以太坊1.0链上。在抵押合同中,任何希望成为验证者的用户都可以在其中抵押 32 ETH。计划将于今年10月初在 DevCon V 大会上部署该抵押合约。一旦该抵押合约中质押的 ETH 数量达到了约 200 万枚,也即验证者数量达到了 65,000 名左右,我们就可以满怀信心地启动信标链,相信足够安全能抵御攻击了。
阶段1:分片链
虽然以太坊2.0的交付计划分为几个连续的阶段,但是每个阶段的工作都在并行地进行。
阶段1是分片数据链的设计和交付阶段。在此阶段中,我们将在以太坊2.0系统中新增1024条独立的分片链,每条分片链都与信标链相连接。
阶段1的协议比信标链阶段简单得多,并且该规范包含的总代码行数只大约是信标链规范的一半,且大部分的阶段1规范已经完成。
以太坊2.0将是一个具有空前扩展性的对等网络。图源:Daniel Aleksandersen
阶段1的主要挑战是,以太坊2.0对等网络的设计要求当验证者被分配到这些1024条分片链中之后,能够快速地向/从正确的验证者发送/获取正确的信息。这方面的工作已经在进行中,与客户端的互操作性并行进行 [13]。
阶段2:执行层
最近最让人兴奋的是交付以太坊2.0的最后一个阶段 (执行层阶段) 有了一个明确的前进方向。
当设计空间巨大且不受约束时,往往很难知道如何开始。因此,以太坊2.0的执行层也是如此。直到最近几周前,还没有人能确定从哪里开始:我们将能够在以太坊2.0上运行什么样的程序?用户的账户将是什么样子?各分片将如何进行通信?其中并不缺乏想法,可能性是无限的。但前进的明确道路却难以捉摸。
打破这一僵局的是 Casey Detrio,他在多伦多举行的 “Scale Ethereum (扩展以太坊)” 大会上做了一个非常棒的简短历史总结 [14]。他还发表了一个已被证明非常有效的建议方法 [15]。Casey 的建议被 Vitalik 采纳并进一步得到发展,其他人也热情地参与进来,对其进行原型化并进一步对该建议进行定义。
在当前的以太坊区块链上,只有一个执行环境,即以太坊虚拟机 (EVM)。EVM 被写入以太坊协议中,每个智能合约必须仅由 EVM 执行,执行以特定的方式 (交易 gas) 进行收费,且只允许特定的加密签名和阻止重放攻击 (reply-protection) 的方案。
虽然 EVM 功能非常强大,但所有这些都带来了限制:即使我们只想发送一些 ERC20 代币,也需要使用 ETH 来为账户提供资金;很难实现真正匿名交易;使用一些有趣的新加密技术也需要很大的成本等。
简而言之,以太坊2.0的建议是将所有这些“抽象”掉。以太坊2.0本身将不强制使用这些机制,相反,它将提供许多不同的执行环境 (EE),每个环境都能够根据自己的规则运行,并针对自己的目的进行优化。
比如,除了在 eWASM 中编译的、针对智能合约的通用执行环境之外,可能会存在一些针对匿名代币交易的其他执行环境,或者一些针对全新的智能合约语言 (比如 Haskell 之类的语言) 的执行环境,或者一些针对用于处理高容量的 Plasma 链的优化执行环境,又或者一些特别针对企业级用户的、带有许可型和隐私保护特征的执行环境。甚至还有可能出现一个实现 Facebook 最近宣布的 Libra 项目的 Move 虚拟机的执行环境。
我将把具体细节留给以后的文章——这一领域仍然处于快速开发阶段,而这篇文章已经足够长了。但我还将提到这种阶段2新模式带来的重大影响。
长期以来,我们一直希望将整个以太坊1.0链作为一条分片链在以太坊2.0中实现。这将确保当前基于以太坊的应用程序的未来,并允许我们最终完全摒弃 PoW 机制。
我们现在有了一个切实可行的方法来做到这一点,这种方法正在从纯粹的渴望变成一个计划。“从 Eth1 到 Eth2”并不需要从以太坊2.0的开始初期就实现,可以在之后的时期实现,现在还需要时间来巩固这一点。
结语
热闹忙碌的集市。图源:Diego Delso
以目前的进展速度,我对以太坊2.0的未来比以往任何时候都更加乐观。我不喜欢夸大其词,但我开始好奇,交付的最后阶段,也就是阶段2,是否将在2020年投入使用,这会比最初估计的要早一些。但你们最好不要在这一点上引用我的观点。
在那之前,还有很多事情要做,但是这条路比以往任何时候都要清晰,且人们的参与是强有力的,而且还在不断增长。
以太坊集市的活力是巨大的:这是一个令人兴奋的地方,我相信,通过吸引这么多才华横溢和积极上进的人,最终的结果将是非常杰出的。
以太坊集市对所有人开放:还不赶紧参与进来?[16]
免责声明:本文中的观点进代表作者的观点,并不构成任何投资意见或建议。
文章涉及的链接:
[1]:http://www.catb.org/~esr/writings/cathedral-bazaar/cathedral-bazaar/index.html?source=post_page
[2]:https://en.wikipedia.org/wiki/Usage_share_of_operating_systems?source=post_page
[3]:https://blog.ethereum.org/2019/05/21/ethereum-foundation-spring-2019-update/?source=post_page
[4]:https://github.com/ethereum/eth2.0-specs?source=post_page
[5]:https://twitter.com/VitalikButerin/status/1146629103648305154?source=post_page
[6]:https://lwn.net/Articles/114804/?source=post_page
[7]:https://media.consensys.net/state-of-ethereum-protocol-1-d3211dd0f6?source=post_page
[8]:https://www.unitimes.pro/articles/share/7746cf7673c54c02b20e597279b95353?lang=1
[9]:https://runtimeverification.com/k/?source=post_page
[10]:https://runtimeverification.com/blog/formal-verification-of-ethereum-2-0-deposit-contract-part-1/?source=post_page
[11]:https://www.ccn.com/ethereums-blockchain-accidentally-splits/?source=post_page
[12]:https://github.com/deltap2p/hobbits?source=post_page
[13]:https://github.com/ethereum/eth2.0-specs/pull/1281?source=post_page
[14]:https://www.youtube.com/watch?v=RW7K3JQOZOg&t=6324&source=post_page
[15]:https://ethresear.ch/t/phase-one-and-done-eth2-as-a-data-availability-engine/5269?source=post_page
[16]:https://github.com/PegaSysEng/artemis/issues?q=is:issue is:open label:"help wanted ?"&source=post_page