众所周知,以太坊 2.0交付计划分为三个不同的阶段。最近最令人兴奋的阶段是0 (接近信标链客户端的互操作性) 和2 (以太坊 2.0 计算模型的开始。
阶段0:实现信标链
信标链 (beacon chain) 是整个以太坊 2.0系统的协调层也可能是最难交付的部分。请参考我之前发表的信标链的背景知识State of Ethereum Protocol #2: The Beacon Chain 本文[1]。
去年6月,信标链被设想为以太坊2.0未来。仅仅一年后,该阶段0的规范将于今年6月30日冻结。这是一个新的区块链设计,其雄心勃勃,包含了几十项重大创新和见解,8个客户端已经准备好了:这是以太坊社区一年来的惊人成就。坦白地说,这将使 Libra 相形见绌。任何不同意的人都生活在与我不同的宇宙中。
既然有以太坊2.0规范的更新进展已经在 Github 被很好跟踪和记录了[2],我不像以前那么详细了。今天,我们将从更广泛的角度介绍相关的进展。
01. 互操作性
随着阶段0的标准化趋于持续,目前的重点已转移到以太坊 2.0客户端实现之间的互操作性 (interoperability)。目前,8个活跃团队正在跟上最新的以太坊2.0规范。
一旦信标链网络启用,每个客户端都需要相互沟通,以达成信标链状态的协议。每个客户端都需要遵循相同的规则:即使是一个位置(bit) 不正确也会导致无法达成共识。
考虑到这一点,我们在布鲁克林 Bushwick Generator 举办研讨会,名为“通往互操作之路”(The Road to Interop)。我拍了一些照片[3],感兴趣的人也可以观看现场录制的4小时视频[4]和研讨会议程[5]。这是一个让几个客户实施团队聚在一起,计划如何让我们的客户连贯地沟通的场合。Vitalik 当天下午就阶段2的想法发表演讲 (见下文)。Terence Tsao 还发布了 Prysm 客户结构和设计的演讲幻灯片[6]。
计划中的下一个重大事件是9月初左右举行的主题“Interop Lock-in”研讨会。当时,客户实现团队将聚集在安大略省的一个偏远小屋,但只有在我们确认所有客户都能相处得很好之后。
Jonny Rhea 在 Github 整理发布了通往互操作性道路的各个阶段[7],大家可以参考。
02. 网络 (Networking)
最终目标是使 Libp2p 成为以太坊2.0 基于网络P2P 通信协议 (注:Libp2p 是一个网络框架,化点对点应用程序的网络框架)。
然而,作为实现这一目标的简化步骤,每个客户端都在实现更简单的 Hobbits 协议,Trenton van Epps 发表的文章[8]对 Hobbits 协议介绍得很好。Jonny 也以推文风暴[9]的形式阐述了 Hobbits 协议的基本原理, ConsenSys 还提供了一些奖励[10]鼓励团队在客户端整合协议。
与此同时,Whiteblock 在 Libp2p 做了一些性能测试,Daniel Choi 在 Scaling Ethereum 在研讨会上介绍了[11]。他们的发现是 Libp2p 在某些情况下,性能提出了一些问题[12]。然而,通过 Prtcocol Labs 我们还将合作 Libp2p 与以太坊 进行进一步的探索测试2.0更真实的相关参数范围。
另一个有趣的进展是,PegaSys 研发团队发表的拜占庭容错聚合协议 Handel:Practical Multi-signature Aggregation for Large Byzantine Committees (《Handel:实现更大规模的拜占庭委员会实用多重签名聚合)[13]。
该协议可以显著加速以太坊2.0中验证者收集区块证 (attestations) 的速度,允许更大规模的委员会 (committee sizes),因此,可以更快地实现交易的最终性 (finality)。
03. Testing 测试 (Testing)
在当前阶段0开发期间,正在进行大量的测试工作。值得注意的是 Antoine Toulme 关于测试操作器 (runner) 的工作,这个测试工作是 Moloch DAO 资助,可以通过这个视频了解最近的进展更新[14],非常值得客户端开发人员查看。
该规范是可执行的,并且所有跨客户端测试向量都可以直接从编写好的规范生成[15],这一点是非常棒的。
还需要大量的工作来模糊测试这个规范 (fuzz-test),提供一个模糊测试客户端的框架,就像最新版本的以太坊一样2.0[16]反映在规范中。
04. 形式化验证(Formal Verification)
Runtime Verification 以太坊已经写好了。2.0存款合同增量 Merkle 树实现审计报告,使用 Vyper 语言 (而不是 Solidity) 写作。
这是将存款合同部署到当前以太坊 的重要里程碑1.0我们的团队 (备注: PegaSys 团队) Joe Delong 写了一篇关于以太坊 的解释性文章2.0 存款 Merkle 实现树木的文章[17]。稀疏的 Merkle 数很棒!
Runtime Verification 还将在 K 在语言中生成信标链的正式可执行规范[18]。
05. 在线信标链
上周以太坊2.0在实施者的电话会议上,Justin Drake 在信标链部署阶段提出了两个目标日期:
1、在 DevCon 5 会议期间:将存款合同部署到当前以太坊1.0链条。这个公开仪式将有助于避免骗子发布虚假地址来窃取人们的存款。
2、20201月3日:信标链创世区块可能诞生。信标链将正式启用。
信标链创世区块的诞生将取决于两个先决条件。存款合同必须质押足够的 ETH。之前的硬目标是质押金额超过200万 ETH,但这一要求已被移除[19]。但质押数量的目标将是确保信标链安全启动的指令。
第二个先决条件是3个 (或至少两个) “生产就绪”信标链客户端和网络验证人。在此之前,所有客户都必须完成大量的兼容性、优化、测试、审计、改进、工具化、文档和包装,所以我认为1月3日的目标有些雄心勃。
阶段1:分片数据
最近阶段1的标准[20]变成了 Serenity 绿洲。
阶段2:状态执行
公平地说,就在几个月前,以太坊 2.0阶段2仍然是雾。阶段2就是所谓的“执行层”,这使得以太坊2.0区块链实际上是可用的。这一阶段将提供资金转移、智能合同和所有让 dapp 可以构建等功能。就在最近的4月初,我们不知道这个阶段会是什么样子。Casey Detrio 在 Scaling Ethereum 在会议期间,我就阶段2的历史和现状发表了精彩的演讲[21],值得你花五分钟观看……当时,现阶段的所有问题都是开放的,设计空间仍然巨大,可能性无限。当时,我们不知道从哪里开始。
为了打破僵局,Casey 在 Ethresear.ch 发布了一个令人兴奋的提议:Phase One and Done: eth2 as a data availability engine[22]。在不深入所有细节的情况下,这引发了一股创新浪潮,阶段2迅速而令人兴奋地开始成为关注的焦点。
之后 Vitalik 相关阶段2的第一个提案[23]及其后续跟进[24],以回应 Casey 建议。新成立的 Quilt 团队的 Will Villaneuva 在 Medium 发表了一篇解释这一点的文章[25]。 在纽约Interop day 期间,Vitalik 讲述了相关阶段2的最新想法 (相关视频见[26]),最后在多伦多 Scaling Ethereum 会议期间阐述了更多的背景信息 (视频见[27])。
Vitalik 提议的主要目的是尽量减少以太坊区块链在执行交易中的作用。1.0在链中,执行交易只有一种方式,即通过 EVM。在个区块的交易执行后,交易状态 Merkle 根将被写入该区块。为了在该区块的交易中行EVM,所有节点都需要存储整个链的状态 (包括账户余额、合同存储等)。
现阶段2建议采用此模型并推广。现在有几种 (甚至很多) EVM 型 (我们称之为执行环境,execution environments (EEs))。
执行环境 (EE) 就是在 eWASM 编写,(几乎) 作为纯函数操作代码。这意味着执行环境本身不存储任何状态:执行环境中需要知道的任何信息都必须与交易一起提供。如果我想给你发一枚代币,我需要在这笔交易中提供一份证明 (比如 Merkle branch) ,以证明我的余额中有这个代币;执行环境不知道我的余额是多少,因为它没有存储任何信息。事实上,这并不完全正确:每个执行环境都会存储一个32字节值,这是一个总结或累加器 (也许是 Merkle 根,但这不是规定性的,它可以是任何足够安全的东西)。
以这种方式提取执行层,可以提供最大的灵活性。可能会出现针对 zk-Rollups、ERC20 代币或企业友好环境,Plasam,或使用 Haskell 编写[28]EE (执行环境) 等。
概念是,只要支付相当高的费用 (约100 ETH?),任何人都可以部署自己的 EE 支持自己的专业区块链环境。2.0分片链只关注基本方面:交易排序和数据可用性。
当前,一些问题仍在积极讨论中:是否支持 EE 之间的同步调用,如何组装块的细节,收集 gas 费用 EE 是永久性的还是需要支付一些存储费用 (storage fee)、 EE 最初将在以太坊2.0在我看来,这无疑是正确的方向。
如果你想了解更多关于这一切的细节,你可以查看 Casey 和 Alex 的 Scout 库[30],他们正在制作一些可能的原型[31]和 Ethersear.ch 上发表的文章:Phase 新手1000元怎么炒钱?execution prototyping engine[31]。
现在对我们这些人更熟悉了EVM 执行的具体情况的人来说,所有这些听起来可能相当抽象和陌生。不用担心,适应以太坊1.0和以太
坊2.0之间的平稳过渡路径已经成为一项优先事项,现在有一些有趣的想法 [33] 可以有效地实现这一点。虽然还存在一些挑战 [34],但相关的讨论 [35] 一直在 Ethresear.ch 行进行展开。
其他信息
以下是我在过去一个月左右的时间里随机收集的一些零碎信息:
Chainsafe 的 Colin Schwartz 正在撰写一篇以太坊2.0的完整指南 [36]以及有关以太坊2.0扩展性的第一部分 [37];
Danny Ryan 在 Ethereal 会议期间传递的“Cautious Optimism (审慎的乐观态度)”[38];
EthGasStation 与 Prysm 团队合作并发布了相关报告 [39];
Alex Stokes 撰写了一篇解释以太坊2.0如何充当以太坊1.0的最终性小工具的文章 [40],以及一篇有关以太坊2.0共识的经济安全性的文章 [41];
Matt Garnett 列出的开启以太坊2.0学习的资源列表 [42];
可以在 Twitter [43] 或 Peepeth [44] 上关注我,了解更多信息。
更多资源
相关的规范文档 [45]
? Pull requests [46]
? Commits [47]
? Issues [48]
验证者注册合约 [49]
两周一次的以太坊2.0实施者电话会议 [50]
https://ethresear.ch/
https://gitter.im/ethereum/sharding & 新手怎么炒币能挣钱 https://gitter.im/ethereum/casper
Eth2.0 Handbook 更新 [51]
Sharding 路线图更新 [52]
信标链相关问题 [53]
https://github.com/ethresearch/p2p/issues
以太坊 Reddit 社区地址 [54]
加密货币领域相关推特账户 炒币新手必备九个技巧 [55]
文中涉及的链接:
[1]:https://media.consensys.net/state-of-ethereum-protocol-2-the-beacon-chain-c6b6a9a69129
[2]:https://github.com/ethereum/eth2.0-specs/releases
[3]:https://photos.app.goo.gl/eV81rzNZoBBtnm1HA
[4]:https://www.youtube.com/watch?v=NlDA3gKqysA
[5]:https://hackmd.io/@vJTdwcwQSByvMaZGfTX_oQ/Hyz8Mw-9V?type=view
[6]:https://docs.google.com/presentation/d/1UN5EV6nb2UHAQdVkE5BGkL2fyKKND0cdWi7gS2SWhAw/edit#slide=id.p
[7]:https://github.com/ethereum/eth2.0-pm/tree/master/interop/hobbits
[8]:https://medium.com/whiteblock/introducing-hobbits-a-lightweight-wire-protocol-for-eth-2-0-b1bfae5e4843
[9]:https://twitter.com/JonnyRhea/status/1139245584169209858
[10]:https://explorer.bounties.network/profile/0xb7693d3f040d66ab89ab86e7f8688c01febbc77c
[11]:https://youtu.be/RW7K3JQOZOg?t=9335
[12]:https://twitter.com/DeanEigenmann/status/1137032627230089216
[13]:https://arxiv.org/pdf/1906.05132.pdf
[14]:https://www.youtube.com/watch?v=4V-WQ2CnRfA
[15]:https://github.com/ethereum/eth2.0-specs/tree/dev/test_generators
[16]:https://github.com/ethereum/eth2.0-specs/releases/tag/v0.7.1
[17]:https://medium.com/@josephdelong/ethereum-2-0-deposit-merkle-tree-13ec8404ca4f
[18]:https://twitter.com/RosuGrigore/status/1131066228460675072
[19]:https://github.com/ethereum/eth2.0-specs/pull/1152
[20]:https://github.com/ethereum/eth2.0-specs/blob/dev/specs/core/1_shard-data-chains.md
[21]:https://www.youtube.com/watch?v=RW7K3JQOZOg&t=6284
[22]:https://ethresear.ch/t/phase-one-and-done-eth2-as-a-data-availability-engine/5269?u=benjaminion
[23]:https://notes.ethereum.org/s/HylpjAWsE#
[24]:https://ethresear.ch/t/proposed-further-simplifications-abstraction-for-phase-2/5445
[25]:https://medium.com/@william.j.villanueva/a-journey-through-phase-2-of-ethereum-2-0-c7a2397a36cb
[26]:https://youtu.be/NlDA3gKqysA?t=9441
[27]:https://www.youtube.com/watch?v=RW7K3JQOZOg&feature=youtu.be&t=2090
[28]:https://sites.google.com/consensys.net/fae
[29]:https://ethresear.ch/t/one-fee-market-ee-to-rule-them-all/5608?u=benjaminion
[30]:https://github.com/ewasm/scout
[31]:https://twitter.com/alexberegszaszi/status/1132242394102009856
[32]:https://ethresear.ch/t/phase-2-execution-prototyping-engine-ewasm-scout/5509?u=benjaminion
[33]:https://twitter.com/cdetrio/status/1134949249974767616
[34]:https://twitter.com/matt_garnett/status/1135925934882775043?s=03
[35]:https://ethresear.ch/t/work-to-natively-integrate-eth1-into-eth2/5573?u=benjaminion
[36]:https://medium.com/chainsafe-systems/ethereum-2-0-a-complete-guide-d46d8ac914ce
[37]:https://medium.com/chainsafe-systems/ethereum-2-0-a-complete-guide-3739a74be61a
[38]:https://www.youtube.com/watch?v=Z_dhq0MlFtc
[39]:https://ethgasstation.info/blog/eth2-proof-of-stake-testnet-what-we-learned/
[40]:https://medium.com/@ralexstokes/the-finality-gadget-2bf608529e50
[41]:https://medium.com/@ralexstokes/how-secure-is-ethereum-2-0-consensus-41523a59f270
[42]:https://twitter.com/matt_garnett/status/1136049338176720896
[43]:https://twitter.com/benjaminion_xyz
[44]:https://peepeth.com/benjaminion_xyz
[45]:https://github.com/ethereum/eth2.0-specs/tree/master/specs
[46]:https://github.com/ethereum/eth2.0-specs/pulls?q=is%3Apr+sort%3Aupdated-desc
[47]:https://github.com/ethereum/eth2.0-specs/commits/master
[48]:https://github.com/ethereum/eth2.0-specs/issues
[49]:https://github.com/ethereum/deposit_contract/
[50]:https://github.com/ethereum/eth2.0-pm
[51]:https://notes.ethereum.org/s/BkSZAJNwX
[52]:https://github.com/ethereum/wiki/wiki/Sharding-roadmap
[53]:https://github.com/ethereum/beacon_chain/issues
[54]:https://www.reddit.com/r/ethereum/
[55]:https://twitter.com/benjaminion_xyz/following