特别感谢Karl Floersch、Georgios Konstantopoulos和Martin Koppelmann对本文提供的反馈、审阅和讨论。

Plasma是一类旨在扩容区块链的解决方案,它除了存款、取款和默克尔根外,允许所有数据和计算保持在链下。这为实现不受链上数据可用性限制的大规模可扩展性提供了可能性。Plasma自2017年首次提出后,在2018年经历了多次迭代,尤其是最小可行Plasma、Plasma Cash、Plasma Cashflow和Plasma Prime。然而,由于客户端数据存储成本较高以及Plasma在非支付应用领域的普遍限制,它已基本被rollups技术所取代。

有效性证明(亦称ZK-SNARKs)的出现,使我们有理由重新审视这一技术。Plasma在支付领域面临的主要挑战——客户端数据存储,可以通过有效性证明得到有效解决。此外,有效性证明还提供了一系列工具,使我们能够构建出运行EVM的类Plasma链。Plasma的安全保障并不涵盖所有用户,因为将Plasma风格的退出机制扩展到多种复杂应用仍存在根本性挑战。尽管如此,实践中仍可以确保相当大比例的资产安全。

本文探讨了如何将Plasma理念扩展至此类应用。

概述:Plasma的工作原理

最简单的Plasma版本——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仍需提交许多单独的退出请求,导致燃气费用过高。尽管已开发出碎片整合协议,但其实施仍颇具挑战。

另一种方法是重新设计系统,考虑更传统的“未消费交易输出”(UTXO)模型。当你退出一枚硬币时,需要提供该硬币过去一周的历史记录,任何人都可以通过证明那些历史硬币已经被退出来挑战你的退出。

例如,右下角0.2 ETH UTXO的提款可能会因为其历史中任何一个UTXO的提款而被取消,如图中绿色所示。特别需要注意的是,中左和下左UTXOs是其祖先,而上左UTXO则不是。这种方法与大约2013年彩色硬币协议中的顺序着色思想类似。

采用这些技术的目标,在所有情况下,都是追踪历史上不同时间点“同一硬币”的某种概念,以防止“同一硬币”被两次提取。

推广到EVM的挑战

不幸的是,将Plasma推广到EVM之外的支付领域要困难得多。EVM中的许多状态对象并没有明确的“所有者”。Plasma的安全性依赖于每个对象都有一个负责监视链上数据可用性的所有者,并在出现问题时退出该对象。然而,许多以太坊应用程序并不符合这一模式。例如,Uniswap流动性池并没有单一的所有者。

另一个挑战是EVM并不限制依赖关系。在区块N中,A账户中的ETH可能来源于区块N-1中的任何位置。为了退出一致的状态,EVM Plasma链可能需要一个退出游戏,在极端情况下,某人希望使用区块N的信息退出时,可能需要支付将整个区块N状态发布在链上的巨额费用。而基于UTXO的Plasma方案则没有这个问题:每个用户都可以从他们拥有数据的最新区块退出其资产。

第三个挑战是,EVM中的无限依赖关系使得很难有对齐的激励来证明有效性。任何状态的有效性都依赖于其他所有状态,因此要证明任何一项都需要证明一切。在这种情况下,由于数据可用性问题,通常无法使故障解决方式具有激励兼容性。特别棘手的问题是,我们失去了UTXO-based系统中的一个保证,即在没有所有者同意的情况下,对象的状态不能改变。这个保证极其重要,因为它意味着所有者总是了解其资产最新的可证明状态,且简化了退出游戏。没有这一保证,创建退出游戏将变得更加困难。

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

有效性证明改进Plasma链设计的最基本方式是在链上证明每个Plasma区块的有效性。这大大简化了设计空间:我们只需担心运营者发布的不可用区块,而非无效区块。例如,在Plasma Cash中,它消除了对历史挑战的担忧。这减少了用户需要下载的状态量,从过去一周每个区块的一个分支减少到每个资产的一个分支。

