为 EVM validium 设计的退出游戏:Plasma 回归

为EVMvalidiums设计的退出游戏:Plasma回归

原文作者: Vitalik 原文: https://vitalik.eth.limo/general/2023/11/14/neoplasma.html 译者: dwong 来自 DeCert.me

特别感谢 Karl Floersch、Georgios Konstantopoulos 和 Martin Koppelmann 的反馈、审查和讨论。

Plasma 是一类区块链扩展解决方案,允许除存款、提款和默克尔根之外的所有数据和计算都保存在链下。这为我们带来了非常大的可扩展性收益,而这些收益并不受链上数据可用性的瓶颈限制。Plasma 最早是在2017 年提出的,并在 2018 年看到了许多迭代版本,其中最值得注意的是 Minimal Viable PlasmaPlasma CashPlasma CashflowPlasma Prime。不幸的是,由于(i)大量客户端数据存储成本和(ii)Plasma 的基本限制使其难以推广到除支付以外的其他领域,Plasma 在很大程度上已经被 Rollup 所取代。

有效性证明的出现(又称 ZK-SNARKs) 给我们提供了重新考虑这一决定的理由。Plasma 在支付方面的主要挑战,即客户端数据存储,可以通过有效性证明有效地解决。此外,有效性证明提供了一系列工具,使我们能够构建一个运行 EVM 的类似 Plasma 的链。然而,Plasma 的安全性保证并不会覆盖所有用户,因为使 Plasma 式退出游戏无法推广到许多复杂应用程序的根本原因仍然存在。然而,在实践中,资产的非常大比例仍然可以得到安全保障。

本文描述了如何将 Plasma 的思想扩展到这样的情况。

概述:Plasma 的工作原理

最容易理解的 Plasma 版本是 Plasma Cash。Plasma Cash 通过将每个单独的币视为一个独立的 NFT,并跟踪每个币的独立历史来运作。Plasma 链有一个操作者(operator),负责创建并定期发布区块。每个区块中的交易都存储在一个稀疏的默克尔树中:如果一个交易将币 k 的所有权转移,它将出现在树的位置 k。当 Plasma 链操作者创建一个新区块时,他们会将默克尔树的根发布到链上,并直接向每个用户发送对应于他们拥有的币的默克尔分支。

假设这是 Plasma Cash 链中的最后三个交易树。然后,假设所有先前的树都是有效的,我们知道 Eve 目前拥有币 1,David 拥有币 4,George 拥有币 6。

任何 Plasma 系统中的主要风险都在于操作者的不当行为。这可以通过两种方式发生:

  1. 发布一个无效区块(例如,操作者包括一笔交易,即使 Fred 在那时并不拥有币 1,也将币 1 从 Fred 发送给 Hermione)
  2. 发布一个不可用区块(例如,操作者未向 Bob 发送他的其中一个区块的默克尔分支,导致他无法向其他人证明他的币仍然有效且未花费)

如果操作者以与用户资产相关的方式不当行事,用户有责任立即退出(特别是在 7 天内)。当用户(“退出者”)退出时,他们提供一个默克尔分支,证明了将该币从先前所有者转移到他们的交易。这启动了一个为期 7 天的挑战期,在此期间,其他人可以通过提供以下三种情况之一的默克尔证明来挑战该退出:

  1. 非最新所有者:退出者签署的后续交易,将退出者的币转移到其他人
  2. 双重花费:将币从先前所有者转移到其他人的交易,该交易在将币转移到退出者的交易之前已被包含
  3. 无效历史:在此之前(在过去的 7 天内)转移币的交易没有相应的支出。退出者可以通过提供相应的支出来回应;如果退出者没有这样做,退出失败。

根据这些规则,任何拥有币 k 的人都需要查看过去一周内所有历史树中位置 k 的所有默克尔分支,以确保他们实际拥有币 k 并且可以退出。他们需要存储包含资产转移的所有分支,以便他们可以回应挑战并安全地退出他们的币。

推广到可替代代币

上述设计适用于 NFT。然而,比 NFT 更常见的是可替代代币,如 ETH 和 USDC。将 Plasma Cash 应用于可替代代币的一种方法是简单地将每个币的小面额(例如 0.01 ETH)视为一个独立的 NFT。不幸的是,如果这样做,退出的 gas 成本将会太高。

