文章讨论了以太坊的二层扩展协议的现状和未来发展,特别是对比了Plasma、状态通道和新型的ZK Rollup与乐观Rollup技术,分析了它们在数据可用性、安全性和扩展性方面的挑战与优势。
特别感谢 Plasma Group 团队的审阅和反馈
当前的Layer2 扩展方案——基本上是 Plasma 和状态通道——正在逐渐从理论转向实践,但与此同时,这些技术作为以太坊的全面扩展解决方案所固有的挑战也越来越明显。以太坊之所以取得成功在很大程度上是因为它具有非常容易的开发者体验:你写一个程序,发布它,任何人都可以与之交互。另一方面,设计状态通道或 Plasma 应用程序依赖于大量对激励和特定应用程序开发复杂性的明确推理。状态通道在特定用例下表现良好,例如同一方之间的重复付款和双人游戏(如 Celer 成功实现的那样),但更广泛的使用正在证明具有挑战性。Plasma,特别是 Plasma Cash,在支付方面可以工作得很好,但同样地,广泛应用也面临挑战:即使实施去中心化交易所也要求客户存储更多的历史数据,而且在 Plasma 上泛化到以太坊风格的智能合约似乎极为困难。
但与此同时,一类被遗忘的“半Layer2”协议正在复苏——这一类别承诺在扩展方面获得较少的极端收益,但带来了更容易的泛化和更有利的安全模型。一个 2014 年长期被遗忘的博客文章 提出了“影子链”的概念,这是一种架构,其中区块数据链上发布,但区块不会默认被 验证。相反,区块被暂时接受,只有经过一段时间(例如 2 周)后才会最终确定。在这 2 周内,暂时接受的区块可以被挑战;只有到那时,区块才会被验证,如果区块被证明是无效的,则从那个区块开始的链将被回滚,而原始发布者的押金将受到惩罚。合约不跟踪系统的完整状态;它只跟踪状态根,用户可以通过处理提交到链上的数据从开始到头计算状态。一个更近期的提议,ZK Rollup,在没有挑战阶段的情况下,实现了同样的效果,使用 ZK-SNARKs 来验证区块的有效性。
在这两种情况下,主链用于验证数据的 可用性,但不(直接)验证区块的 有效性 或执行任何重大计算,除非发生挑战。因此,这项技术并不是令人瞩目的巨大扩展收益,因为链上的数据开销最终呈现出瓶颈,但它仍然是一项非常重要的进步。数据比计算便宜,而且有方法可以显著压缩交易数据,尤其是因为交易中的大多数数据都是签名,并且许多签名可以通过许多形式的聚合压缩成一个。ZK Rollup 承诺 500 tx/sec,这比以太坊链本身提升了 30 倍,通过将每个交易压缩到仅 ~10 字节;因为它们的有效性通过零知识证明进行验证,签名不需要包括在内。通过 BLS 聚合签名,类似的吞吐量可以在影子链中实现(最近被称为“乐观 rollup”,以强调其与 ZK Rollup 的相似性)。即将到来的 Istanbul 硬分叉 将把数据的 gas 成本从每字节 68 降低到每字节 16,为这些技术的吞吐量再增加 4 倍(这意味着 超过 2000 笔交易每秒)。
那么,ZK/乐观滚动和 Plasma 等链外数据技术的差异是什么?首先,无需半信任的运营商。在 ZK Rollup 中,因有效性通过加密证明进行验证,实际上不存在恶意发布者(根据设置,恶意发布者可能会使系统暂停几秒钟,但这就是能造成的最大伤害)。在乐观 rollup 中,恶意发布者可以发布错误的区块,但下一个提交者会立即在发布自己的区块之前挑战那个区块。在 ZK 和乐观 rollup 中,在链上发布了足够的数据,允许任何人按顺序处理所有提交的增量计算完整的内部状态,并且没有“数据隐瞒攻击”会剥夺这一属性。因此,成为运营商可以完全不受许可;唯一需要的是一个安全押金(例如 10 ETH)作为防垃圾邮件用途。
其次,乐观 rollup 特别容易泛化;乐观 rollup 系统中的状态转移函数可以是字面上的任何一个可以在单个区块的 gas 限制内计算的内容(包括提供验证转换所需状态部分的梅克尔树枝)。就理论上而言,ZK Rollup 也可以以相同的方式泛化,尽管在实际中在通用计算(例如 EVM 执行)上制作 ZK SNARKs 非常困难,至少在现在如此。第三,乐观 rollup 构建客户端要简单得多,因为对二层网络基础设施的需求较少;更多的工作可以通过扫描区块链来完成。
但是,这些优势来自哪里?答案在于一个被称为 数据可用性问题 的高度技术性问题(见 说明,视频)。基本上,在Layer2 系统中有两种作弊方式。第一种是向区块链发布无效数据。第二种是根本不发布数据(例如,在 Plasma 中,向主链发布一个新 Plasma 区块的根哈希,但不向任何人透露该区块的内容)。发布但无效的数据非常容易处理,因为一旦数据在链上发布,就有多种方式能够明确判断其有效性,而一个无效的提交就是毫无疑问地无效,因此提交者会受到重罚。另一方面,不可用数据则更难处理,因为尽管可以在被挑战时检测到不可用性,但不能可靠地确定非发布的责任,尤其是在数据默认被隐瞒并在某种验证机制尝试验证其可用性时按需公开时。这在“渔夫困境”中得到了说明,该困境显示挑战响应游戏无法区分恶意提交者和恶意挑战者:
Plasma 和通道都通过将问题推给用户来解决渔夫困境:如果你作为用户判断与之交互的另一个用户(状态通道中的对手,Plasma 链中的运营商)不向你发布他们应该发布的数据,那么你有责任退出并转向不同的对手/运营商。事实上,你作为用户拥有所有 先前 数据以及有关所有你 签名 的交易的数据,这使你能够向链证明你在Layer2 协议中持有的资产,从而可以安全地将其带出系统。你证明了一个(先前同意的)操作的存在,该操作将资产给你,其他人无法证明由你批准的将资产发送给他人的操作的存在,因此你获得了资产。
这一技术非常优雅。然而,它依赖于一个关键假设:每个状态对象都有一个逻辑“所有者”,并且对象的状态无法在未得到所有者的同意下进行更改。对于基于 UTXO 的付款而言,这种方式效果良好(但对于基于账户的付款不然,基于账户的支付允许在没有其同意的情况下对他人的余额进行 提升;这就是为什么基于账户的 Plasma 如此困难),而且它甚至可以用于去中心化交易所,但“所有权”属性远非普遍。有些应用程序,例如 Uniswap,没有自然的所有者,即使在那些有所有者的应用中,也常常有多人可以合法地对对象进行编辑。而且,没有办法允许任意第三方在没有引入拒绝服务(DoS)攻击可能性的情况下退出资产,正因为无法证明发布者或提交者的错误。
还有其他一些问题是 Plasma 和通道各自面临的个例。通道不允许向未在通道中的用户进行链外交易(论点:假设存在一种方法可以从通道内部向任意新用户发送 $1。那么这种技术可以多次并行使用向比系统中的资金还多的用户发送 $1,从而破坏其安全保证)。Plasma 要求用户存储大量历史数据,当不同资产可以混合时,这个问题会变得更加严重(例如,当资产的转移以另一个资产的转移为条件时,如在单阶段订单簿机制的去中心化交易所中发生的情况)。
因为链上数据计算链下的Layer2 技术不存在数据可用性问题,所以它们没有这些弱点。ZK 和乐观 rollup 非常注意在链上放置足够的数据,以允许用户计算Layer2 系统的完整状态,确保如果任何参与者消失,一个新的参与者可以轻松取代他们。它们面临的唯一问题是如何在不在线上进行计算的情况下验证计算,这是一个简单得多的问题。而且扩展性收益显著:在 ZK Rollup 中每笔交易约 ~10 字节,而通过 BLS 聚合来聚合签名,乐观 rollup 也能够实现类似的扩展。这在理论上今天对应于 ~500 笔交易每秒,Istanbul 更新后则超过 2000 笔交易每秒。
但如果你希望更高的扩展性呢?那么在链上Layer2 和链下Layer2 协议之间有一个很大的中间地带,其中许多混合方法为你提供了两者的一些好处。举个简单的例子,基于 Plasma Cash 的去中心化交易所中,历史存储激增的问题可以通过在链上发布映射,说明哪些订单与哪些订单匹配(每个订单的存储不到 4 字节)来避免:
即使在非去中心化交易所的背景下,用户在 Plasma 中需要存储的历史量可以通过让 Plasma 链定期在链上发布一些每用户数据来减少。人们也可以想象一个平台,当某些状态 确实 有逻辑“所有者”时,其工作方法类似于 Plasma,而当没有所有者时则采用 ZK 或乐观 rollup 的工作方式。Plasma 开发者 已经开始研究 这些类型的优化。
因此,有充分的理由建议Layer2 扩展解决方案的开发者更加愿意在某些时候至少在链上发布每用户数据:这样可以大大提高开发的便利性、广泛性和安全性,并减少每用户的负担(例如,无需用户存储历史数据)。这样做的效率损失也是被夸大的:即使在完全链下的Layer2 架构中,用户存款、提款和在不同对手/提供者之间移动的情况将是不可避免且频繁发生的,因此无论如何都会有相当数量的每用户链上数据。混合路线为在准Layer2 架构中相对快速地部署完全泛化的以太坊风格智能合约打开了大门。
另请参见:
- 原文链接: vitalik.eth.limo/general...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!