原文标题:《纠正 Vitalik 关于 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 系统更基础、更关键,今天这篇文章也将就这个观点做出进一步解释。
其实,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 后的历史数据检索问题。
在这里我们再度概括下:逃生舱就是让你通过 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 安全模型与风险指标》
说完了逃生舱与 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 生态画上浓墨重彩的一笔。
原文链接
欢迎加入律动 BlockBeats 官方社群:
Telegram 订阅群:https://t.me/theblockbeats
Telegram 交流群:https://t.me/BlockBeats_App
Twitter 官方账号:https://twitter.com/BlockBeatsAsia