风险提示:防范以虚拟货币/区块链名义进行的非法集资风险。 ——银保监会等五部门

Vitalik Buterin谈关于EVM 验证的退出游戏:Plasma 的回归

白话区块链 2023-11-15 17:45:30
微信分享

扫码分享

利用ZK-SNARK有效性证明,可以简化Plasma在支付场景下的设计,同时借鉴UTXO理念建立EVM状态并行图,使Plasma重现监管有效性链的潜力。

作者:Vitalik Buterin


翻译:白话区块链 

特别感谢Karl Floersch、Georgios Konstantopoulos和Martin Koppelmann的反馈、审查和讨论。
Plasma是一类区块链扩展解决方案,可以将除存款、提款和Merkle根之外的所有数据和计算保存在链外。这为实现非常大规模的可扩展性提供了可能,不受链上数据可用性的瓶颈限制。Plasma最早于2017年被发明,并在2018年进行了多次迭代,其中最著名的是最小可行性Plasma、Plasma Cash、Plasma Cashflow和Plasma Prime。不幸的是,由于(i)大规模的客户端数据存储成本和(ii)Plasma的根本限制使其难以推广到支付之外的应用,Plasma在很大程度上已被Rollup技术取代。
有效性证明(又称ZK-SNARKs)的出现使我们有理由重新思考这个决定。使Plasma在支付方面发挥作用的最大挑战——客户端数据存储问题,可以通过有效性证明有效地解决。此外,有效性证明提供了一系列工具,使我们能够创建一个类似Plasma的链来运行EVM。Plasma的安全保证无法涵盖所有用户,因为Plasma式退出游戏无法扩展到许多复杂应用的根本原因仍然存在。然而,在实践中,仍然可以保护非常大比例的资产安全。
本文描述了如何将Plasma的思想扩展到实现这样的目标。


1、概述:Plasma的工作原理

最容易理解的Plasma版本是Plasma Cash。Plasma Cash的工作原理是将每个单独的Coin视为独立的NFT,并为每个Coin跟踪独立的历史记录。一个Plasma链有一个操作者,负责生成并定期发布区块。每个区块中的交易以稀疏的Merkle树形式存储:如果一笔交易转移了硬币k的所有权,它会出现在树的第k个位置。当Plasma链操作者创建一个新区块时,他们将Merkle树的根发布到链上,并直接向每个用户发送对应于该用户所拥有的硬币的Merkle分支。

假设这些是Plasma Cash链中的最后三个交易树。在假设之前的所有交易树都是有效的情况下,我们知道Eve目前拥有Coin1,David拥有Coin 4,George拥有Coin 6
任何Plasma系统中的主要风险是操作者的不当行为。这种不当行为可以通过两种方式发生:
  • 发布无效的区块(例如,操作者包含一笔交易,将硬币1从Fred发送给Hermione,即使Fred在那个时候并不拥有该硬币)
  • 发布不可用的区块(例如,操作者未向Bob发送他某个区块的Merkle分支,导致他无法向他人证明他的硬币仍然有效且未使用)
如果操作者的不当行为与用户的资产相关,用户有责任立即退出(具体来说,7天之内)。当用户(“退出者”)退出时,他们提供一个Merkle分支,证明了将该Coin从前一个所有者转移给他们的交易的包含。这开始了一个为期7天的挑战期,在此期间其他人可以通过提供以下三种之一的Merkle证明来挑战该退出:
  • 非最新所有者:由退出者签署的将退出者的硬币转移到其他人名下的后续交易
  • 双重花费:将硬币从前一个所有者转移到其他人名下的交易,该交易在将硬币转移到退出者名下的交易之前被包含
  • 无效的历史记录:在过去的7天内转移了硬币的交易,但没有相应的支出。退出者可以通过提供相应的支出来回应;如果他们没有这样做,退出失败。

添加图片注释,不超过 140 字(可选)
根据这些规则,任何拥有硬币k的人需要查看过去一周所有历史交易树中位置k的所有Merkle分支,以确保他们真正拥有Coink并能够退出。他们需要存储包含资产转移的所有分支,以便能够应对挑战并安全地退出并持有自己的Coin。


2、推广到同质化Token

