用简单的推理解释 Plasma 为何对智能合约不友好,以及 Redstone 为何不是 Plasma

作者:Faust,极客 Web3

封面:Photo by Google DeepMind on Unsplash

近期,一个叫 Redstone 的项目成为了热点。这个由 Lattice 团队推出的链游专项 Layer2 设施,于 11 月 15 日正式发布,目前已上线测试网。有趣的是,Lattice 团队称 “Redstone 是受到 Plasma 启发的 Alt-DA 链”

就在 Redstone 发布的前一天,Vitalik 刚刚发表了文章 “Exit games for EVM validiums: the return of Plasma”,文中简单回顾了本已消失在以太坊生态的技术方案 “Plasma”,并指出可以引入有效性证明(与 ZK Proof 混淆),来解决 Plasma 的问题。

对此,有不少朋友认为,Vitalik 发表这篇文章,是为了给 Redstone 站台,甚至在极客 Web3 社群内也有人说,Vitalik 搞不好投资了 Redstone。再加上此前传的沸沸扬扬的 “以太坊 Layer2 定义之争”,一时间人们普遍认为,接下来会引发 “Plasma 的复兴”,而 Celestia 等以太坊生态外的 DA 方案可能因此被抑制,因为 Plasma 没有对 DA 的严格要求。

但据本文作者考证,Redstone 并不符合 Plasma 方案的大致框架,其自称 “受到 Plasma 启发” 反而有蹭 Vitalik 文章热点的可能性,而不是 Vitalik 真要为 Redstone 站台。此外,Redstone 的 DA 挑战方案与 Layer2 项目 Metis 在 2022 年 4 月推出的方案颇有相似之处,只不过两者在更新 Stateroot——发布 DA 数据这两个步骤上的先后次序不同。

所以,真实的情况是,大家可能对 Redstone 产生了 “过度解读”。下文中将通过一些简单的推理来为读者解释 Plasma 的原理及其为何对智能合约及 Defi 不友好,以及 Redstone 到底是什么东西。

Plasma:遇到了数据扣留攻击就要紧急提款

Plasma 的历史可以追溯到 2017 年以太坊 IC0 热潮时期,彼时以太坊用户的交易需求呈爆炸式增长,而 TPS 低下的 ETH 不堪重负。在这样的关头,Plasma 最早的理论版本发布了,文中提出了一种二层扩容方案,可以处理 “世界上几乎所有的金融场景”。

简单来说,Plasma 是一种只把 Layer2 的区块头/Merkle Root 发布到 Layer1 上的扩容方案,区块头/Merkle Root 之外的那部分数据(DA 数据)只在链下发布。如果 Plasma 的排序器/Operator 在 L1 上发布的 Merkle Root 关联了一笔无效交易(数字签名错误等场景),相关用户可以提交欺诈证明,证明排序器提交的 Root 关联着一笔无效交易。

但问题在于,要发布欺诈证明必须保证 DA 数据不被扣留,但 Plasma 对 DA 层没有严格要求,不能保证用户或 L2 节点可以接收到数据。如果排序器在某个时间点发动数据扣留攻击(也被称作数据可用性问题),只发布新的区块头/Merkle root,却不发布对应的区块体,让人无法验证区块头/root 是否有效,用户就只能默认排序器 “无药可救”,通过名为 “Exit Game” 的紧急退出机制,把资产从 Layer2 撤到 Layer1 上。

这一步操作需要用户提交 Merkle Proof,证明自己在 L2 上的确有相应数额的资产,我们可以将此称为 “资产证明”。有意思的地方在于,Plasma 的 Exit Game 和 ZK Rollup 的逃生舱模式并不一样,ZK Rollup 用户必须提交对应最近一个有效 Stateroot 的 Merkle Proof,而 Plasma 用户却可以提交很久前的 Merkle Root 对应的 Proof。

为什么设计成这样?只是因为,ZK Rollup 提交的 Stateroot,会被 Layer1 上的合约立刻投入判断(判断有效性证明是否有效)。如果这个刚提交不久的 Stateroot 是有效并合法的,那么用户就应当提交对应合法 Stateroot 的 Merkle Proof 来充当资产证明。

但 Plasma 的排序器提交的 Merkle Root,Layer1 合约无法判断是否有效,只能让 L2 节点主动发起挑战来排除无效 Root,所以会有挑战机制,这使得 Plasma 和 Zk Rollup 的运作原理迥然不同。

假设排序器刚发布了一个无效的 Merkle Root 101,同时发动数据扣留攻击,让 L2 节点无法证明 101 号 root 是无效的,此时用户可以提交对应 100 号 root 或更早以前 root 的 merkle Proof,把自己的资产提走。

