纠正V神关于DA问题与抗审查提款的不严谨言论
作者:Faust,极客web3
2024年1月16日,在一条由以太坊Layer2项目Taiko创始人DanielWang发起,与AA钱包Soul Wallet创始人曾嘉俊互动的推文下,Vitalik说:“Rollup的关键在于无条件的安全保障:即使你被所有人针对,你依然能将资产取走。如果DA依赖于外部系统(以太坊之外),就无法做到这一点。”
由于Vitalik在这条推文的后半段谈到了自己对Validium的看法(Validium是指不用以太坊实现DA数据发布的ZK二层),所以得到了很多人的关注(此前坊间盛传,以太坊基金会认为Layer2=Rollup)。
(需要强调:以太坊社区谈论的DA概念,指的是你能否获取到Layer2新产生的数据,不是说你能否检索到很久前的历史数据。如果不在以太坊链上发布新数据,Layer2节点可能无法顺利解析出最新的L2区块)
但“以太坊Layer2定义之争”及“DA War”早已被无数人听闻,本文不打算对此类话题作出任何探讨,旨在将更多精力聚焦在Vitalik发言的前半段,也就是本文开头涉及的那番话。
Vitalik在此表明,Rollup能够实现去信任化的抗审查提款,即便所有的Layer2节点不配合你,你也能够把自己的资产撤离Layer2;而且,他指出,只有rollup能实现这种“无条件的安全提款”,而依赖于其他DA数据发布方式的Layer2,都不能这么做。
但实际上,Vitalik的这番话并不严谨。
首先,只有Layer1桥接到Layer2的资产才可以跨回到ETH链上,单纯的Layer2原生资产无法跨到Layer1(除非Layer2原生资产在Layer1上部署了桥接资产合约)。
如果像Vitalik说的那样,“所有人都针对你”,你最多可以把L1-L2桥接资产提走,但无法把自己的“Layer2原生Token”提走,此时无论是走普通的withdraw,还是走forced withdraw,或是走Escape Hatch,都没用。
其次,“无需条件的安全提款”不是非要依赖于DA系统。Rollup之前的早期Layer2方案、在以太坊链下实现DA数据发布的Plasma,DA系统故障时(就是指数据扣留发生,除了排序器/委员会之外,其他人无法收到新的交易数据/状态转换信息),一样允许用户通过历史数据来提交资产证明,安全逃离Layer2。
换言之,Plasma的安全提款对DA系统没有依赖,抗审查提款也不是非要对DA系统有依赖(但要保证历史数据可获取);况且,这番话是以太坊基金会的Dankrad(Danksharding提出者)亲口说的,同时也是放之四海皆公理的。
参考极客Web3过往文章:《数据扣留与欺诈证明:Plasma不支持智能合约的原因》
其次,抛开Celestia及Blobstream不说,数据扣留/DA故障问题,就算不用ETH作为DA层,也可以解决。单说Arbitrum团队与Redstone团队正在实现的“数据可用性挑战”,允许排序器只在链上发布一个DA Commitment(其实就是datahash),声明已经在链下发布数据。如果有人无法在链下获取到新产生的数据,则可以针对链上的DA Commitment发起挑战,要求排序器将数据披露到链上。
这种机制设计很简洁,而且不需要依赖于Celestia、Avail或EigenDA等第三方DA,只需要Layer2项目方自己设置链下DAC节点即可,堪称Celestia杀手。
下文中,作者打算对Vitalik口中的“无需条件的安全提款”和他所没有提及的“数据可用性挑战”进行解读,尝试告诉大家:为何Celestia和Avail、EigenDA等第三方DA项目,不是DA offchain且追求安全性的Layer2的必选项?
此外,我们之前曾在阐述“比特币Layer2风险评估指标”的文章中,谈到抗审查提款比DA系统更基础、更关键,今天这篇文章也将就这个观点做出进一步解释。
逃生舱:Viatlik口中的“无需条件的安全提款”
其实,Vitalik的这番话不难推敲,是在谈论ZK Rollup的逃生舱。逃生舱又名Escape Hatch,是一种在Layer1上直接触发的提款模式。该模式一旦被触发,Rollup合约将进入冻结状态,拒收Sequencer提交的新数据,并允许任何人出示Merkle Proof,证明自己在Layer2上的资产余额,将属于自己的资产从Layer2官方桥存款地址中转走。
更进一步说,逃生舱模式是在用户交易遭到Layer2排序器长时间的拒绝后,可以由当事人在Layer1上手动触发的“去信任化提款机制”。
不过,在激活逃生舱模式前,被排序器拒绝的用户,要先调用Layer1上Rollup合约中的强制提款函数,发起强制提款请求,并抛出一个事件让Layer2节点知晓:有人发起了强制提款请求。
(由于Layer2节点都会运行以太坊geth客户端,会接收到以太坊区块,所以能够监听到强制提款事件的触发)
如果强制提款请求被长时间无视,用户就可以主动触发逃生舱模式(路印协议默认这个等待期为15天,StarkEx方案是7天)。然后,其操作流程就如同本文开篇所谈,用户提交对应自己资产的Merkle Proof,证明自己在Layer2的资产状况,然后从Rollup相关合约中把资产提走。
但要构造Merkle Proof,需要先获知完整的L2状态,要找一个L2全节点索要数据。如果Vitalik所说的那种极端情况发生,没有Layer2节点配合你,你可以自己启动一个Layer2全节点,通过以太坊网络,获取L2排序器发布到以太坊上的历史数据,从Layer2创世区块开始一个个同步,直到算出最后的状态,构造出Merkle Proof,就可以通过逃生舱来安全提款。
显然,这时的“抗审查性”,与以太坊/Layer1本身等价。只要有以太坊全节点提供很久前的历史数据给你就行,接近于去信任化。
但EIP-4844后,以太坊全节点会自动丢掉部分历史数据,使得Layer2超18天的历史数据不再被ETH节点全网备份,届时逃生舱提款的抗审查性,将不再像今天这样接近于Trustless。
4844后,我们需要信任,数量较为有限的、存储了全部历史数据的以太坊节点,愿意提供数据给你(Layer2原生的节点往往很少,暂且不考虑进来)。届时,Layer1历史数据可检索/Layer2逃生舱提款的信任假设,将从今天的Trustless或0,变为1/N,即假设N个节点中能有1个为你提供数据。
EthStorage团队似乎致力于将这个N扩大,激励更多节点存储很久前的历史数据。如果1/N的分母足够大,分数还是接近于0,接近于没有引入信任假设。这或许可以适当解决4844后的历史数据检索问题。
逃生舱与DA的关系——Validium的勒索攻击
在这里我们再度概括下:逃生舱就是让你通过Merkle Proof,证明自己的Layer2资产状况,在Layer1上去信任的提款。
而Vitalik之所以提到,提款涉及的资产安全需要有DA作为前提,主要是指Validium方案可以因“数据扣留攻击”而无法提款。(只发布stateroot,不发布对应的交易数据)。
具体原理是:排序器可能扣住交易数据不放,只向以太坊链上发布一个Merkle Root(Stateroot),然后通过有效性证明,设法让新的Stateroot通过验证,成为当前的合法Stateroot。
这时候,大家不知道合法Stateroot对应的完整状态,无法构造出对应的Merkle Proof来发动逃生舱提款。除非排序器愿意释放数据给你,你才能提款,这被Arbitrum的某位技术负责人形象的称为“赎金问题”(我个人更喜欢称之为勒索攻击)。
但DA在链下的Validium,之所以容易出现“勒索攻击”,是因为他自己的机制设计不够完善,如果引入和提款行为相关的挑战机制,或者引入数据可用性挑战,理论上可以解决勒索攻击问题。
By the way,前文曾提到,允许用户通过很久前的历史数据来提款的Plasma,就不会出现Validium这样的“勒索攻击”,而Plasma也是DA在链下的(链下DA+链上验证欺诈证明)。
参考资料:数据扣留与欺诈证明:Plasma不支持智能合约的原因
所以说,抗审查提款/逃生舱并不是非要依赖于DA,一切取决于提款流程的机制设计。Vitalik之所以认为,抗审查提款与DA绑定,是因为他是先入为主的从Validium、智能合约型Rollup等既有方案出发,脑海中已经存在了一种思维定式。
但这不代表天底下所有DA offchain的Layer2都面临和Validium一样的问题,不代表智能合约型Rollup就是一切的终点,创新随时都可能发生(比如后文提到的数据可用性挑战)。
反过来,如果你的Layer2方案从一开始就不考虑有逃生舱、抗审查提款这类设计,你的Layer2就肯定不够去信任/安全。换言之,好的DA和证明系统,是实现抗审查提款的充分条件,但不是必要条件。
所以我们此前的文章中,提到Layer2木桶效应中,抗审查提款是比DA和证明系统更基础的短板,是有理由的。
参考资料:《用木桶理论拆解比特币/以太坊Layer2安全模型与风险指标》
Celestia杀手:Arbitrum和Redstone的数据可用性挑战
说完了逃生舱与DA的关系,我们再来回看DA本身:Layer2也不是非要把DA数据发布到以太坊上,才能避免排序器搞“数据扣留”。
Redstone和Arbitrum、Metis等都在研发“数据可用性挑战”机制,允许排序器只在链上发布DA Commitment(datahash)+Stateroot,声明已经在链下发布状态转换参数(交易数据)。如果有人无法在链下获取到新产生的数据,则可以针对链上的DA Commitment发起挑战,要求排序器将数据披露到链上。
如果排序器被挑战后,没有及时在ETH链上发布数据,则它之前发布的datahash/commitment会被视为无效,关联在一起的stateroot也会无效。显然,这直接解决了数据扣留问题(只发布stateroot,不发布对应的交易数据)。
显而易见,这比起Validium和Optimium这类DA offchain的Layer2,多出了一个“数据可用性挑战”。但这么一个简单的设计,就足以对Celestia和Avail、EigenDA等造成有力竞争。自己设置一个DAC,引入数据可用性挑战,则不需要再依赖于Celestia。
但相对的,数据可用性挑战也有需要解决的经济问题。ZkSync创始人在和Arbitrum技术负责人battle时指出,数据可用性挑战在理论上容易遭到Dos攻击。比如,排序器快速在链上发布数千个DA commitment,然后扣住对应的完整数据不发布。它可以通过这种方式耗尽所有挑战者的资金,然后发布一个无效区块,盗取用户资产。
当然,这种假设过于极端,本质是一个攻守双方的博弈论问题,并且实际上,排序器更容易被恶意挑战者dos攻击,遭到连续挑战后退化为Rollup。围绕着数据可用性挑战的攻守双方之间的博弈情形,其实非常有趣,对应的机制设计也会充分考验Arbitrum和Redstone以及Metis项目方的智慧(这个话题可以单独成文了)。
但无论如何,数据可用性挑战都将为Layer2的DA方案设计带来更多的创新,这种方案也将在比特币Layer2生态画上浓墨重彩的一笔。