一种解决方案是通过将许多相邻的币视为单个单位来进行优化,这些币可以一次性转移或退出。有两种方法可以做到这一点:

  1. 几乎原样使用 Plasma Cash,但使用复杂的算法快速计算非常多对象的默克尔树,如果许多相邻对象相同,这其实并不难;你可以在这里看到一个 Python 实现。
  2. 使用 Plasma Cashflow,它简单地将许多相邻的币表示为单个对象。

然而,这两种方法都会遇到碎片化的问题:如果你从数百人那里每人收到 0.001 ETH,他们购买咖啡,你将在树中的许多位置拥有 0.001 ETH,因此实际退出这些 ETH 仍然需要提交许多独立的退出,使得 gas 费用高得令人望而却步。已经开发了碎片化协议,但实施起来很棘手。

或者,我们可以重新设计系统,以考虑更传统的"未花费交易输出"(UTXO)模型。当你退出一个币时,你需要提供这些币的最近一周的历史,任何人都可以通过证明这些历史币是已经退出来的挑战你的退出。

右下角的 0.2 ETH UTXO 的提取可以通过展示其历史中的任何 UTXO 的提取来取消,如绿色所示。特别要注意的是,左中和左下的 UTXO 是祖先,但左上的 UTXO 不是。这种方法类似于 2013 年左右的染色币协议中的基于顺序的着色思想。

有各种各样的技术可以做到这一点。在所有情况下,目标都是跟踪不同历史时刻下的“相同币”的概念,以防止“相同币”被提取两次。

推广到 EVM 的挑战

不幸的是,将 Plasma 推广到 EVM 之外要困难得多。一个关键挑战是 EVM 中许多状态对象并没有明确的“所有者”。Plasma 的安全性取决于每个对象都有一个所有者,该所有者有责任监视并确保链的数据可用,并在任何问题发生时退出该对象。然而,许多以太坊应用程序并不是这样工作的。例如,Uniswap 流动性池并没有单一所有者。

另一个挑战是 EVM 并不试图限制依赖关系。在第 N 块中,帐户 A 中持有的 ETH 可能来自第 N-1 块的任何地方。为了退出一致的状态,EVM Plasma 链需要一个退出游戏,其中,在极端情况下,希望使用第 N 块的信息退出的人可能需要支付费用将整个第 N 块状态发布到链上:这将是数百万美元的 gas 成本。基于 UTXO 的 Plasma 方案没有这个问题:每个用户都可以从他们拥有数据的最新块退出他们的资产。

第三个挑战是 EVM 中无限的依赖关系使得更难以对证明有效性具有对应的激励。任何状态的有效性取决于其他所有事物,因此证明任何一件事都需要证明所有事物。在这种情况下解决失败通常无法做到激励兼容,因为数据可用性问题。一个特别令人讨厌的问题是,我们失去了在基于 UTXO 的系统中存在的保证,即对象的状态不能在没有所有者同意的情况下发生变化。这个保证非常有用,因为它意味着所有者始终知道他们资产的最新可证明状态,并简化了退出游戏。没有它,创建退出游戏变得更加困难。

有效性证明如何缓解许多这些问题

有效性证明对改进 Plasma 链设计的最基本作用是证明每个 Plasma 区块的有效性。这极大地简化了设计空间:这意味着我们唯一需要担心的是操作者的攻击是不可用区块,而不是无效区块。例如,在 Plasma Cash 中,它消除了对历史挑战的需要。这将用户需要下载的状态从过去一周内每个区块的一个分支减少到每个资产的一个分支。

此外,在最近状态的提取(在操作者诚实的常见情况下,所有提取都将来自最近状态)不受非最新所有者挑战的限制,因此在经过有效性证明的 Plasma 链中,这样的提取根本不会受到任何挑战。这意味着,在正常情况下,提取可以是瞬时的!

扩展到 EVM:并行 UTXO 图

在 EVM 情况下,有效性证明还可以让我们做一些聪明的事情:它们可以用于实现 ETH 和 ERC20 代币的并行 UTXO 图,并通过 SNARK 证明 UTXO 图和 EVM 状态之间的等价性。一旦你有了这个,你可以在 UTXO 图上实现一个“常规”的 Plasma 系统。

