复制成功

分享至

主页 > 数字货币 >

EVM有效验证的退出游戏:Plasma 的回归

2023.11.15

作者:Vitalik;编译:松雪,金色财经

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

Plasma是一类区块链扩展解决方案,允许除了存款、提款和默克尔根之外的所有数据和计算都保留在链下。这为实现非常大的可扩展性提供了可能,而这种可扩展性不受链上数据可用性的限制。Plasma最初是在2017年创建的,在2018年经历了许多迭代,其中最值得注意的是Minimal Viable Plasma、Plasma Cash、Plasma Cashflow和Plasma Prime。不幸的是,由于(i)庞大的客户端数据存储成本和(ii)Plasma的基本限制,使其难以推广到支付以外的领域,Plasma在很大程度上已经被Rollup技术所取代。

有效性证明(也称为ZK-SNARKs)的出现使我们有理由重新思考这个决定。使Plasma在支付方面可行的最大挑战,即客户端数据存储,可以通过有效性证明进行高效地解决。此外,有效性证明提供了各种工具,使我们能够创建一个类似于运行以太坊虚拟机(EVM)的Plasma链。尽管 Plasma 的安全性保证不能涵盖所有用户,因为将 Plasma 式退出游戏扩展到许多复杂应用程序的根本原因仍然存在不可能性。然而,在实践中,仍然可以保护非常大比例的资产。

这篇文章描述了如何将 Plasma 的思想扩展以实现这样的目标。

一、概述:Plasma 的工作原理

Plasma Cash 的最简单版本是 Plasma Cash。Plasma Cash 的工作方式是将每个单独的代币视为一个独立的非同质代币(NFT),并为每个代币跟踪一个单独的历史。Plasma 链有一个运营者,负责创建并定期发布区块。每个区块中的交易以稀疏的 Merkle 树存储:如果一笔交易转移了代币 k 的所有权,则它出现在树的位置 k。当 Plasma 链的运营者创建一个新的区块时,他们将 Merkle 树的根哈希发布到链上,并直接将对应于用户所拥有的代币的 Merkle 分支发送给每个用户。

LR05QLlz7hPsKR6UjSBkYEULKPHmYrwIq9cRoURQ.jpeg

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

任何 Plasma 系统中的主要风险是运营者的不当行为。这可以通过两种方式发生:

  1. 发布无效块(例如,运营者包括一笔交易,即使在那时 Fred 并不拥有代币 1,也将其发送给 Hermione)。

  2. 发布不可用的块(例如,运营者没有向 Bob 发送他某个块的 Merkle 分支,阻止他向他人证明他的代币仍然有效且未使用)。

如果运营者以与用户资产相关的方式产生不当行为,用户有责任立即退出(具体而言,必须在 7 天内退出)。当用户(“退出者”)退出时,他们提供一个 Merkle 分支,证明了将该代币从先前所有者转移到他们名下的交易。这启动了一个为期 7 天的挑战期,在此期间,其他人可以通过提供以下三者之一的 Merkle 证明来对该退出进行挑战:

  1. 非最新所有者:由退出者签署的将退出者的代币转移到其他人名下的后续交易;

  2. 双花:将代币从先前所有者转移到其他人名下的交易,该交易在将代币转移到退出者名下的交易之前已经被包含;

  3. 无效历史:在退出前(在过去的 7 天内)转移代币的交易,没有相应的支出。退出者可以通过提供相应的支出来进行回应;如果他们没有这样做,退出将失败。

lQAGielcGhqSeEWS0ZeFMgONc7c2NMeM8mfpjpNy.jpeg

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

推广到可互换代币

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

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

几乎原封不动地使用Plasma Cash,但使用复杂的算法,如果许多相邻的对象相同,则可以非常快速地计算出非常大数量对象的Merkle树。这实际上并不那么难实现;你可以在这里找到一个Python实现。

使用Plasma Cashflow,它简单地将许多相邻的代币表示为一个单一的对象。

免责声明:数字资产交易涉及重大风险,本资料不应作为投资决策依据,亦不应被解释为从事投资交易的建议。请确保充分了解所涉及的风险并谨慎投资。OKEx学院仅提供信息参考,不构成任何投资建议,用户一切投资行为与本站无关。

加⼊OKEx全球社群

和全球数字资产投资者交流讨论

扫码加入OKEx社群

相关推荐

industry-frontier