上述设计适用于NFT。然而,比NFT更常见的是像ETH和USDC这样的同质化Token。将Plasma Cash应用于同质化Token的一种方法是将每个小面额Token(例如0.01 ETH)视为单独的NFT。然而,如果这样做,退出的gas费用将会过高。
一种解决方案是通过将许多相邻的硬币视为单个单位进行优化,这些Token可以一次性转移或退出。有两种方法可以实现这一点:
  • 几乎按原样使用Plasma Cash,但使用高级算法来快速计算非常多对象的Merkle树,如果许多相邻对象是相同的。令人惊讶的是,实现这一点并不那么困难;你可以在这里查看一个Python实现。
  • 使用Plasma Cashflow,它将许多相邻的硬币简单地表示为单个对象。
然而,这两种方法都会遇到碎片化的问题:如果你从数百人那里每人获得0.001 ETH作为购买咖啡的支付,你将在树的许多地方拥有0.001 ETH,因此实际退出该ETH仍然需要提交许多独立的退出请求,使得燃气费用过高。已经开发了碎片整理协议,但实施起来比较棘手。
或者,我们可以重新设计系统,考虑更传统的"未花费交易输出"(UTXO)模型。当你退出一个Token时,你需要提供这些Token的最近一周的历史记录,任何人都可以通过证明这些历史Token已经退出来挑战你的退出请求。

添加图片注释,不超过 140 字(可选)
右下角的0.2 ETH UTXO的提现可以通过展示其历史中任何UTXO的提现来取消,如图中所示(绿色表示)。特别要注意的是,中间左侧和底部左侧的UTXO是祖先,但顶部左侧的UTXO不是。这种方法类似于2013年左右的有色币协议中的基于顺序的着色思想。
有多种技术可以实现这一点。在所有情况下,目标都是追踪在不同历史时刻上被视为“相同Token”的概念,以防止“相同Token”被重复提现。


3、通用化到以太坊虚拟机(EVM)存在一些挑战。

不幸的是,超越支付领域并将其推广到EVM更加困难。一个主要的挑战是,EVM中的许多状态对象没有明确的“所有者”。Plasma的安全性依赖于每个对象都有一个所有者,该所有者负责监视并确保链上的数据可用,并在发生任何问题时退出该对象。然而,许多以太坊应用程序并不是以这种方式工作。例如,Uniswap流动性池没有单一的所有者。
另一个挑战是,EVM不会限制依赖关系。在区块N中,帐户A中持有的ETH可能来自区块N-1中的任何地方。为了退出一致的状态,EVM Plasma链需要具有退出游戏,在极端情况下,希望使用区块N中的信息退出的人可能需要支付费用将整个区块N的状态发布到链上:这将产生数百万美元的燃气费用。基于UTXO的Plasma方案没有这个问题:每个用户可以从他们拥有数据的最新区块中退出他们的资产。
第三个挑战是,EVM中的无限制依赖关系使得很难形成一致的激励机制来证明有效性。任何状态的有效性都取决于其他所有内容,因此证明任何一项事物都需要证明一切。在这种情况下解决失败通常无法通过数据可用性问题实现激励兼容。一个特别烦人的问题是,我们失去了基于UTXO系统中存在的保证,即对象的状态在没有所有者同意的情况下不会改变。这个保证非常有用,因为它意味着所有者始终知道他们资产的最新可证明状态,并简化了退出游戏。没有这个保证,创建退出游戏变得更加困难。


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

有效性证明可以在改进Plasma链设计方面起到很大作用。最基本的是,在链上证明每个Plasma区块的有效性。这极大地简化了设计空间:这意味着我们唯一需要担心的来自操作者的攻击是不可用的区块,而不是无效的区块。例如,在Plasma Cash中,它消除了对历史挑战的担忧。这将用户需要下载的状态从每个区块的一条分支减少到每个资产的一条分支。
此外,从最新状态提取款项(在操作者诚实的常见情况下,所有提取款项都将来自最新状态)不会受到非最新所有者挑战的限制。因此,在经过有效性证明的Plasma链中,此类提取款项将不受任何挑战的限制。这意味着在正常情况下,提款可以立即完成!


5、拓展到EVM:并行的UTXO图

在EVM情况下,有效性证明还可以让我们做一些聪明的事情:它们可以用于实现ETH和ERC20Token的并行UTXO图,并在SNARK证明中证明UTXO图与EVM状态的等效性。一旦实现了这一点,就可以在UTXO图上实现一个“常规”的Plasma系统。

