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 节点知晓:有人发起了强制提款请求。
如果强制提款请求被长时间无视,用户就可以主动触发逃生舱模式(路印协议默认这个等待期为 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 生态画上浓墨重彩的一笔。