当然这里有个问题需要解决,就是某个用户可能提交对应 30 号 root 或更早期 root 的资产证明,请求把资产撤到 Layer1,但这个人在 30 号 root 发布后,资产状况可能有变化。换句话说,他提交的是过时的资产证明,这就是典型的双花攻击/双重支付。

对此,Plasma 允许任何人针对上述情况提交欺诈证明,指出某个发起提款声明的用户提交的 “资产证明” 是过时的。通过引入这种 “任何人都可以挑战别人的提款声明”,Plasma 不需要像 ZK Rollup 那样处理紧急提款请求。

但还是有一种可能,就是排序器先把其他人的资产划转到自己的 L2 账户下,然后再发动数据扣留攻击,让外人无法对自己的作弊行为发起挑战。之后,排序器自己的账户发起紧急提款,提交 “资产证明” 宣称自己的确在 L2 上拥有这些资产。

显然,这种时候因为缺失了一段历史记录,人们无法直接证明排序器的资产来源有问题。那么这种情况下该怎么办?Plasma 的早期版本比如 Plasma MVP 考虑到了这点,他们提出了 “提款优先级”。如果一个人提交的资产证明对应的 root 更早,它的提款请求就会被优先处理。

假如排序器是在提交第 101 号 root 时进行上面说的作弊行为并发起提款,那么用户可以提交对应 99 号或更早 root 的资产证明来紧急提款。显然,排序器只要无法篡改已经发布到 Layer1 上的历史记录,用户就有办法逃出生天。

但 Plasma 还是有一个致命 bug:只要排序器发动数据扣留,人们就要靠紧急提款(又称 Exit Game)来保证资产安全,如果短时间内大量用户集体提款,Layer1 很容易处理不过来;

更严重的是,像 Defi 合约上记录的资产,该由谁来提取到 Layer1?假设有人往 DEX 的 LP 池子充了 100 个 ETH,之后 Plasma 的排序器故障或作恶了,人们需要紧急提款,这时候用户的 100 个 ETH 都还为 DEX 合约所控制,请问这个时候这些资产该由谁提到 Layer1 上?

最好的办法其实是先让用户从 DEX 池子里赎回自己的资产,再由用户自己去把钱提到 L1 上,但问题是 Plasma 排序器已经故障/作恶了,用户没法执行赎回资产的操作。可如果我们允许 DEX 合约的 owner 去把合约控制的资产提到 L1,显然会赋予合约 owner 以资产所有权,他可以随时把这些资产提到 L1 上并跑路,这岂不是太可怕了?

所以到最后,该怎么处置这些由 Defi 合约所支配的 “公共财产”,是一个巨大的雷。如果走社会共识,在 Layer1 上重建一个映射了 Layer2 上 defi 合约的镜像合约,似乎也可以,但这会引入相当巨大的麻烦,增加机会成本,由哪些人来投票决定镜像合约的处置方式,也会是个大问题。这其实涉及到公权力分配的难题,此前响马曾在访谈《高性能公链难出新事,智能合约涉及权力分配》中谈到过这点。

当然,Vitalik 在最近的文章 “Exit games for EVM validiums: the return of Plasma” 中也指出了这一点,并强调这是 Plasma 对智能合约不友好的因素之一。过往的知名 Plasma 变体如 Plasma MVP 和 Plasma Cash 等,采用了 UTXO 或类似的模型来替代以太坊的账户地址模型,并且不支持智能合约,这样可以避免上面谈及的 “资产所有权分配” 问题,每个 UTXO 的所有权固然归属于用户自己,但 UTXO 本身也有诸多缺陷,且对智能合约不友好。所以 Plasma 方案最适合简单的支付或订单簿式交易所。

到后来,随着 ZK Rollup 的走红,Plasma 本身也退出了历史舞台,因为 Rollup 不存在 Plasma 的数据扣留问题。假如 ZK Rollup 的排序器发动数据扣留攻击,只往 ETH 链上提交 Stateroot 但没有 DA 数据,这样的 root 会判定为无效,直接被 L1 上的 Verifier 合约拒绝。所以,ZK Rollup 的合法 Stateroot 对应的 DA 数据,在 ETH 链上必定可查。这样就不存在 “只发布区块头或 merkle root,却不发布对应的区块体”,也就是可以解决数据可用性问题/数据扣留攻击。

同时,Rollup 的过往 DA 数据在以太坊上可查,任何人都可以通过 ETH 链上的历史记录来启动 Layer2 节点,这将去中心化乃至无需许可的排序器方案难度大幅降低。相比之下,Plasma 对 DA 没有严格要求,实现去中心化排序器的难度也更大(要实现可替换的去中心化排序器,首先要保证所有的 L2 节点都认可相同的 block,这就对 DA 实现方式提出了要求)。

此外,如果 ZK Rollup 的排序器尝试把无效交易包含进 Layer2 区块,也无法成功,这是由有效性证明的原理来保障的。

