作者:Jiawei,IOSG Ventures
编辑:Olivia,IOSG Ventures
本文为IOSG原创内容,仅做行业学习交流之用,不构成任何投资参考。如需引用,请注明来源,转载请联系IOSG团队获取授权及转载须知。
在聊数据可用性之前,我们先花点时间对模块化区块链进行简要回顾。
关于模块化区块链的分层暂无严格定义,一些分层方式从以太坊出发,另一些则偏向通用化的视角,主要看在何语境下进行讨论。
回到18、19年,数据可用性更多在于轻客户端节点的语境;而在之后的Rollup角度下数据可用性又有着另一层含义。本文将分别从「节点」和「Rollup」的两个不同语境来解释数据可用性。
我们首先来看全节点和轻客户端的概念。
由于全节点亲自下载和验证每个区块中的每笔交易,因此不需要诚实假设来确保状态被正确执行,有着很好的安全性保证。但运行全节点需要存储、计算能力和带宽的资源要求,除了矿工以外,普通用户或者应用没有动力去运行全节点。况且,如果某个节点仅仅需要在链上验证某些信息,运行全节点显然也是非必要的。
这是轻客户端在做的事情。在IOSG的文章「多链生态:我们的当前阶段与未来格局」中我们简要介绍了轻客户端。轻客户端是区别于全节点的一种说法,它们往往不与链进行直接交互,而依赖邻近的全节点作为中介,从全节点请求所需要的信息,例如下载区块头、或是验证账户余额。
作为节点的轻客户端可以很快地同步整条链,因为它只下载和验证区块头;而在跨链桥模型中,轻客户端又作为智能合约——目标链的轻客户端只需要验证源链的代币是否被锁定,而无需验证源链的所有交易。
这样存在一个隐含问题:既然轻客户端只从全节点那里下载区块头,而不是自己下载和验证每笔交易,那么恶意的全节点(区块生产者)可以构造一个包含无效交易的区块,并把它发送给轻客户端来欺骗它们。
我们容易想到采用「欺诈证明」来解决这个问题:即只需要1个诚实的全节点监测区块的有效性,并在发现无效区块后构造一个欺诈证明、将其发送给轻客户端来提醒它们。或者,在收到区块后,轻客户端主动询问全网是否有欺诈证明,如果一段时间后没有收到,那么可以默认该区块是有效的。这样一来,轻客户端几乎可以获得与全节点等同的安全性(但仍然依赖于诚实假设)。
然而,在以上论述中,我们实际上假设了区块生产者总是会发布所有的区块数据,这也是生成欺诈证明的基本前提。但是,恶意的区块生产者可能在发布区块的时候隐藏掉其中的一部分数据。这个时候,全节点可以下载这个区块,验证它是无效的;但轻客户端的特点使它们无法这样做。并且由于缺少数据,全节点也无法生成欺诈证明来警告轻客户端。
另一种情况是,可能由于网络原因,一部分数据在稍后才会上传,我们甚至无法判断这时的数据缺失是客观条件所致还是区块生产者有意为之——那么欺诈证明的奖惩机制也就无法生效。
这就是我们要讨论的在节点中的数据可用性问题。
上图中给出了两种情况:其一,恶意的区块生产者发布了数据缺失的区块,这时诚实的全节点发出警告,但随后该生产者又补充发布了剩余的数据;其二,诚实的区块生产者发布了完整的区块,但这时恶意的全节点发出了假警告。在这两种情况下,网络中的其他人在T3之后看到的区块数据都是完整的,但都有人在其中作恶。
这样看来,采用欺诈证明来确保轻客户端的数据可用性是存在漏洞的。
2018年9月,Mustafa AI-Bassam(现Celestia CEO)和Vitalik在合著的论文中提出采用多维纠删码来检查数据可用性——轻客户端只需要随机下载一部分数据并验证,就能确保所有数据块是可用的,并在必要时重建所有数据。
采用纠删码来解决轻客户端的数据可用性问题几乎没有异议,Polygon Avail、Celestia(以及以太坊的Danksharding)中都采用了Reed-Solomon纠删码。
不同点在于如何确保纠删码被正确编码:Polygon Avail和Danksharding中采用了KZG承诺,而Celestia中采用了欺诈证明。两者各有优缺,KZG承诺无法抗量子,而欺诈证明依赖一定的诚实假设和同步假设。
除KZG承诺外,还有采用STARK和FRI的方案可用于证明纠删码的正确性。
(注:纠删码和KZG承诺的概念在IOSG的文章「合并在即:详解以太坊最新技术路线」中有提及,由于篇幅所限,在本文中不作展开解释)
Rollup中的数据可用性是:在zkRollup中,需要使任何人可以自行重建Layer2的状态,以确保抗审查;在Optimistic Rollup中,需要确保Layer2的所有数据都被发布,这是构建欺诈证明的前提。那么问题在哪?
我们来看Layer2的费用结构,除了固定花费外,与每批次交易笔数相关的变量主要在于Layer2的Gas花费以及链上数据可用性的支出。前者的影响微乎其微;而后者需要为每个字节恒定支付16 gas,整体占到Rollup成本的80%-95%之多。
(链上)数据可用性很贵,怎么办?
一是降低在链上存放数据的成本:这是协议层做的事情。在IOSG的文章「合并在即:详解以太坊最新技术路线」中,我们提到以太坊正在考虑引入Proto-Danksharding和Danksharding来为Rollup提供「大区块」,即更大的数据可用性空间,并采用纠删码和KZG承诺解决随之而来的节点负担问题。但从Rollup的角度去想,被动等待以太坊来为自己做适配是不现实的。
二是把数据放到链下。下图列出了当前的链下数据可用性方案,通用化方案包括Celestia和Polygon Avail;在Rollup中作为用户可选的方案包括StarkEx、zkPorter和Arbitrum Nova。
(注:Validium原本特指zkRollup与链下数据可用性相结合的扩容方案,为方便起见,本文中以Validium指代链下数据可用性方案并一同参与比较)
以下我们具体来看这些方案。
在最简单的Validium方案中,由中心化的数据运营商来负责确保数据可用性,用户需要信任运营商不会作恶。这样的好处是成本低,但实际上几乎没有安全保证。
于是,StarkEx在2020年进一步提出了由数据可用性委员会(DAC)维护的Validium方案。DAC的成员是知名且在法律管辖区内的个人或组织,信任假设是他们不会串通和作恶。
Arbitrum今年提出了AnyTrust,同样采用数据委员会来确保数据可用性,并基于AnyTrust构建了Arbitrum Nova。
zkPorter则提出由Guardians(zkSync Token持有者)来维护数据可用性,他们需要质押zkSync Token,如果发生了数据可用性故障,那么质押的资金将被罚没。
三者都提供了称为Volition的选项:用户按需自由选择链上或链下数据可用性,根据具体的使用场景,在安全性和成本之间自行取舍。
提出上述方案基于这样的想法:既然普通运营商的信誉度不够高,那么就引入更权威的委员会来提高信誉度。
一个小型委员会的安全程度足够高吗?以太坊社区早在两年前就提出了Validium的勒索攻击问题:如果窃取了足够的委员会成员的私钥,使得链下数据可用性不可用,那么可以威胁用户——只有他们支付足够的赎金才能从Layer2提款。据Ronin Bridge和Harmony Horizon Bridge被盗的前车之鉴,我们无法忽略这样的可能性。
既然链下的数据可用性委员会并非足够安全,那么如果引入区块链作为信任主体来保证链下数据可用性呢?
如果把前述的DAC理解为联盟链,那么Polygon Avail和Celestia所做的就是使数据可用性层更加去中心化——相当于提供了「DA-Specific」的公链,拥有一系列的验证节点、区块生产者和共识机制,以此提升信任级别。
除了安全性的提升之外,如果数据可用性层本身就是一条链,那么它其实可以不局限于为某个Rollup、或者某个链提供数据可用性,而是作为通用化的解决方案。
我们以Celestia在以太坊Rollup上的应用Quantum Gravity Bridge为例进行解释。以太坊主链上的L2 Contract像往常一样验证有效性证明或欺诈证明,区别在于数据可用性由Celestia提供。Celestia链上没有智能合约、不对数据进行计算,只确保数据可用。
L2 Operator把交易数据发布到Celestia主链,由Celestia的验证人对DA Attestation的Merkle Root进行签名,并发送给以太坊主链上的DA Bridge Contract进行验证并存储。
这样实际上用DA Attestation的Merkle Root代替证明了所有的数据可用性,以太坊主链上的DA Bridge Contract只需要验证并存储这个Merkle Root,开销得到了极大的降低。
(注:其他数据可用性方案还有Adamantium和EigenLayr。Adamantium方案中的用户可以选择托管自己的链下数据,在每次状态转换后都签名确认自己的链下数据可用,否则资金将被自动发回主链来确保安全;或者用户可以自由选择数据提供商。EigenLayr是偏向学术的方案,提出了Coded Merkle Tree和数据可用性预言机ACeD。这里暂不展开讨论)
在逐一讨论上述方案后,我们从安全性/去中心化程度、Gas花费的角度来做一个横向比较。注意,该坐标图仅代表笔者的个人理解,作为模糊的大致划分而非定量比较。
左下角的Pure Validium安全性/去中心化程度和Gas花费都是最低的。
中间部分是StarkEx和Arbitrum Nova的DAC方案、zkPorter的Guardians验证者集方案,以及通用化的Celestia和Polygon Avail方案。笔者认为采用zkPorter采用Guardians作为验证者集,对比DAC来说安全性/去中心化程度稍高;而DA-Specific区块链的方案对比一组验证者集又要稍高。与此同时Gas花费也相应增加。当然这只是极粗略的比较。
右上角的方框内是链上数据可用性的方案,有着最高的安全性/去中心化程度和Gas花费。从方框内部来看,由于这三种方案的数据可用性都由以太坊主链提供,故它们具有等同的安全性/去中心化程度。纯Rollup方案对比单体化的以太坊来说显然Gas花费更低,而在引入Proto-Danksharding和Danksharding之后,数据可用性的成本将进一步得到降低。
注:本文讨论的「数据可用性」语境大多在以太坊之下,需要注意Celestia和Polygon Avail是通用化的方案,并不限于以太坊本身。
最后我们在表格中对上述方案做个总结。
在讨论完上述数据可用性问题之后,我们发现所有方案本质上是在三难困境的相互制约下做权衡取舍,而方案之间的区别在于权衡的「细粒度」不同。
从用户角度考虑,协议提供同时链上和链下数据可用性的选项是合理的。因为在不同的应用场景之下、或者不同的用户群体之间,用户对安全性和成本的敏感程度亦各不相同。
上文更多讨论了数据可用性层对以太坊和Rollup的支持。在跨链通信上,Polkadot的中继链为其他平行链提供了数据可用性的原生安全保证;而Cosmos IBC依赖于轻客户端模型,故确保轻客户端能够验证源链和目标链的数据可用性至关重要。
模块化的好处在于可插拔和灵活性,能够按需为协议做适配:例如卸下以太坊的数据可用性包袱,同时确保安全和信任级别;或是在多链生态下提升轻客户端通信模型的安全级别,降低信任假设。不仅限于以太坊,数据可用性还可以在多链生态、甚至未来更多的应用场景下发挥作用。
我们认为:未来的3至5年内,区块链的架构必然会由单体化向模块化演变,各层呈现低耦合状态。未来可能出现Rollup-as-a-Service(RaaS)、Data Availability-as-a-Service(DAaaS)等许多模块化组件的提供商,实现区块链体系结构的可组合性乐高。模块化区块链是支撑下一个周期的重要叙事之一。
其中,执行层的估值巨兽(即Rollup)已经「四分天下」,后来者寥寥;共识层(即各个Layer1)逐鹿中原,在Aptos和Sui等公链开始崭露头角后,公链竞争格局虽未尘埃落定,但其叙事已是新瓶装旧酒,难以寻找合理的投资机会。
而数据可用性层的价值仍然有待被发掘。
https://twitter.com/ptrwtts/status/1509869606906650626
https://twitter.com/0xAlec/status/1545176941002575872
https://github.com/ethereum/research/wiki/A-note-on-data-availability-and-erasure-coding
https://vitalik.ca/general/2021/04/07/sharding.html
https://coinmarketcap.com/alexandria/article/what-is-data-availability
https://dankradfeist.de/ethereum/2019/12/20/data-availability-checks.html
https://vitalik.ca/general/2021/04/07/sharding.html
https://www.parity.io/blog/what-is-a-light-client/
https://ethereum.org/en/developers/docs/scaling/validium/
https://forum.celestia.org/t/ethereum-rollup-call-data-pricing-analysis/141
https://ethresear.ch/t/adamantium-power-users/9600
https://notes.ethereum.org/DD7GyItYQ02d0ax_X-UbWg?view
https://blog.polygon.technology/the-data-availability-problem/
https://blog.celestia.org/ethereum-off-chain-data-availability-landscape/