V神解读Plasma技术:起源、概念与挑战
时间: 2024-07-01 00:38:05 | 作者: 真空型等离子清洗机
产品介绍
近日,以太坊创始人 Vitalik Buterin 在推特上提到 「Exit games for EVM validiums: the return of Plasma」,这一言论激发了对 Plasma 技术未来角色的广泛讨论,预示着它在提升以太坊网络性能方面可能会发挥重要作用。
早期的状态通道和侧链方案提供了初步的解决思路,但也带来了新的问题。状态通道要求用户频繁在线并锁定资金,限制了资金的流动性;而侧链的安全性依赖于较少的验证节点,可能对资产安全构成威胁。为解决这样一些问题,Plasma应运而生。
Plasma 是一类区块链扩容解决方案,它允许所有数据和计算(存款、提款和默克尔根除外)保持在链下。这为实现不受链上数据可用性限制的巨大可扩展性打开了大门。Plasma 首次在 2017 年被提出,并在 2018 年经历了多次迭代,尤其是最小可行 Plasma、Plasma Cash、Plasma Cashflow 和 Plasma Prime。不幸的是,由于(i)大量的客户端数据存储成本和(ii)Plasma 的基本限制使其难以推广到支付之外的应用,Plasma 已经在很大程度上被 rollups 所取代。
有效性证明(又称 ZK-SNARKs)的出现使我们有理由重新考虑这一决定。使 Plasma 在支付方面发挥作用的最大挑战,客户端数据存储,能够最终靠有效性证明得到一定效果解决。此外,有效性证明提供了一系列工具,使我们也可以创建运行 EVM 的类 Plasma 链。Plasma 的安全保证不会覆盖全用户,因为将 Plasma 风格的退出游戏扩展到许多复杂应用的最终的原因任旧存在。然而,实际上仍旧能保护非常大比例的资产安全。
要理解的最简单的 Plasma 版本是 Plasma Cash。Plasma Cash 通过将每个单独的代币视为一个独立的 NFT,并为每个代币跟踪一个单独的历史来工作。Plasma 链有一个运营者,负责制作并定期发布区块。每个区块中的交易都存储为一个稀疏的默克尔树:如果交易转移了代币 k 的所有权,它就出现在树的 k 位置。当 Plasma 链运营者创建一个新区块时,他们将默克尔树的根发布到链上,并直接将与用户所拥有的代币相对应的默克尔分支发送给每个用户。
假设这些是 Plasma Cash 链中最后三个交易树。那么,假设所有之前的树都是有效的,我们大家都知道 Eve 目前拥有代币 1 ,David 拥有代币 4 ,George 拥有代币 6 。
任何 Plasma 系统中的主要风险都是运营者的不当行为。这可能以两种方式发生:
1. 发布无效区块(例如,运营者包含了一个交易,将代币 1 从 Fred 转给 Hermione,即使 Fred 那时并不拥有该代币);
2. 发布不可用区块(例如,运营者没有将他的默克尔分支之一发送给 Bob,阻止他向其他人证明他的代币仍然有效且未花费)。
如果运营者的行为与用户的资产相关,则用户有责任立即退出(具体来说,在 7 天内)。当用户(「退出者」)退出时,他们提供一个默克尔分支,证明了将该代币从前一个所有者转移给他们的交易的包含。这启动了一个为期 7 天的挑战期,在此期间,其他人能够最终靠提供以下三种之一的默克尔证明来挑战该退出:
1. 非最新所有者:退出者签署的后续交易,将退出者的代币转移给其他人;
2. 双重支付:将代币从前一个所有者转移给其他人的交易,在将代币转移给退出者的交易之前被包含;
3. 无效历史:在过去 7 天内转移代币的交易,没有相应的花费。退出者能够最终靠提供对应的花费来回应;如果他们不这样做,退出就会失败。
根据这些规则,任何拥有代币 k 的人都需要看到过去一周内所有历史树中 k 位置的所有默克尔分支,以确保他们实际上拥有代币 k 并能退出它。他们要存储包含资产转移的所有分支,以便他们能够应对挑战并安全地退出他们的代币。
上述设计适用于非同质化代币(NFT)。然而,比 NFT 更常见的是可替代代币,如 ETH 和 USDC。将 Plasma Cash 应用于可替代代币的一种方法是将每个小面额的代币(例如 0.01 ETH)视为一个单独的 NFT。不幸的是,如果我们这样做,退出的燃气费用将会太高。
一种解决方案是通过将许多相邻的代币作为一个单元来优化处理,可以一次性转移或退出。有两种办法能够做到这一点:
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 要困难得多。一个关键挑战是 EVM 中的许多状态对象没明确的「所有者」。Plasma 的安全性取决于每个对象都有一个所有者,这个所有者有责任监视并确保链上数据的可用性,并在出现任意的毛病时退出该对象。然而,许多以太坊应用并非如此运作。例如, Uniswap 流动性池就没有单一的所有者。
另一个挑战是 EVM 不试图限制依赖性。在区块 N 中,账户 A 中持有的 ETH 可能来自区块 N-1 中的任何地方。为了退出一致的状态,一个 EVM Plasma 链将需要有一个退出游戏,在极端情况下,希望使用区块 N 的信息退出的人在大多数情况下要支付将整个区块 N 状态发布到链上的费用:成本高达数百万美元。基于 UTXO 的 Plasma 方案没这个问题:每个用户都可以从他们拥有数据的最新区块退出他们的资产。
第三个挑战是 EVM 中无限的依赖性使得很难有证明有效性的一致激励。任何状态的有效性都取决于其他一切,因此证明任何一件事都需要证明一切。在这种情况下,由于数据可用性问题,通常无法使解决失败兼容激励。一个特别烦人的问题是,我们失去了 UTXO-based 系统中存在的保证,即对象的状态不能在其所有者不同意的情况下改变。这个保证很有用,因为它意味着所有者总是明白他们资产的最新可证明状态,并简化了退出游戏。没有它,创建退出游戏就变得更困难。
有效性证明最基本的作用是在链上证明每个 Plasma 区块的有效性。这极大地简化了设计空间:这在某种程度上预示着我们只需要担心运营者的不可用区块攻击,而不是无效区块。例如,在 Plasma Cash 中,它消除了对历史挑战的担忧。这减少了用户要下载的状态,从过去一周每个区块的一个分支,减少到每个资产的一个分支。
此外,从最新状态提取(在运营者诚实的常见情况下,所有提取都将从最新状态进行)不会受到非最新所有者挑战,因此在有效性证明的 Plasma 链中,此类提取根本不会受到任何挑战。这在某种程度上预示着,在一般的情况下,提款能马上进行。
然而,尽管 Plasma 提供了这些显著的优势,它也面临着特有的挑战。
例如,用户在从 Plasma 链提取资产时,必须经过一个被称为「挑战期」的等待阶段。在这一段时间内,其他用户都能够对交易提出质疑或提交欺诈证明,以确保交易的合法性。这一机制虽然增强了整体的安全性,但在某些情况下也可能会引起用户体验的不便,因为它延长了资金提取的过程。
即便到 2023 年,Plasma 依然是一个被低估的设计。Rollups 仍然是黄金标准,并拥有无法匹敌的安全属性。这从开发者体验的角度尤其如此:没什么能比得上应用开发者甚至不需要仔细考虑他们应用中的所有权图和激励流动的简单性。
然而,Plasma 让我们完全绕过了数据可用性问题,大幅度的降低了交易费用。对那些本来会是 validiums 的链来说,Plasma 可以是一个重大的安全升级。ZK-EVMs 终于在今年实现,这为我们重新探索这个设计空间提供了绝佳的机会,并提出更有效的构建方式,以简化开发者体验并保护用户的资金。