在中短期、甚至长期来说,rollup是以太坊唯一的去信任扩容解决方案。数月以来,L1上的交易费变得如此高,以至于我们迫切需要做些什么来促进整个生态系统向rollup迁移。Rollup已经为许多以太坊用户极大地降低了交易费:?根据L2交易费监测网站l2fees.info显示,Optimism和Arbitrum的交易费比以太坊基础层的交易费要低大约3-8倍;而ZK-rollup拥有更好的数据压缩并且不需要打包签名,费用与基础层相比要低40-100倍。
然而,即便有所扩容,这样的费用对于用户来说也还是太昂贵了。关于该问题早就已经写过文章,解决目前形式rollup不足的长期解决方案为添加数据分片,这将为rollup增加约1-2MB/秒的专用数据空间。本文档描述了对该方案的实用操作方法,从而尽快为rollup释放充足的数据空间,并逐渐增加额外的空间和提高安全性。
第一步:调整交易calldata以实现扩容
目前现有的rollup需要使用交易calldata。因此,如果我们想在不需要rollup团队做任何额外工作的情况下,短期内提高rollup的吞吐量并降低成本,我们应该仅需要降低交易calldata的成本。目前区块的平均大小还远不足以大到威胁网络的稳定性,因此可以安全地完成这一操作,尽管可能需要一些额外的逻辑来防止一些极度危险的边缘情况。
请阅读:EIP4488,或者另外一个EIP(更简单但效果更温和)—EIP4490。
理论上,EIP4488可以把rollup的数据可用空间最大增加到~1MB/slot并且成本降低大约5倍。这一步骤比下文提到的步骤可以更快地实施。
第二步:少数分片
同时,我们可以开始开展一些工作以推出“专用”分片。以完整的形式实现专用分片可能需要很长时间,但我们可以做的是一片一片地实现,并从每一个分片中获益。要实现的首个自然分片是分片规范中的“业务逻辑”,但想要避免网络中的大部分困难,需要将初始分片数量维持在非常少的水平上(例如4个分片)。每个分片将在自己的子网络中进行广播。验证者将默认信任委员会;但是如果他们愿意,他们也可以选择留在每个子网络中。并且只有当他们看到信标区块确认的任意分片区块的完整主体时,才会接受这个信标区块。
分片规范本身并不是特别困难;这是个和最近发布的Altair硬分叉规模差不多的样板代码更改(Altair信标更改规范文件有728行代码,而分片信标更改规范文件有888行代码)。所以我们有理由相信它可以在Altair实现和部署的时间框架内实现。
为了使得分片数据能够真正被rollup使用,rollup需要能够对分片数据进行证明。有两个选项:
1.添加BEACONBLOCKROOT操作码;rollup将添加这个代码以验证植根于信标链历史区块根中的默克尔证明。
2.添加未来证明的状态和历史访问预编译(future-proofstateandhistoryaccessprecompiles),这样的话,如果承诺机制(commitmentscheme)在未来发生变化,rollup就不需要更改其代码。
这将使rollup的数据空间增加到大约2MB/slot(每个分片扩展250KB*4个分片,再加上第一步中已扩展的calldata)
第三步:N个分片,由委员会提供安全保障
将活跃分片的数量从4个增加至64个。现在分片数据将进入子网络中,因此到这时,P2P层必须已经足够坚韧,可以将分片分成数量更多的子网络。其中数据可用性的安全性将基于诚实的大多数,即依赖于委员会的安全性。
这将使得rollup的数据空间提高到大约16MB/slot(每个分片扩展250KB*64个分片);我们假设此时rollup已经从执行链中迁移出来。
第四步:数据可用性采样(dataavailabilitysampling,DAS)
添加数据可用性采样,以确保提高安全水平,即使在遭遇大多数不诚实行为的攻击下,也能保护用户的资产。数据可用性采样可以分阶段推出:首先,以非强制的方式让网络进行测试;然后添加了DAS才能接受信标区块;甚至可能先在某些客户端上实现。
一旦完全引进了数据可用性采样,分片就完成发布了。
分片机制下的Optimistic和ZKrollups
分片世界和目前状况的一个主要区别是,在分片世界中,一笔向智能合约提交rollup区块的交易中将不可能包含rollup数据。相反,数据发布步骤和rollup区块提交步骤将不得不分开:首先,在数据发布步骤中将数据发布至链(发布到分片里);然后在提交步骤中,提交其区块头以及基础数据的证明。
Optimism和Arbitrum的rollup区块提交已经使用了上面所说的两步设计,所以这对它们来说只是一个小小的代码修改。
但对于ZK-rollup来说,事情就有点棘手了,因为提交交易需要提供一个可以直接在数据上运行的证明。它们可以做一个ZK-SNARK的证明,证明分片中的数据与信标链上的承诺相符,但这样很昂贵。幸好有更便宜的替代品。
如果ZK-SNARK是一个基于BLS12-381的PLONK证明,那么它们可以直接将分片数据承诺作为一个输入。BLS12-381分片数据承诺是一个KZG承诺,与PLONK中的承诺类型相同,因此它可以直接作为一个公共输入传入证明中。
如果ZK-SNARK使用不同的方案(甚至只是一个拥有更强的信任设置的BLS12-381PLONK),它可以包含自己对于数据的承诺,并使用等价证明来验证证明中的承诺和信标链中的承诺是对相同数据的承诺。
分片后谁来存储历史数据?
增加数据空间的一个必要共同条件是,移除以太坊核心协议负责永久保有其达成共识的所有数据这个属性。数据量太大,根本不需要这样做。例如:EIP-4488导致理论上链的最大容量为大约1,262,861字节/slot(12秒),或大约3.0TB每年,尽管实际上,一开始更可能是大约250—1000GB每年
4个分片(1MB每个slot)会每年增加额外(几乎可以确定)大约2.5TB的数据
64个分片(16MB每个slot)导致每年总共需要(几乎可以确定)大约40TB的存储
大多数用户的硬盘大小在256GB到2TB之间,1TB似乎是中位数。下图是一组区块链研究员的内部调查数据:
这意味着尽管用户今天可以负担得起运行一个节点,但如果这个路线图的任何部分没有进一步的修改,用户将会负担不起。大得多的驱动器是可以买到的,但用户将不得不特地去购买它们,这大大增加了运行一个节点的复杂性。这方面的主要解决方案是EIP4444(译者注:可参阅《引介EIP-4444:对执行层客户端的历史数据设限》),它使得节点运行者不再负责存储超过1年的区块或收据。在分片方面,这个期限可能会进一步缩短,节点将只负责它们积极参与的子网上的分片。
这就留下一个问题:如果以太坊核心协议将不再存储这些数据,那么谁来存储?
首先,重要的是要记住即使有了分片,数据量也不会变得异常地大。是的,每年40TB的数据量的确是个人运行“一般”消费级硬件难以负荷的。但是,对于愿意投入资源和工作到存储数据的个人来说,这是可以接受的。在BestBuy的一个48TB硬盘售价1729美元,这里的14TB硬盘售价大约420美元。运行一个32个ETH验证者slot的人可以用质押奖励来支付存储实现分片后的整个区块链的开销。因此,从账面上看,没有人会存储分片的历史数据以致完全没有人知道这些数据,这种情况似乎是不可能的。
那么谁将存储这些数据呢?以下是一些可能的想法:
自愿存储的个人和机构
区块浏览器(etherchain.org、etherscan.io、amberdata.io…)肯定会存储所有的数据,因为提供这些数据给用户是它们的商业模式。
RollupDAO对存储并提供与它们的Rollup相关的历史数据的参与者进行提名与支付。
历史数据可以通过torrents上传和共享
客户端可以自愿选择各自存储任意0.05%的链历史数据(因为使用纠删码,你需要很多客户端同时离线才能丢失哪怕一个片段的数据)。
门户网络(PortalNetwork)里的客户端可以存储任意部分的链历史数据,门户网络会自动把数据请求导向拥有这些数据的节点。
历史数据的存储可以得到协议内的激励
像TheGraph这种协议可以创建有激励的市场,其中的客户端给提供历史数据(有默克尔证明确保其正确性)的服务器付费。这就给运行存储历史数据的服务器的个人和机构提供激励,做到按需提供。
其中一些解决方案(自愿的个人和机构、区块浏览器)已经存在了。特别是p2ptorrent,是由大型自愿者驱动的生态来存储大量TB级内容的很好的例子。剩下的基于协议的解决方案更强大,因为它们提供激励,但它们需要更长的开发时间。从长远来看,通过这些第二层协议来访问历史数据会比今天通过以太坊协议更高效。
作者|VitalikButerin
原文链接:https://notes.ethereum.org/@vbuterin/data_sharding_roadmap
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。