特别感谢 Karl Floersch、Georgios Konstantopoulos 和 Martin Koppelmann 的提供的反馈、审查和讨论。
Plasma 是一类区块链扩展解决方案,允许除充值、提现和默克尔根之外的所有数据和计算都保持在链下。这为获得非常大的可扩展性收益打开了大门,而不受链上数据可用性的限制。Plasma于2017年首次创立,并在 2018 年经历了多次迭代,最引人注目的是Minimal Viable Plasma、Plasma Cash、Plasma Cashflow 和 Plasma Prime。不幸的是,由于主要涉及(i)大量客户端数据存储成本和(ii)Plasma 的基本限制,Plasma 在很大程度上已被 Rollups 取代,使其@kelvinfichter/why-is-evm-on-plasma-hard-bf2d99c48df7">难以推广到除支付之外的其他领域。
验证证明(也称为ZK-SNARKs)的出现给我们提供了一个重新考虑这个决定的理由。使Plasma在支付方面可行的最大挑战,即客户端数据存储,可以利用验证证明有效地得到解决。此外,验证证明提供了一系列工具,让我们能够创建一个运行EVM的类Plasma链。尽管Plasma的安全性保证无法覆盖所有用户,因为将Plasma式的退出游戏扩展到许多复杂应用程序种类的基本原因仍然存在。然而,在实践中,仍然可以保护非常大比例的资产。
这篇文章描述了如何将Plasma的想法扩展到这样的情况。
最容易理解的 Plasma 版本是 Plasma Cash。Plasma Cash 的工作原理是将每个代币视为单独的 NFT,并跟踪每个代币的单独历史记录。Plasma 有一个运营者,负责制作并定期发布区块。每个区块中的交易都存储为稀疏默克尔树:如果交易转移了代币k的所有权,那么它出现在树的位置k。当 Plasma 链运营者创建一个新区块时,他们将默克尔树的根发布到链上,并直接向每个用户发送与该用户拥有的代币对应的默克尔树分支。
假设这些是 Plasma Cash 链中的最后三个交易树。然后,假设之前的所有树都是有效的,我们知道Eva当前拥有代币 1,David 拥有代币 4,George 拥有代币 6。
任何 Plasma 系统的主要风险是运营者实施行为不当。这可以通过两种方式发生:
如果运营者以与用户资产相关的方式出现不当行为,则用户有责任立即退出(具体来说,必须在7天内)。当用户(“退出者”)退出时,他们提供一个默克尔树分支,证明了将该代币从前一所有者转移到他们名下的交易。这开始了一个为期7天的质疑期,在此期间,其他人可以通过提供以下三种情况之一的默克尔证明来质疑该退出:
根据这些规则,任何拥有代币 k 的人需要查看过去一周所有历史树中位置 k 的所有默克尔分支,以确保他们实际拥有代币 k 并能够退出。他们需要存储包含资产转移的所有分支,以便能够应对质疑并安全地退出他们的代币状态。
上述设计适用于NFTs。然而,比NFTs更常见的是可替代代币,如ETH和USDC。将Plasma Cash应用于可替代代币的一种方法是简单地将每个代币的小面额(例如0.01 ETH)作为单独的NFT。然而,如果我们这样做,退出的 gas 成本将会太高。
一种解决方案是通过将许多相邻的代币视为单个单位进行优化,可以一次性转移或退出所有代币。有两种方法可以做到这一点:
然而,这两种方法都会遇到碎片化的问题:如果你从数百个购买咖啡的人处每人收到0.001 ETH,那么您将在树中有许多地方都有0.001 ETH,因此实际退出该ETH仍需要提交许多单独的退出请求,带来不可接受的 gas 费。已经开发出了碎片整合协议,但实现起来比较棘手。
或者,我们可以重新设计系统,以考虑更传统的“未花费交易输出”(UTXO)模型。当您退出一枚代币时,您需要提供过去一周的这些代币的历史记录,任何人都可以通过证明这些历史代币已退出来质疑您的退出。
右下角的0.2 ETH UTXO的提取可以通过展示其历史中任何一个UTXO的提取(绿色部分)来取消。特别注意,中左和下左的UTXO是先前的,但上左的UTXO不是。这种方法类似于2013年左右的基于顺序的着色想法,这来自于有色币协议。
有许多技术可以做到这一点。在所有情况下,目标都是跟踪在不同历史时期“相同代币”的某种概念,以防止“相同代币”被提取两次。
不幸的是,除了支付之外,推广到 EVM 的难度要大得多。一个关键挑战是 EVM 中的许多状态对象没有明确的“所有者”。Plasma 的安全性取决于每个对象都有一个所有者,所有者有责任监视并确保链的数据可用,并在出现任何问题时退出该对象。然而,许多以太坊应用程序并不是这样运作的。例如,Uniswap 流动性池没有单一所有者。
另一个挑战是 EVM 不会尝试限制依赖性。在块N-1中,帐户A中持有的ETH可能来自于块N中的任何地方。为了退出一致的状态,EVM Plasma链需要一个退出游戏,在极端情况下,希望使用块N中的信息退出的人可能需要支付发布整个块N状态的费用:Gas成本达数百万美元。基于 UTXO 的 Plasma 方案不存在这个问题:每个用户都可以从他们拥有数据的最新区块中退出他们的资产。
第三个挑战是,EVM中的无限制依赖关系使得更难以获得对证明有效性的一致激励。任何状态的有效性都取决于其他所有东西,因此证明任何一个事物都需要证明一切。在这种情况下解决故障通常无法来保持激励相容,因为存在数据可用性问题。一个特别令人烦恼的问题是,我们失去了基于UTXO的系统中存在的保证,即对象的状态不能在没有所有者的同意下改变。这个保证非常有用,因为它意味着所有者始终知道其资产的最新可证明状态,并简化了退出游戏。如果没有它,创建退出游戏就变得更加困难。
有效性证明在改进 Plasma 链设计方面起到的最基本作用是,证明链上每个 Plasma 区块的有效性。这大大地简化了设计空间,意味着我们唯一需要担心的是来自运营者不可用块的攻击,而不是无效的块。例如,在 Plasma Cash 中,它消除了对历史挑战的担忧。这减少了用户需要下载的状态,从每周每个区块一个分支减少到每个资产一个分支。
此外,从最近状态提现(在运营者诚实的常见情况下,所有提现都将从最近状态进行)不会受到非最新所有者的挑战,因此在经过有效性验证的 Plasma 链中,这种提现是不会受到任何挑战。这意味着,正常情况下,提现是可以即时到账的!
在EVM情况下,有效性证明也让我们可以做一些巧妙的事情:它们可以用来实现ETH和ERC20代币的并行UTXO图,并在UTXO图和EVM状态之间进行SNARK等价证明。一旦获得这个,您就可以在UTXO图上实现一个“常规”的Plasma系统。
这让我们避开了EVM的许多复杂性。例如,在基于帐户的系统中,有人可以在没有您的同意的情况下编辑您的帐户(通过向其发送代币从而增加其余额)的事实并不重要,因为Plasma构造不是基于EVM状态本身,而是基于与EVM并行存在的UTXO状态,在那里,您收到的任何代币都将是单独的对象。
已经有一些更简单的方案提出了制作“Plasma EVM”的想法,例如,Plasma Free以及此前2019年的这篇文章。在这些方案中,任何人都可以在第1层协议上发送消息,强制运营者要么包含一个交易,要么提供一个特定分支的状态。如果运营者未能做到这一点,链将开始回滚区块。只要有人发布了整个状态的完整副本,或者至少所有用户标记为可能丢失的所有数据,链就会停止回滚。提现可能需要发布赏金,以支付该用户在发布如此大量数据时的Gas成本份额。
这类方案的弱点在于,在正常情况下它们不允许即时提现,因为始终存在链可能需要回滚最新状态的可能性。
此类方案功能强大,但无法为所有用户提供全面的安全保证。它们最明显出故障的情况是某个特定状态对象没有明确的经济“所有者”的情况。。
让我们考虑一个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是一个被低估的设计领域。Rollups仍然是黄金标准,并具有无法匹敌的安全性质。从开发者体验的角度来看,这一点尤其明显:没有什么能够比得上应用开发者根本不必考虑其应用程序内的所有权图和激励流程的简单性。
然而,Plasma让我们完全规避了数据可用性问题,极大地降低了交易费用。对于本来可以使用validiums的链来说,Plasma可以是一个重大的安全升级。今年ZK-EVMs的实现使得重新探索这一设计领域成为一个绝佳的机会,并提出更加有效的构建,以简化开发者体验并保护用户资金。
Condividi
特别感谢 Karl Floersch、Georgios Konstantopoulos 和 Martin Koppelmann 的提供的反馈、审查和讨论。
Plasma 是一类区块链扩展解决方案,允许除充值、提现和默克尔根之外的所有数据和计算都保持在链下。这为获得非常大的可扩展性收益打开了大门,而不受链上数据可用性的限制。Plasma于2017年首次创立,并在 2018 年经历了多次迭代,最引人注目的是Minimal Viable Plasma、Plasma Cash、Plasma Cashflow 和 Plasma Prime。不幸的是,由于主要涉及(i)大量客户端数据存储成本和(ii)Plasma 的基本限制,Plasma 在很大程度上已被 Rollups 取代,使其@kelvinfichter/why-is-evm-on-plasma-hard-bf2d99c48df7">难以推广到除支付之外的其他领域。
验证证明(也称为ZK-SNARKs)的出现给我们提供了一个重新考虑这个决定的理由。使Plasma在支付方面可行的最大挑战,即客户端数据存储,可以利用验证证明有效地得到解决。此外,验证证明提供了一系列工具,让我们能够创建一个运行EVM的类Plasma链。尽管Plasma的安全性保证无法覆盖所有用户,因为将Plasma式的退出游戏扩展到许多复杂应用程序种类的基本原因仍然存在。然而,在实践中,仍然可以保护非常大比例的资产。
这篇文章描述了如何将Plasma的想法扩展到这样的情况。
最容易理解的 Plasma 版本是 Plasma Cash。Plasma Cash 的工作原理是将每个代币视为单独的 NFT,并跟踪每个代币的单独历史记录。Plasma 有一个运营者,负责制作并定期发布区块。每个区块中的交易都存储为稀疏默克尔树:如果交易转移了代币k的所有权,那么它出现在树的位置k。当 Plasma 链运营者创建一个新区块时,他们将默克尔树的根发布到链上,并直接向每个用户发送与该用户拥有的代币对应的默克尔树分支。
假设这些是 Plasma Cash 链中的最后三个交易树。然后,假设之前的所有树都是有效的,我们知道Eva当前拥有代币 1,David 拥有代币 4,George 拥有代币 6。
任何 Plasma 系统的主要风险是运营者实施行为不当。这可以通过两种方式发生:
如果运营者以与用户资产相关的方式出现不当行为,则用户有责任立即退出(具体来说,必须在7天内)。当用户(“退出者”)退出时,他们提供一个默克尔树分支,证明了将该代币从前一所有者转移到他们名下的交易。这开始了一个为期7天的质疑期,在此期间,其他人可以通过提供以下三种情况之一的默克尔证明来质疑该退出:
根据这些规则,任何拥有代币 k 的人需要查看过去一周所有历史树中位置 k 的所有默克尔分支,以确保他们实际拥有代币 k 并能够退出。他们需要存储包含资产转移的所有分支,以便能够应对质疑并安全地退出他们的代币状态。
上述设计适用于NFTs。然而,比NFTs更常见的是可替代代币,如ETH和USDC。将Plasma Cash应用于可替代代币的一种方法是简单地将每个代币的小面额(例如0.01 ETH)作为单独的NFT。然而,如果我们这样做,退出的 gas 成本将会太高。
一种解决方案是通过将许多相邻的代币视为单个单位进行优化,可以一次性转移或退出所有代币。有两种方法可以做到这一点:
然而,这两种方法都会遇到碎片化的问题:如果你从数百个购买咖啡的人处每人收到0.001 ETH,那么您将在树中有许多地方都有0.001 ETH,因此实际退出该ETH仍需要提交许多单独的退出请求,带来不可接受的 gas 费。已经开发出了碎片整合协议,但实现起来比较棘手。
或者,我们可以重新设计系统,以考虑更传统的“未花费交易输出”(UTXO)模型。当您退出一枚代币时,您需要提供过去一周的这些代币的历史记录,任何人都可以通过证明这些历史代币已退出来质疑您的退出。
右下角的0.2 ETH UTXO的提取可以通过展示其历史中任何一个UTXO的提取(绿色部分)来取消。特别注意,中左和下左的UTXO是先前的,但上左的UTXO不是。这种方法类似于2013年左右的基于顺序的着色想法,这来自于有色币协议。
有许多技术可以做到这一点。在所有情况下,目标都是跟踪在不同历史时期“相同代币”的某种概念,以防止“相同代币”被提取两次。
不幸的是,除了支付之外,推广到 EVM 的难度要大得多。一个关键挑战是 EVM 中的许多状态对象没有明确的“所有者”。Plasma 的安全性取决于每个对象都有一个所有者,所有者有责任监视并确保链的数据可用,并在出现任何问题时退出该对象。然而,许多以太坊应用程序并不是这样运作的。例如,Uniswap 流动性池没有单一所有者。
另一个挑战是 EVM 不会尝试限制依赖性。在块N-1中,帐户A中持有的ETH可能来自于块N中的任何地方。为了退出一致的状态,EVM Plasma链需要一个退出游戏,在极端情况下,希望使用块N中的信息退出的人可能需要支付发布整个块N状态的费用:Gas成本达数百万美元。基于 UTXO 的 Plasma 方案不存在这个问题:每个用户都可以从他们拥有数据的最新区块中退出他们的资产。
第三个挑战是,EVM中的无限制依赖关系使得更难以获得对证明有效性的一致激励。任何状态的有效性都取决于其他所有东西,因此证明任何一个事物都需要证明一切。在这种情况下解决故障通常无法来保持激励相容,因为存在数据可用性问题。一个特别令人烦恼的问题是,我们失去了基于UTXO的系统中存在的保证,即对象的状态不能在没有所有者的同意下改变。这个保证非常有用,因为它意味着所有者始终知道其资产的最新可证明状态,并简化了退出游戏。如果没有它,创建退出游戏就变得更加困难。
有效性证明在改进 Plasma 链设计方面起到的最基本作用是,证明链上每个 Plasma 区块的有效性。这大大地简化了设计空间,意味着我们唯一需要担心的是来自运营者不可用块的攻击,而不是无效的块。例如,在 Plasma Cash 中,它消除了对历史挑战的担忧。这减少了用户需要下载的状态,从每周每个区块一个分支减少到每个资产一个分支。
此外,从最近状态提现(在运营者诚实的常见情况下,所有提现都将从最近状态进行)不会受到非最新所有者的挑战,因此在经过有效性验证的 Plasma 链中,这种提现是不会受到任何挑战。这意味着,正常情况下,提现是可以即时到账的!
在EVM情况下,有效性证明也让我们可以做一些巧妙的事情:它们可以用来实现ETH和ERC20代币的并行UTXO图,并在UTXO图和EVM状态之间进行SNARK等价证明。一旦获得这个,您就可以在UTXO图上实现一个“常规”的Plasma系统。
这让我们避开了EVM的许多复杂性。例如,在基于帐户的系统中,有人可以在没有您的同意的情况下编辑您的帐户(通过向其发送代币从而增加其余额)的事实并不重要,因为Plasma构造不是基于EVM状态本身,而是基于与EVM并行存在的UTXO状态,在那里,您收到的任何代币都将是单独的对象。
已经有一些更简单的方案提出了制作“Plasma EVM”的想法,例如,Plasma Free以及此前2019年的这篇文章。在这些方案中,任何人都可以在第1层协议上发送消息,强制运营者要么包含一个交易,要么提供一个特定分支的状态。如果运营者未能做到这一点,链将开始回滚区块。只要有人发布了整个状态的完整副本,或者至少所有用户标记为可能丢失的所有数据,链就会停止回滚。提现可能需要发布赏金,以支付该用户在发布如此大量数据时的Gas成本份额。
这类方案的弱点在于,在正常情况下它们不允许即时提现,因为始终存在链可能需要回滚最新状态的可能性。
此类方案功能强大,但无法为所有用户提供全面的安全保证。它们最明显出故障的情况是某个特定状态对象没有明确的经济“所有者”的情况。。
让我们考虑一个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是一个被低估的设计领域。Rollups仍然是黄金标准,并具有无法匹敌的安全性质。从开发者体验的角度来看,这一点尤其明显:没有什么能够比得上应用开发者根本不必考虑其应用程序内的所有权图和激励流程的简单性。
然而,Plasma让我们完全规避了数据可用性问题,极大地降低了交易费用。对于本来可以使用validiums的链来说,Plasma可以是一个重大的安全升级。今年ZK-EVMs的实现使得重新探索这一设计领域成为一个绝佳的机会,并提出更加有效的构建,以简化开发者体验并保护用户资金。