这让我们规避了 EVM 的许多复杂性。例如,在基于账户的系统中,某人可以在没有你的同意的情况下编辑你的账户(通过发送币并因此增加其余额),这并不重要,因为 Plasma 构造不是在 EVM 状态本身上,而是在与 EVM 平行的 UTXO 状态上,你收到的任何币都将是独立的对象。

扩展到 EVM:总状态退出

已经有人提出了更简单的方案来创建一个“Plasma EVM”,例如 Plasma Free,以及在此之前的2019 年的这篇文章。在这些方案中,任何人都可以在 L1 上发送消息,强制操作者要么包括一个交易,要么提供状态的特定分支。如果操作者未能这样做,链将开始回滚区块。一旦有人发布了整个状态的完整副本,或者至少所有用户标记为潜在丢失的所有数据,链就会停止回滚。进行提取可能需要发布悬赏,这将支付该用户发布如此大量数据的 gas 成本所对应的部分。

这样的方案的弱点在于它们不允许在正常情况下进行瞬时提取,因为总是有可能链需要回滚最新状态。

EVM Plasma 方案的局限性

这样的方案非常强大,但无法为所有用户提供完全的安全保障。它们最明显崩溃的情况是某个特定状态对象没有明确的经济“所有者”的情况。

考虑一个 CDP(抵押债务头寸)的情况,这是一个智能合约,用户的代币被锁定,只有在用户偿还债务后才能释放。假设用户在一个 CDP 中锁定了 1 ETH(本文撰写时约为 2000 美元),并欠下 1000 DAI 的债务。现在,Plasma 链停止发布区块,用户拒绝退出。用户可以选择永远不退出。此时,用户拥有一个“自由选择”:如果 ETH 的价格跌破 1000 美元,他们可以放弃 CDP,如果 ETH 的价格保持在 1000 美元以上,最终他们可以退出。一般来说,这样的恶意用户可以从中获利。

另一个例子是隐私系统,例如 Tornado Cash 或 Privacy Pools。考虑一个有五个存款人的隐私系统:

隐私系统中的 ZK-SNARKs 隐藏了进入系统的代币所有者和离开系统的代币所有者之间的联系。

假设只有橙色已经提取了资金,此时 Plasma 链操作员停止发布数据。假设我们使用 UTXO 图方法,并采用先进先出规则,因此每个代币都与其下方的代币匹配。然后,橙色可以提取他们的预混合和后混合代币,系统会将其视为两个独立的代币。如果蓝色尝试提取他们的预混合代币,橙色的更新状态将会覆盖它;与此同时,蓝色将无法提取他们的后混合代币。

如果允许其他四个存款人提取隐私合约本身(这将覆盖存款),然后在 L1 上取出代币,这个问题是可以解决的。然而,实际实现这样的机制需要隐私系统开发人员额外的努力。

还有其他解决隐私问题的方法,例如 Intmax 方法,它涉及在链上以 Rollup 方式放置几个字节,以及一个类似 Plasma 的操作员在个体用户之间传递信息。

Uniswap LP 头寸也存在类似的问题:如果你在 Uniswap 头寸中用 USDC 交易 ETH,你可以尝试提取交易前的 USDC 和交易后的 ETH。如果你与 Plasma 链操作员勾结,流动性提供者和其他用户将无法访问交易后的状态,因此他们将无法提取他们的交易后的 USDC。需要特殊逻辑来防止这种情况发生。

结论

2023 年,Plasma 是一个被低估的设计空间。Rollup 仍然是金标准,并且具有无法匹敌的安全性能。特别是从开发者体验的角度来看:没有任何东西可以与应用程序开发者无需考虑其应用程序内的所有权图和激励流程的简单性相匹敌。

然而,Plasma 让我们完全规避了数据可用性问题,大大降低了交易费用。对于本来可能是 validiums 的链来说,Plasma 可以是一个重大的安全升级。ZK-EVM 终于在今年成为现实,这使得重新探索这一设计空间成为一个绝佳的机会,并提出更加有效的构建来简化开发者体验并保护用户资金。

点赞 2
收藏 1
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

1 条评论

请先 登录 后评论
Vitalik Buterin
Vitalik Buterin
https://vitalik.ca/