之前PANews在文章《为什么说模块化是必然的?以及它对我们的启示》中介绍了公链的模块化趋势,有了这些知识的铺垫,现在终于可以和大家聊一聊以太坊自己的模块化了,或者换个说法——聊聊ETH2,和它当前的进度。
相信对以太坊发展史了解较多的读者,早在2018年的时候就对以太坊的POS计划有所耳闻。坦白讲这项计划最开始,也对模块化公链将信将疑,然而这三年多的时间里发生了很多事,消除了很多不确定性。在以太坊最后一个POS测试链即将发布的当下,PANews将从历史的重要事件出发,围观以太坊这场旷日持久的模块化升级之路,并展望以太坊2022年的进展。
ETH2.0路线图与Layer2扩容
对于今年之前的事,本文只阐述关键的部分。2018年,以太坊核心开发人员王小伟在台北交流会上公布了著名的以太坊2.0的路线图,这件事在当时的主要意义是将POS与分片的概念合并到了一起。(分片很有趣,详细说来大有可讲,它涉及到的分治思想,在非常多的行业中有体现。大家可以关注PANews后续为大家专门带来的分享。)而要让分片开始工作,就必须要有一个“总节点”能像云计算里面的MapReduce那样为分片分配任务,也充当分片的索引。对应到以太坊2.0第一阶段的任务,就是让“信标链“上线,信标链可以承载所有分片的映射,且能够执行验证,相当于分片的“火车头”。随后是加入分片,让分片保存数据。直到第三步,在分片上部署虚拟机(注意是VM,不是EVM),使每个分片都能够执行计算,而不仅仅是储存。彼时的分片还颇受争议,有很多人并不支持第二、三阶段的设想。
于是从2018年到2020年底这段时间,以太坊基本是在一边建设信标链,一边探讨如何用现有的EVM链替代分片的作用。这对以太坊上的应用是好消息,POS迁移不用麻烦它们了。另外其中还有一项重点是对POW的修修补补,比如沉淀一些冷数据,好腾出一些执行空间。这些讨论最终没有没执行,但为后面的Layer2打了些基础。毕竟,一方面以太坊的采用率越来越高了,另一方面以太坊2.0的计划还需要执行很多年。
时间来到2020年底,那时的信标链即将启动,无状态分片(不能计算的分片)的进展也不错,可要想让分片从普通火车变动车(还记得上文提到的火车头么),需要解决的问题还有一大堆。首当其冲,就是如何让VM替代EVM,这在中心化的系统中不是问题,但在去中心化系统中,VM要做到的不仅仅是虚拟机的分治与运算,还要对这个过程建立共识,以防有节点作恶。林林总总的困难加起来不少,哪怕有人说以太坊2.0能在两年内实现,在当时都像是在吹牛,然而时间不等人,以太坊交易费很快初具规模,扩容的压力与日俱增。
于是Vitalik在那时发了一篇长文,来说明Layer2扩容是当前最重要的事。他呼吁开发者们把分片放到一边,抓紧时间让Rollup接入主网。从逻辑上说,只有Layer2代表的执行层成立,信标链提供的共识层,和分片提供的数据可用性才能派上用场。
如上文所说,这种想法已经铺垫了近两年,所以Vitalik的提议很快受到了大家的认可,并带来的新的发现,如果Rollup可以被作为一个模块拿出来提前实现部分以太坊2.0的功能,那信标链和以太坊目前的POW主网不也是个模块么?而且有了Rollup提供的执行能力,以太坊现在就可以把信标链用起来,而不必等分片上的虚拟机被建成。于是the merge计划被顺理成章的提出并采纳,这项计划将允许信标链作为安全层,承载共识,并直接接入主网,让现有的以太坊主网和Layer2构成执行层。于是从2021年初起,以太坊就可以质押挖矿了。
但这对于散户来说,门槛依旧不低。首先你要下载一个客户端,每个客户端都包含两个软件。第一个是节点软件,它负责处理网络共识,与外部世界连接,并发送和接受区块。第二个是验证者客户端,它与你的节点连接,并负责证明与提议区块。每个验证者客户端上都可以有多个质押了32个ETH的验证者。但是在The merge实现之前,你每运行一个POS节点,都必须同时运行一个POW节点,并且在无法在POW节点被最终停用之前,取消自己的ETH质押。POS质押还有很多罚没规则,客户端设置有误,网络延迟,或是供电不稳,都可能让你遭受损失。所以本文会跳过对各种客户端优劣的对比,建议大家如果考虑质押挖矿,优先选择代理质押,下文会给出一些参考。
以太坊计划用信标链和主网的融合来完成从POW到POS的过度,那么过度的时间点怎么确定呢?这就是难度炸弹解决的问题,相信大家都听过这个概念,就是当POW节点一旦发现了超过难度炸弹的区块,节点就会进入过渡状态,并开始从信标链获取对这个区块的共识,一旦共识被确认,这个区块就将是最后一个由POW生成的块,以后所有的新块都将由POS,也就是信标链产生。节点中质押的ETH和验证奖励,也就可以被解锁了。但这个难度炸弹并不是合并的前置条件,它只是一个用来完成合并的工具,而工具听人的指挥,以太坊的开发者可以让它提前,也能让它延后。
去年一整年,以太坊的开发团队细化了上述方案,并且先后发布了三版测试环境,用来探讨信标链与主网合并之后的样子,可以看出此时以太坊还是计划让安全层来兼容数据可用性,执行层需要上传完整的数据到安全层的全节点里做验证,这是对安全层性能的浪费,是为数据可用层的解耦埋下的伏笔。当时的这些设想,被信标链负责人Danny Ryan绘制成示意图,并作为NFT发售,其售卖收入将用来给开发团队发红包。
发布最新版测试环境,给Layer2“开小灶”
在元旦之前,以太坊发布了最新版的测试环境 Kintsugi ,这是首个允许外部用户体验的测试环境。以太坊上个月也终于考虑给Layer2“开小灶”了,经过优化之后的Rollup将不必和Layer1上的其它应用竞争资源,其成本可能会降到之前的五分之一。与之关联的是EIP-4488,以太坊上海升级的一部分。是的,现在Layer2运行的不错,The merge的进度也没太多好担忧的,以太坊的开发者终于有精力想想他们之前的计划了。
由于Kintsugi对所有人开放,上个月也出过一次问题。这得归功于Marius和推特上的#TestingTheMerge 大军,前者发布了一个名为Fuzzer的东西用来生成一些特殊的随机数据,随后这些数据被志愿者们用来制造一些奇怪的用例,导致部分客户端由于验证区块的方法不同,出现了一些问题,虽然很快被修复了,但还是造成了一些影响。这些客户端的开发团队事后解释说,反正是测试链,可以不那么急着修复故障,让子弹飞一飞,看看是不是能引出更多他们没注意到的威胁。
无独有偶,ETH2去年的测试网Pyrmont,弃用之后被Nimbus客户端团队中的程序员拿来“瞎玩”,今年他突发奇想,用了一种POS独有的网络攻击(类似于POW中的51%攻击)。大家有兴趣可以去这里看看https://twitter.com/jcksie/status/1485574681688223745 , 这次攻击让测试环境产生了一个分叉,叫Insecura,并且由作恶的节点主导,有点鸠占鹊巢的意思。不过要想在现实世界复制这种攻击,其成本可以高到难以想象。但至少,它提醒了我们要注意一个致命的问题——ETH2的客户端多样性。
这个问题在近两年被以太坊开发者无数次高高举起,又轻轻放下,所有开发者都对“一个客户端掌握了三分之二的验证人权重”感到不安,却也感到无可奈何。以太坊在设计时,有多个相互独立的团队,以不同的语言,开发和维护了一系列客户端。其目的是为了分散风险,减少单个客户端被攻克时,对主网造成的影响。然而,这需要以每个客户端都均匀的获得用户数量为前提。可现实很残酷:
Prysm上个月控制了60%以上的ETH2总质押代币(现在是66%),也就是说,只要它想,它可以对以太坊的共识层做出毁灭性打击(双花,然后所有诚实节点会损失最多16个ETH,再被踢出验证队伍),开发人员在这些错误的交易数据被永久的记录在以太坊之前,只有13分钟的响应时间。而如果这个占比能被降到50%,则开发人员有3~4周的时间挽回结果。可即便挽回,也要付出不少代价,这件事短期内怕是没法解决。(对多样性感兴趣的朋友,可以到这里了解https://clientdiversity.org/)
本文应该会在2月下旬发稿,也就是说Kintsugi的V2版本应该就在这几天内发布,我目前还没看到具体的命名在此之后再过上几周,可能最多也就两个月,ETH2的最后一个(希望是)测试环境Klin就该上线了。
以太坊的难度炸弹,应该会在今年7月出现,如果开发团队能在此之前完成The merge,当然是皆大欢喜。这从工作量上来看,也并非完全不可能,只是会压榨掉所有的缓冲时间,Klin链的测试必需一气呵成,事实上以太坊的开发团队也确实是这样计划的。可我们作为普通的旁观者,乐观来估计,这次的难度炸弹怕是至少再推迟一次。
可能为了督促各个客户端团队加快进度,大家现在有两份进度表可以查看,一份是以太坊如何关闭POW的勾选单(https://github.com/ethereum/pm/blob/master/Merge/mainnet-readiness.md),大部分的空位都已经被勾上了,关于压测和执行层的进度落后也能够理解。另外一个是Klin的进度表(https://notes.ethereum.org/@timbeiko/kiln-milestones#Milestone-tracker),6步中的前3步都是在为新的测试环境制定规则,后三步才开始下场做事,最后一步是把节点和客户端发布出来。目前是执行层的客户端比较拉胯。从以太坊的路线图来看,现在的执行层,也就是以太坊主网,最终会变成信标链的核心部分,所以它的客户端表现也必然会影响到共识层,希望落后的进度可以被尽快追赶上来。
除此之外,扩容解决方案Dank sharding这个概念也是最近提出来的。PANews此前转载过一篇文章,专门介绍这件事《“Danksharding”是什么?为何值得V神在情人节科普》在原先的分片设计中,每个分片都需要独立向信标链上的验证者发布和自己有关的任务,就连作为他们数据索引的“信标块”也是一样。这些数据会被拆成碎片,单独分发给负责认证数据可用性的委员会成员,像BT下载一样安全、高效。但这个过程同样也会给矿工带来收益,发布任务的矿工,同时会负责出块。这样一来,那些成熟的矿池会获得非常多的机会来发布任务。可如果我们把出块权和任务发布解耦,验证者就可以挑选那些出价最好的矿工来出块。为了实现这个目标,Dank 提议把一个“信标块”关联的所有分片“Rollup”到一起,打着包去找验证委员会,负责打包的新角色可以有很多,而且会严格服从命令(有技术手段)。我不得不为这种别出心裁感到佩服,真是万物皆可Rollup。同时这种设计也兼具“模块化”特点,首先无论是验证者还是执行层现在都可以在一个打包好的模块中,找到它们所需的一切数据。这就好比搬家问题,有的时候你知道自己要穿的某件衣服在哪个箱子里,但为了把这件衣服拿出来,你先是需要调整箱子的顺序,然后在把箱子里的东西都倒出来,好找到自己的衣服。你搬家的箱子越多,每个箱子的容量越大,这个过程就越复杂。而让信标块把分片打包起来,无疑可以减轻这个工作量。同时由于纠删码的存在,你可以在模块内删除掉多余的重复数据,让模块变小,优化带宽和计算资源的占用。最后,别忘了Dank分片也是分片,所以他可以让验证者仅靠数据样本就能完成数据可用性的证明,后期以太坊的开发者可以利用这种特性搭建起轻节点+欺诈证明的模块化结构,也可以兼容ZK的Rollup,后者甚至可以做到从执行层到数据可用层的瞬间同步。
我有种感觉,Layer2是执行层的过渡状态,信标链是共识层的过渡状态,而现在这个Dank sharding是数据可用层的过渡状态。以太坊几乎给所有ETH2能带来的好处都找到了过渡状态,却迟迟没有发布ETH2,让人有些感慨。
感谢所有能看到这里的读者,我接下来说一个大家都关心的问题,ETH2会不会带来费用的变化,首先来看官方回答
简单说,官方认为ETH2是以太坊的共识层,而共识层虽然是POS,但不会处理你的交易,所以在ETH1(ETH主网在合并后并不会消失)上的交易并不会受到价格影响,但将数据可用层和安全层转向ETH2的的方案,会在这方面大大节约成本(因项目而异)。此外由于合并后的以太坊出块速度会从13秒变成12秒,这可以带来一些肉眼难以观察到的费用降低。
如此看来,想要让执行层的费用变低,还得靠Layer2。
索性除了上文中提到的EIP-4488,以太坊还有更多步骤来优化Rollup。我们已经看到 Optimism 在 1 月份将交易费用降低了 30%,不久将再降低 30%。Arbitrum 也在 1 月份削减了费用,Arbitrum Nitro 估计将费用削减 50%。随着Layer2上的交易越多,它的手续费会变得越来越便宜。L1虽然还是那么贵,但已经不重要了,就算几年之后以太坊真的做到了它所说的ZK-EVM,也还是要比L2贵。Dank sharding的作用就像是以太坊原生的Celestia,和L2搭配起来有多强,可以参考PANews之前对Celestia的报道。总之在不久的将来,我们也许会突然想到几年前在加密世界中还曾经存在过Gas fee这个概念,那时的我们会在怀念与释然的氛围中,对这个想法付之一笑。
其实ETH2杂七杂八的小进展真的很多,比如对秘钥的优化,数据冗余的优化,但我想这些过于底层的东西对大家而言意义不大,以后有机会在说吧。
关于ETH2 staking的小贴士
首先回答两个问题:
Q: 要不要自己运行节点?在质押池里质押与运行节点分别有什么风险与好处?
A: 在质押池里质押的好处就是你不需要履行任何职责。风险还是那句老话“控制不了你的密钥就控制不了你的币。”
Q: 有没有去中心化的第三方运营方案?
A: 有,但所有的第三方托管方案都要求你信任第三方。举例,如果第三方托管了你的验证私钥(你保留自己的取款私钥),你还是必须信任该第三方会妥善运营验证者,不会导致你被罚没(所以你跟第三方之间必须实现分配好责任)。如果你直接把钱交给第三方,连取款私钥都不保留,则信任程度更甚(与把钱存入中心化交易所等同)。
如果你选择运行属于自己的节点,可以在以太坊官网找到详细的中文引导。如果你选择质押池来委托,请注意质押池有两种:
中心化质押池:一般指交易所的质押池,优点是使用方便,无论进出都没有难度,因为交易所本身就有ETH的储备池,以满足立即提款的需求,类似于银行T+0。甚至它还能拿用户提供的ETH赚取更多资金沉淀的收益,类似小黄车。现阶段因为其中心化的托底能力(对抗一切意外),对用户来说很有吸引力。但收益通常较低,虽然它不会额外收取费用,但也没有额外的DeFi收入了,并且交易所因为对商誉的考虑(吃相),不会把以太坊的MEV压榨到极限。大家可以在stakingrewards查询相关数据,由于这些数据有一定时效性,所以在文章中不额外提供参考。
去中心化质押池:Stakewise、Rocket Pool、Lido和SSV Network都是这方面的佼佼者。这是以太坊开发者们最推荐的参与方式,虽然这可能是因为有不少以太坊的开发者,本身也是这些矿池的开发者,但真心不建议大家这样去考虑问题。去中心化的质押池,最大的不同在于它可以为你创造DeFi收益,参与质押的用户,可以用ETH换取一种质押凭证,而这个质押凭证,可以被用来抵押、交易或是借贷,大家把它当做一种衍生品就好了。衍生品的流动性越强,质押的机会成本就越低,也就能吸引更多人去质押,如此一来,以太坊的POS机制也会越安全。对于普通用户来说,你可以以质押者的身份参与,也能以节点运营商的身份参与,目前Stakewise的开箱体验有了很大提升,而且随着DAO的成熟,这种模式对秘钥管理也有的更新的解决方案。充提同样也很灵活,可我觉得还是没有中心化的方便。
此外,Teku的产品经理曾在自己的日志中多次推荐过beaconcha.in的移动端质押App,我想这背后的苦心,应该是尽可能拉低参与质押的门槛,让ETH2的客户端多样性逐渐建立起来。最后建议大家关注EthereumPools ,实时了解关于质押池的最新变化。