数据可用性主要存在于轻客户端节点相对全节点的语境下。对于轻客户端节点的数据可用性问题,行业内已经达成共识——采用纠删码来解决。
不仅轻客户端节点有数据可用性问题,Layer1+Layer2的叙事也好,ModularBlockchain的叙事也罢,都会存在数据可用性问题。
目前来看,行业里针对数据可用性问题,主要有以下三个方面的方案:
一、在L1链上存放数据的降成本方案——EIP-4488和EIP-4844
以太坊用Rollup扩容时做一笔交易,主要有三类费用:执行费用、存储/状态费用、数据可用性费用。其中,数据可用性费用占大头。
目前Rollup上传数据到L1是以Calldata的形式,这种方式非常贵。所以提出了EIP-4488,可以将每个非0字节的Calldata成本从16Gas降低到3Gas,但其实这个费用仍然挺高的。
然后,又提出了EIP-4844提案,即Proto-Danksharding。引入了一种称为BlobcarryingTransactions的交易格式。这种交易格式与普通的交易格式相比,多了一个Blob的位置可以用来存放L2的数据。而且,Blob数据在一个月后会被节点删除,从而大幅节省了存储空间。
Blob这种交易格式能够提供比Calldata更廉价的数据可用性。主要有两方面原因:一方面,Callda存在于ExecutionPayload中,而Blob数据存储于Prysm节点或者Lighthouse节点中,相比而言Calldata需要被合约读取时所消耗的资源要多很多;另一方面,Blob数据是短期存储,一个月后节点会删除Blob数据。
总而言之,这可以理解为Ethereum在L1链上降低数据可用性成本的一个方案。
另外,也提了一个配套的验证数据可用性的方案——数据可用性抽样,节点通过DAS检查,可以只下载一些随机选择的块来验证一个块是否已发布。由于DAS可以对区块数据做并行化验证,所以未来数据分片的数量即使很多,也不会增加单个验证节点的负担,反而会刺激更多验证节点加入,从而保证验证节点的充分去中心化。为了实现DAS,引入了纠删码技术;同时为了确保纠删码被正确编码,又引入了KZG多项式承诺。
上述一系列解决方案之后,Ethereum节点只需要随机下载一部分数据块,就能验证所有数据是可用的。
二、执行层Rollup推出的数据可用性方案
目前头部的执行层Rollup也有自己的数据可用性解决方案,以StarkEx、zkSync2.0、PolygonzkEVM等为例。
StarkEx
StarkEx是一个用于创建许可的、特定于应用程序的扩容解决方案框架。目前有包括dYdX、Immutable、Sorare、DeversiFi、Reddio等项目采用StarkEx解决方案。
StarkEx具有多种数据可用性模式:Rollup、Validium、Volition。这三种模式都是基于有效性证明。在Rollup模式中,所有数据都在链上提交;在Validium模式中,数据保持在链外,只有对最近状态的承诺以及该状态的有效性证明提交到链上;Volition模式是一种混合模式,在这种模式下用户可以自行选择单个交易粒度的数据存储模式是链上还是链下。
由于Validium的数据保持在链外,只需要把最近状态的承诺和证明提交上链,所以Validium交易费用更低,同时TPS也更高,但代价是StarkExValidium的运营商可以冻结用户的资金。StarkEx引入了一个获得许可的数据可用性委员会,DAC必须通过其法定人数对状态的每次更新进行签名来确认它已收到数据。目前在StarkEx中,DAC由8名参与者组成。
zkSync
zkSync2.0引入了一个新的整体架构,提供zkRollup和zkPorter两种账户的混合。但这两部分也是可组合和可互操作的:zkRollup端的合约和账户能够与zkPorter端的账户无缝交互,反之亦然。从用户的角度来看,唯一明显的区别是zkPorter账户的费用便宜100倍。
zkRollup状态具有链上数据可用性,zkPorter则采用链下数据可用性。具体而言zkRollup的数据可用性在L1,zkPorter的数据可用性在L2。其中,zkRollup的交易数据通过Calldata发布到Ethereum,这个就是常规操作,有特色的是zkPorter的数据可用性方案。
zkPorter通过结合zkRollup和分片思想的混合方法来处理数据可用性。它可以支持任意多个分片,每个分片都有自己的数据可用性策略,由分片的智能合约定义。分片的选择在个人账户级别进行控制。相当于把数据可用性委托给各个分片,这些分片可以自由选择不同的解决方案。
zkPorter的分片主要包括:Shard0、GuardiansShard和ProtocolXShard。Shard0是一个简单的zkRollupshard,具有底层以太坊L1的完整数据可用性和安全保证。所以Shard0是zkPorter内部运行成本最高的分片,大约是在主网上交易成本的1/100。
其他分片则是在自己的智能合约上定义自己的数据可用性策略。zkPorter的分片交换链上数据可用性,使交易成本进一步降低10-100倍,TPS增加超过基础分片。zkPorter引入了一种可选的验证器机制——zkPorterGuardians——这种机制使得协议能够邀请协议利益相关者作为协议分片上的数据可用性保证人。
zkPorter的数据可用性由zkSync代币持有人保护。他们通过签署区块来跟踪zkPorter端的状态,以确认zkPorter账户的数据可用性。监护人使用zkSync代币参与权益证明。这也就是所谓的数据可用性的加密经济保证。
PolygonzkEVM
PolygonzkEVM是一种基于加密证明的去中心化以太坊Layer2扩容方案,可为交易提供验证和快速确定性。和PolygonAvail一样都是Polygon推出的扩容方案,侧重点有所不同。虽然他们推出了PolygonAvail这种通用的数据可用性方案,但PolygonzkEVM还是设置了自己的数据可用性方案。
PolygonzkEVM也是采取混合模式的数据可用性,可以选择Validium或者Volition。Validium模式下,数据存储在链下,只有有效性证明在链上发布;Volition模式下,对于某些交易,数据和有效性证明都保留在链上,对于其余交易则只有证明在链上。
Scroll
当然,也有尚未设计自己的数据可用性方案的zkRollup,比如Scroll。
其CTOYeZhang在接受链捕手采访时表示,“Scroll暂时没有设计专门的数据可用性方案。对以太坊技术的时间线还是比较乐观的,不论是Danksharding还是Proto-Danksharding。其次,引入额外的数据可用性方案会让系统整体的安全性有一定的妥协,所以我们认为长期来看最好还是用以太坊作为原生的数据可用层。”
二、数据可用性的通用解决方案
除了EthereumL1和RollupL2在解决数据可用性问题及降低数据可用性成本外,还有一些项目也在尝试推出数据可用性的通用解决方案。这类项目有望在未来的模块化区块链中承担起数据可用性层的重要作用。目前主要有Celestia和PolyonAvail两个项目。
Celestia
Celestia是一个模块化区块链,专注于数据可用性层。CelestiaDA层有两个关键特征:数据可用性采样和命名空间默克尔树。DAS使轻节点无需下载整个区块即可验证数据可用性;NMT使Celestia上的执行和结算层能够下载仅与它们相关的交易。
Celestia要成为一个独立的数据可用性层,有三个核心事项:
Rollup将所有交易数据传递给Celestia;Celestia在其网络上发布所有这些数据;Ethereum确认Celestia已经存储和发布了这些数据,并且可以随时访问。总而言之,Celestia通过纠删码+欺诈证明+经济约束和激励机制实现了这个通用的数据可用性解决方案。
PolygonAvail
Polygon是一个生命力很强的项目,其团队规划和研发能力非常强。Polygon经历了扩容技术方案从状态通道、Plasma到OptimsticRollup、zkRollup的演变,Polygon团队内部也探索了多种扩容方向,现在也仍然保持着多个扩容方向的推进,比如:PolygonAvail、PolygonZero、PolygonMiden、PolygonzkEVM等。Polygon就像是一个Layer2聚合器,聚合了多种扩容方案。
PolygonAvail是一个旨在解决以太坊扩容方案的数据可用性的项目。官方在官网上将PolygonAvail定义为一个模块化区块链,对应数据可用性层。
Avail可以为任何轻客户端提供数据可用性的高保证,当然在官方文档中也直言“并不比任何其他网络为轻客户端提供更高的DA保证”。Avail专注于通过利用KZG多项式承诺、纠删码和其他技术来允许轻客户端高效且随机地小样本采样,从而证明区块数据可用而无需下载全部区块以验证其完全可用性。
与Celestia一样,PolygonAvail也是一个通用的数据可用性解决方案。与Celestia不同的是,Celestia采用欺诈证明确保纠删码正确,而PolygonAvail则采用KZG承诺。Celestia实现起来比较简单,但由于其纠删码和轻节点采样数据的规模较大,因此需要的通信带宽略高。Avail涉及相对复杂的加密实现,难度稍大。它的优点是纠删码规模小,轻节点采样数据量小,带宽要求低。
总结
以上三个方面的方案都是旨在解决链上数据可用性问题,或在L1上引入存放数据的新方式,或以模块化的视角看待区块链的发展然后去做通用的数据可用性层,或在L2上设计Dataoff-chain的廉价数据可用性方案。
我感觉这些方案在未来很长一段时间会共存。Layer1+Layer2的架构下,“Blob”取代“Calldata”承接Layer2的数据可用性,Validium、Volition、zkPorter则以有限相关方范围内的经济约束和激励机制确保Layer2本身也具备数据可用性解决方案。模块化区块链的叙事下,PolygonAvail和Celestia类通用的数据可用性方案则以相对更加去中心化的方式,在未来承担起DA层的责任。
同时,更希望能看到更多优秀的创业团队在数据可用性领域的探索。现有的这些数据可用性解决方案是探路人,但我总感觉这些方案还是差些兴奋点。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。