归根结底,ZK Rollup 排序器的作恶空间与 Plasma 相比要狭小许多——它最多能让 Stateroot 的更新停滞,在 UX 层面相当于停机,或者拒绝某些用户的请求,俗称交易审查。同时,Rollup 方案中如果排序器故障了,其他节点要替代它也会更容易。理想状态下的 Rollup,可以将 Plasma 中 Exit game 模式的触发概率降至 0(ZK Rollup 中叫逃生舱)。

(L2BEAT 上的 Proposer Failure 一栏,展示了各个 L2 方案如何应对排序器故障问题,Self Propose 往往指其他节点可以替代当前处于停机状态的排序器)

时至今日,以太坊生态内几乎没有团队还在坚持 Plasma 路线了,几乎所有的 Plasma 项目都胎死腹中。

(Vitalik 解释为何 ZK Rollup 比 Plasma 更优越,其中有提到无需许可的排序器运行和 DA 问题)

Redstone 是个啥:它不是 Plasma,而是 Optimium 的变体

上文我们简单阐述了 Plasma 以及其被 Rollup 替代的简要因素,而至于 Redstone,想必大家也看到了它和 Plasma 的不同:Redstone 可以解决数据扣留攻击问题,比如它不会立刻发布新的 stateroot,而是先在 ETH 链下发布原始的 DA 数据,然后把 DA 数据的 datahash 作为一个关联的凭证 commitment,发布到 ETH 链上,称自己在链下已发布这段 datahash 所对应的完整数据。

(Redstone 官方对自己的防止数据扣留攻击方案的解释)

任何人都可以发起挑战,称 Redstone 的排序器没有在链下发布这段 datahash 对应的原始数据。此时,排序器需要在链上发布 datahash 对应的数据,以应对质疑者的挑战。

如果排序器被挑战后,没有及时在 ETH 链上发布数据,则它之前发布的 datahash/commitment 会被视为无效。如果排序器及时响应了挑战者的请求,那么挑战者就可以及时获取到 datahash 对应的原始 DA 数据。最终,所有 L2 节点基本都可以获取到所需的 DA 数据,以解决数据扣留攻击问题。当然,挑战者本身需要先支付一笔费用,这笔费用约等于排序器在 ETH 链上发布原始 DA 数据的成本,这个举措是为了防止恶意挑战者无成本的挑战排序器,致使后者蒙受损失。

最后,当针对 datahash 的挑战期结束后,排序器将发布对应的 stateroot,也就是执行 datahash 对应的 DA 数据中 包含的交易序列后,得到的 root。此时 L2 节点可以使用欺诈证明系统来挑战那些无效的 root。如果此前某个 datahash 在被挑战后,排序器没有及时发布对应的原始 DA 数据,则排序器即便后面发布了这个 datahash 对应的 stateroot,也会被默认为无效。

由于 Redstone 是先发布 DA 数据,之后才发布对应的有效 Stateroot,直接解决了数据扣留攻击问题(排序器只发布 root 而不发布 DA 数据)。

显然这种模式和普通的 Optimium(不用以太坊实现 DA 的 OP Rollup,比如 Arbitrum Nova)不同,Optimium 一般依赖于链下 DAC 委员会确保数据可用性,DAC 每隔一段时间向链上提交一个多签 txn,Layer1 上的 Rollup 合约收到多签 txn 后,会默认排序器已在链下发布最新一批的 DA 数据。

(图源:L2beat)

而像 Metis 和 Arbitrum Nova 等是同时提交 Stateroot 和 datahash,如果有人认为排序器扣留了 DA 数据,便会尝试发起挑战,排序器会把 datahash 对应的 DA 数据发到链上。

所以,Redstone 和 Metis 的关键区别在这一步:前者是先发布 datahash,等 DA 挑战期结束,才发布 stateroot;Metis 却是同时发布 stateroot 和 datahash,如果有人发起挑战,则把 DA 数据上链。显然 Redstone 的方案更安全些,因为 Metis 的方案下,如果排序器一直不响应挑战者对 DA 数据的请求,则数据扣留攻击问题无法快速解决,只能依靠紧急提款和社会共识,或是让其他节点接替当前的排序器;

但换做 Redstone,如果排序器搞数据扣留,则其发布的 stateroot 直接被认作无效,所以 stateroot 和 DA 数据是绑定关系,这使得 Redstone 可以获得和 Rollup 较接近的 DA 保证,本质上是比 Arbitrum Nova 和 Metis 更优越的 Optimium 变体

免责声明:作为区块链信息平台,本站所发布文章仅代表作者及嘉宾个人观点,与 Web3Caff 立场无关。 文章内的信息仅供参考,均不构成任何投资建议及要约,并请您遵守所在国家或地区的相关法律法规。