此外,在大多数情况下(运营者诚实,所有提款都来自最新状态),最新状态的提款不会受到非最新所有者挑战,因此在有效性证明的Plasma链中,这类提款根本不会受到任何挑战。这意味着,在正常情况下,提款可以即时完成!

扩展到EVM:并行UTXO图

在EVM的情况下,有效性证明还使我们能够做出一些巧妙的设计:它们可以用来实现ETH和ERC20代币的并行UTXO图,并用SNARK证明UTXO图与EVM状态之间的等价性。一旦实现这一点,就可以在UTXO图上实施一个“常规”的Plasma系统。

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

扩展到EVM:完整状态退出

为实现“Plasma EVM”,已提出了更简单的方案,例如Plasma Free以及此前的2019年文章。在这些方案中,任何人都可以在L1上发送消息,迫使运营者要么包含一笔交易,要么使特定的状态分支可用。如果运营者未能做到,链就会开始回退区块。这个过程将持续直到有人发布整个状态的完整副本,或至少是用户标记为可能缺失的所有数据。进行提款可能需要发布赏金,用以支付发布这么大量数据的燃气费用中用户的份额。

这样的方案存在一个弱点,即它们在正常情况下不允许即时提款,因为总是存在链需要回退最新状态的可能性。

EVM Plasma方案的局限性

虽然这类方案功能强大,但它们无法为所有用户提供完整的安全保障。当特定状态对象没有明确的经济“所有者”时,这些方案的局限性最为明显。

以抵押债务头寸(CDP)为例,这是一种智能合约,用户锁定的硬币只有在偿还债务后才能释放。假设用户在CDP中锁定了1 ETH(约2000美元,截至本文撰写时),并承担着1000 DAI的债务。现在,若Plasma链停止发布区块,用户拒绝退出,那么用户实际上可以选择不退出。这意味着,如果ETH的价格跌破1000美元,用户可以选择放弃CDP;如果ETH价格保持在上方,他们最终可以认领它。这样,恶意用户平均而言可以从中获利。

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

在此系统中,ZK-SNARKs保持系统内硬币所有者与系统外硬币所有者之间的联系隐秘。

假设只有橙色存款者已提取资金,此时Plasma链运营者停止发布数据。如果我们采用UTXO图方法,并实行先进先出规则,则每个硬币会与其下方的硬币匹配。这样,橙色存款者可能会提取其混合前和混合后的硬币,系统则会将它们视为两个独立的硬币。如果蓝色存款者尝试提取其混合前的硬币,橙色存款者更新的状态将取代蓝色的状态;同时,蓝色存款者没有信息来提取其混合后的硬币。

如果允许其他四个存款者提取隐私合约本身(从而取代存款),然后在L1上取出硬币,这个问题可以得到解决。然而,实际实施这样的机制需要隐私系统的开发者付出额外的努力。

解决隐私问题的其他方法包括Intmax方法,它涉及在链上以rollup风格放置几个字节,同时由一个类似Plasma的运营者在不同用户之间传递信息。

Uniswap LP头寸面临类似的问题:如果你在Uniswap中用USDC交换了ETH,你可能会尝试提取交易前的USDC和交易后的ETH。如果你与Plasma链运营者串通,流动性提供者和其他用户将无法访问交易后的状态,因此他们无法提取交易后的USDC。这种情况需要特殊的逻辑来预防。

结论

到2023年,Plasma成为了一个被低估的设计领域。Rollups仍然是安全性标杆,具有无法匹敌的安全属性。这一点在开发者体验方面尤为明显:没有什么能比得上应用开发者无需考虑应用内的所有权结构和激励机制的简便性。

然而,Plasma让我们能够完全规避数据可用性问题,极大地降低交易费用。对于那些原本可能成为validiums的链来说,Plasma能提供显著的安全性提升。随着ZK-EVM在今年的成熟,这为我们重新探索这个设计领域提供了绝佳机会,从而开发出更有效的构建,简化开发者体验,保护用户资金。