添加图片注释,不超过 140 字(可选)
这使我们能够绕过EVM的许多复杂性。例如,在基于账户的系统中,某人可以在没有您同意的情况下编辑您的账户(通过向其发送Token并增加其余额),但这并不重要,因为Plasma构建并不基于EVM状态本身,而是基于与EVM并行存在的UTXO状态,您接收的任何Token都将是独立的对象。


6、拓展到EVM:完全状态退出

已经有一些提出更简化的方案来创建“Plasma EVM”,例如Plasma Free以及这篇2019年的文章。在这些方案中,任何人都可以在第一层(L1)发送消息,强迫操作者要么包含一个交易,要么提供特定分支的状态。如果操作者未能这样做,链将开始回滚区块。只有当有人发布了完整的状态副本,或者至少发布了用户标记为可能丢失的所有数据时,链才会停止回滚。进行提款可能需要发布赏金,用于支付该用户在发布如此大量数据的情况下的燃气费用的份额。
这样的方案的弱点在于在正常情况下不允许即时提款,因为链始终存在回滚最新状态的可能性。


7、EVM Plasma方案的限制

这样的方案很强大,但无法为所有用户提供完全的安全保证。它们最明显失效的情况是特定状态对象没有明确的经济“所有者”的情况。
让我们考虑一个CDP(抵押债务头寸)的情况,它是一个智能合约,用户的Token被锁定,只有在用户偿还债务后才能解锁。假设用户在一个CDP中锁定了1个ETH(本文撰写时约为2000美元),并负有1000DAI的债务。现在,Plasma链停止发布区块,并且用户拒绝退出。用户可以选择永远不退出。现在,用户有一个免费选择:如果ETH的价格下跌到1000美元以下,他们放弃并忘记CDP,如果ETH的价格保持在上方,他们最终会索取资产。从长远来看,这样的恶意用户会从中赚钱。
另一个例子是隐私系统,例如Tornado Cash或Privacy Pools。考虑一个有五个存款人的隐私系统:

隐私系统中的ZK-SNARKs将进入系统的Token的所有者与离开系统的Token的所有者之间的链接保持隐藏。
假设只有橙色一方已经取款,并且在那时Plasma链操作者停止发布数据。假设我们使用了UTXO图方法,并采用先进先出规则,因此每个Token都与其下方的Token匹配。然后,橙色一方可以提取他们的预混合Token和后混合Token,而系统会将其视为两个独立的Token。如果蓝色一方尝试提取他们的预混合Token,橙色一方的最新状态将取代它;同时,蓝色一方没有信息来提取他们的后混合Token。 如果允许其他四个存款人提取隐私合约本身(这将取代存款),然后在第一层(L1)上取出Token,这个问题可以得到解决。然而,实际实现这样一个机制需要隐私系统开发人员额外的努力。 还有其他解决隐私问题的方法,例如Intmax方法,它涉及将几个字节按照链上滚动的方式与类似Plasma的操作者一起放置在一起,以在个体用户之间传递信息。
Uniswap的流动性提供者LP)头寸也存在类似的问题:如果你在Uniswap头寸中将USDC换成ETH,你可以尝试提取交易前的USDC和交易后的ETH。如果你与Plasma链操作者勾结,流动性提供者和其他用户将无法访问交易后的状态,因此他们将无法提取交易后的USDC。需要特殊逻辑来防止这种情况的发生。

8、结论

在2023年,Plasma是一个被低估的设计领域。Rollups仍然是黄金标准,并具有无法匹配的安全性能。从开发者的角度来看,这一点尤为明显:没有任何东西能够与应用程序开发者无需考虑所有权图和应用程序内的激励流程的简单性相匹配。 然而,Plasma使我们能够完全避开数据可用性问题,极大地降低了交易费用。对于本来可能是validiums(一种数据隔离方案)的链来说,Plasma可以成为重要的安全升级。今年ZK-EVMs终于开始实现,这为重新探索这一设计领域提供了绝佳机会,并提出更加有效的构建方案,以简化开发者体验并保护用户资金。

来源:https://vitalik.eth.limo/general/2023/11/14/neoplasma.html

白话区块链

区块链世界入口第一站,人人都能看懂的区块链;24 小时热点实时追踪。