等离子体 (Plasma) 链
等离子体 (Plasma) 链是一条独立的区块链,锚定到以太坊主网,但在链下执行交易,并拥有自己的区块验证机制。Plasma 链有时被称为“子”链,本质上是以太坊主网的较小副本。Plasma 链使用(类似于乐观汇总)来仲裁争议。
默克尔树允许创建无尽的此类链堆栈,从而可以减轻父链(包括以太坊主网)的带宽负担。然而,虽然这些链从以太坊获得了一定的安全性(通过欺诈证明),但它们的安全性与效率受到了一些设计限制的影响。
先决条件
你应该对所有基础主题有很好的理解,并对以太坊扩容有高层次的认识。
什么是等离子体 (Plasma)?
Plasma 是一个用于提高以太坊等公有区块链可扩展性的框架。正如最初的 Plasma 白皮书 (opens in a new tab)中所述,Plasma 链构建在另一条区块链(称为“根链”)之上。每个“子链”都从根链延伸出来,通常由部署在父链上的智能合约进行管理。
Plasma 合约的功能之一是充当跨链桥,允许用户在以太坊主网和 Plasma 链之间转移资产。尽管这使得它们类似于侧链,但 Plasma 链至少在某种程度上受益于以太坊主网的安全性。这与完全对其自身安全性负责的侧链不同。
Plasma 是如何工作的?
Plasma 框架的基本组件包括:
链下计算
以太坊目前的处理速度限制在每秒约 15-20 笔交易,这降低了短期内扩容以处理更多用户的可能性。这个问题存在的主要原因是,以太坊的共识机制要求许多点对点节点验证区块链状态的每一次更新。
尽管以太坊的共识机制对于安全性是必要的,但它可能并不适用于每个用例。例如,Alice 每天向 Bob 支付一杯咖啡的钱,可能不需要整个以太坊网络来验证,因为双方之间存在一定的信任。
Plasma 假设以太坊主网不需要验证所有交易。相反,我们可以在主网之外处理交易,使节点免于验证每笔交易。
链下计算是必要的,因为 Plasma 链可以针对速度和成本进行优化。例如,Plasma 链可以(并且通常确实)使用单个“运营商”来管理交易的排序和执行。由于只有一个实体验证交易,Plasma 链上的处理时间比以太坊主网更快。
状态承诺
虽然 Plasma 在链下执行交易,但它们在以太坊主执行层上结算——否则,Plasma 链无法受益于以太坊的安全保证。但是,在不知道 Plasma 链状态的情况下最终确定链下交易将破坏安全模型,并导致无效交易的激增。这就是为什么要求运营商(负责在 Plasma 链上生成区块的实体)定期在以太坊上发布“状态承诺”。
承诺方案 (opens in a new tab)是一种密码学技术,用于对某个值或声明做出承诺,而不向另一方透露该值或声明。承诺具有“约束力”,这意味着一旦你做出了承诺,就无法更改该值或声明。Plasma 中的状态承诺采用“默克尔根”(源自默克尔树)的形式,运营商会定期将其发送到以太坊链上的 Plasma 合约。
默克尔根是能够压缩大量信息的密码学原语。默克尔根(在这种情况下也称为“区块根”)可以代表一个区块中的所有交易。默克尔根还使得验证一小段数据是否属于较大数据集变得更加容易。例如,用户可以生成一个默克尔证明,以证明某笔交易包含在特定区块中。
默克尔根对于向以太坊提供有关链下状态的信息非常重要。你可以将默克尔根视为“保存点”:运营商在说,“这是 Plasma 链在 x 时间点的状态,这是作为证明的默克尔根。”运营商使用默克尔根对 Plasma 链的_当前状态_做出承诺,这就是为什么它被称为“状态承诺”。
进入和退出
为了让以太坊用户能够利用 Plasma,需要一种在主网和 Plasma 链之间转移资金的机制。但是,我们不能随意将以太币发送到 Plasma 链上的地址——这些链是不兼容的,因此交易要么会失败,要么会导致资金丢失。
Plasma 使用运行在以太坊上的主合约来处理用户的进入和退出。该主合约还负责跟踪状态承诺(如前所述),并通过欺诈证明惩罚不诚实行为(稍后会详细介绍)。
进入 Plasma 链
要进入 Plasma 链,Alice(用户)必须在 Plasma 合约中存入 ETH 或任何 ERC-20 代币。监控合约存款的 Plasma 运营商会重新创建与 Alice 初始存款相等的金额,并将其释放到她在 Plasma 链上的地址。Alice 需要证明在子链上收到了资金,然后就可以使用这些资金进行交易。
退出 Plasma 链
退出 Plasma 链比进入它更复杂,原因有几个。最大的原因是,虽然以太坊拥有关于 Plasma 链状态的信息,但它无法验证该信息是否真实。恶意用户可能会做出错误的断言(“我有 1000 ETH”),并侥幸提供虚假证明来支持该声明。
为了防止恶意提款,引入了“挑战期”。在挑战期(通常为一周)内,任何人都可以使用欺诈证明对提款请求提出挑战。如果挑战成功,则提款请求将被拒绝。
然而,通常情况下,用户是诚实的,并对他们拥有的资金做出正确的声明。在这种情况下,Alice 将通过向 Plasma 合约提交交易,在根链(以太坊)上发起提款请求。
她还必须提供一个默克尔证明,以验证在 Plasma 链上创建其资金的交易已包含在区块中。这对于使用 未花费的交易输出 (UTXO) (opens in a new tab) 模型的 Plasma 迭代(例如 Plasma MVP (opens in a new tab))是必要的。
其他迭代(如 Plasma Cash (opens in a new tab))将资金表示为非同质化代币,而不是 UTXO。在这种情况下,提款需要提供 Plasma 链上代币的所有权证明。这是通过提交涉及该代币的最近两笔交易,并提供验证这些交易包含在区块中的默克尔证明来完成的。
用户还必须在提款请求中添加保证金,作为诚实行为的保证。如果挑战者证明 Alice 的提款请求无效,她的保证金将被罚没,其中一部分将作为奖励发给挑战者。
如果挑战期结束而没有人提供欺诈证明,Alice 的提款请求将被视为有效,从而允许她从以太坊上的 Plasma 合约中取回存款。
争议仲裁
与任何区块链一样,Plasma 链需要一种机制来强制执行交易的完整性,以防参与者采取恶意行为(例如,双重支付资金)。为此,Plasma 链使用欺诈证明来仲裁有关状态转换有效性的争议,并惩罚不良行为。欺诈证明被用作一种机制,Plasma 子链通过该机制向其父链或根链提出投诉。
欺诈证明仅仅是声称特定状态转换无效的声明。一个例子是,如果用户 (Alice) 试图将同一笔资金花费两次。也许她在与 Bob 的交易中花费了该 UTXO,并希望在另一笔交易中花费相同的 UTXO(现在属于 Bob)。
为了阻止提款,Bob 将构建一个欺诈证明,提供 Alice 在先前交易中花费上述 UTXO 的证据,以及该交易包含在区块中的默克尔证明。同样的过程也适用于 Plasma Cash——Bob 需要提供证明,证明 Alice 早些时候转移了她试图提取的代币。
如果 Bob 的挑战成功,Alice 的提款请求将被取消。然而,这种方法依赖于 Bob 监控链上提款请求的能力。如果 Bob 离线,那么一旦挑战期结束,Alice 就可以处理恶意提款。
Plasma 中的大规模退出问题
当大量用户试图同时从 Plasma 链提款时,就会出现大规模退出问题。这个问题存在的原因与 Plasma 最大的问题之一有关:数据不可用。
数据可用性是指验证提议区块的信息是否实际发布在区块链网络上的能力。如果区块生产者发布了区块本身,但隐瞒了用于创建该区块的数据,则该区块是“不可用的”。
如果节点要能够下载区块并验证交易的有效性,区块必须是可用的。区块链通过强制区块生产者将所有交易数据发布到链上来确保数据可用性。
数据可用性还有助于保护构建在以太坊基础层之上的链下扩容协议。通过强制这些链上的运营商在以太坊上发布交易数据,任何人都可以通过构建引用链正确状态的欺诈证明来挑战无效区块。
Plasma 链主要将交易数据存储在运营商处,并且不在主网上发布任何数据(即除了定期的状态承诺之外)。这意味着如果用户需要创建欺诈证明来挑战无效交易,他们必须依赖运营商提供区块数据。如果这个系统有效,那么用户总是可以使用欺诈证明来保护资金。
当运营商(而不仅仅是任何用户)成为恶意行为方时,问题就开始了。因为运营商完全控制着区块链,他们有更大的动机在更大范围内推进无效的状态转换,例如窃取属于 Plasma 链上用户的资金。
在这种情况下,使用经典的欺诈证明系统是行不通的。运营商可以轻易地进行一笔无效交易,将 Alice 和 Bob 的资金转移到他们的钱包中,并隐藏创建欺诈证明所需的数据。这是可能的,因为不要求运营商向用户或主网提供数据。
因此,最乐观的解决方案是尝试让用户从 Plasma 链“大规模退出”。大规模退出减缓了恶意运营商窃取资金的计划,并为用户提供了一定程度的保护。提款请求根据每个 UTXO(或代币)的创建时间进行排序,从而防止恶意运营商抢跑诚实用户。
尽管如此,我们仍然需要一种方法来验证大规模退出期间提款请求的有效性——以防止投机取巧的人在混乱中处理无效退出来牟利。解决方案很简单:要求用户发布链的最后一个有效状态才能退出他们的资金。
但这种方法仍然存在问题。例如,如果 Plasma 链上的所有用户都需要退出(在恶意运营商的情况下这是可能的),那么 Plasma 链的整个有效状态必须一次性转储到以太坊的基础层上。考虑到 Plasma 链的任意大小(高吞吐量 = 更多数据)以及以太坊处理速度的限制,这不是一个理想的解决方案。
尽管退出博弈在理论上听起来不错,但现实生活中的大规模退出很可能会引发以太坊本身的全网拥堵。除了损害以太坊的功能外,协调不佳的大规模退出意味着用户可能无法在运营商耗尽 Plasma 链上的每个账户之前提取资金。
Plasma 的优点和缺点
| 优点 | 缺点 |
|---|---|
| 提供高吞吐量和低单笔交易成本。 | 不支持通用计算(无法运行智能合约)。仅通过谓词逻辑支持基本的代币转移、兑换和少数其他交易类型。 |
| 适合任意用户之间的交易(如果双方都在 Plasma 链上建立,则每对用户没有额外开销)。 | 需要定期监控网络(活跃度要求)或将此责任委托给其他人,以确保你的资金安全。 |
| Plasma 链可以适应与主链无关的特定用例。任何人(包括企业)都可以自定义 Plasma 智能合约,以提供在不同环境中工作的可扩展基础设施。 | 依赖一个或多个运营商来存储数据并在收到请求时提供数据。 |
| 通过将计算和存储移至链下,减轻了以太坊主网的负载。 | 提款会延迟几天以允许挑战。对于同质化资产,这可以通过流动性提供者来缓解,但会产生相关的资金成本。 |
| 如果太多用户试图同时退出,以太坊主网可能会变得拥堵。 |
Plasma vs 二层网络 (l2) 扩容协议
虽然 Plasma 曾经被认为是以太坊有用的扩容解决方案,但它后来被放弃,取而代之的是二层网络 (l2) 扩容协议。二层网络 (l2) 扩容解决方案弥补了 Plasma 的几个问题:
效率
零知识汇总生成在链下处理的每批交易有效性的密码学证明。这防止了用户(和运营商)推进无效的状态转换,消除了对挑战期和退出博弈的需求。这也意味着用户不必定期监控链来保护他们的资金。
支持智能合约
Plasma 框架的另一个问题是无法支持以太坊智能合约的执行 (opens in a new tab)。因此,Plasma 的大多数实现主要是为简单支付或 ERC-20 代币的交换而构建的。
相反,乐观汇总兼容以太坊虚拟机 (EVM),并且可以运行以太坊原生的智能合约,使其成为扩容去中心化应用 (dapp) 的有用且_安全_的解决方案。同样,目前正在计划创建 EVM 的零知识实现 (zkEVM) (opens in a new tab),这将允许 ZK 汇总处理任意逻辑并执行智能合约。
数据不可用
如前所述,Plasma 存在数据可用性问题。如果恶意运营商在 Plasma 链上推进了无效转换,用户将无法对其提出挑战,因为运营商可以隐瞒创建欺诈证明所需的数据。汇总通过强制运营商在以太坊上发布交易数据来解决这个问题,允许任何人验证链的状态并在必要时创建欺诈证明。
大规模退出问题
ZK 汇总和乐观汇总都以各种方式解决了 Plasma 的大规模退出问题。例如,一个 ZK-rollup 依赖于密码学机制,确保运营商在任何情况下都无法窃取用户资金。
同样,乐观汇总对提款施加了延迟期,在此期间任何人都可以发起挑战并阻止恶意提款请求。虽然这与 Plasma 类似,但区别在于验证者可以访问创建欺诈证明所需的数据。因此,Rollup 用户无需参与疯狂的、“争先恐后”向以太坊主网的迁移。
Plasma 与侧链和分片有何不同?
Plasma、侧链和分片非常相似,因为它们都以某种方式连接到以太坊主网。然而,这些连接的级别和强度各不相同,这影响了每种扩容解决方案的安全属性。
Plasma vs 侧链
侧链是一条独立运营的区块链,通过双向跨链桥连接到以太坊主网。跨链桥允许用户在两条区块链之间交换代币,以便在侧链上进行交易,从而减少以太坊主网上的拥堵并提高可扩展性。 侧链使用独立的共识机制,通常比以太坊主网小得多。因此,将资产跨链到这些链会增加风险;鉴于侧链模型缺乏从以太坊主网继承的安全保证,用户在侧链受到攻击时面临资金损失的风险。
相反,Plasma 链的安全性源自主网。这使得它们明显比侧链更安全。侧链和 Plasma 链都可以有不同的共识协议,但区别在于 Plasma 链在以太坊主网上发布每个区块的默克尔根。区块根是一小段信息,我们可以用它来验证有关在 Plasma 链上发生的交易的信息。如果 Plasma 链上发生攻击,用户可以使用适当的证明安全地将资金提取回主网。
Plasma vs 分片
Plasma 链和分片链都定期向以太坊主网发布密码学证明。然而,两者具有不同的安全属性。
分片链向主网提交包含每个数据分片详细信息的“排序头 (collation headers)”。主网上的节点验证并强制执行数据分片的有效性,从而降低无效分片转换的可能性,并保护网络免受恶意活动的侵害。
Plasma 有所不同,因为主网仅接收有关子链状态的最少信息。这意味着主网无法有效验证在子链上进行的交易,从而降低了它们的安全性。
注意,以太坊区块链的分片已不再位于路线图上。它已被通过汇总和丹克分片进行扩容所取代。
使用 Plasma
多个项目提供了 Plasma 的实现,你可以将其集成到你的去中心化应用 (dapp) 中:
- Polygon (opens in a new tab)(前身为 Matic Network)
延伸阅读
- 学习 Plasma (opens in a new tab)
- 快速回顾“共享安全”的含义及其重要性 (opens in a new tab)
- 侧链 vs Plasma vs 分片 (opens in a new tab)
- 理解 Plasma,第 1 部分:基础知识 (opens in a new tab)
- Plasma 的生与死 (opens in a new tab)
知道对你有帮助的社区资源吗?编辑本页面并添加它!
教程:以太坊上的 Plasma 链
- 编写保护隐私的特定应用 Plasma – 使用零知识证明和链下组件构建保护隐私的 Plasma 应用程序。