数据可用性和扩展区块链

中央情报局。对于大多数人来说,这个首字母缩略词让人联想到一个穿着考究的间谍在国外某个地方玩斗篷和匕首的形象。

介绍

由于以太坊的高交易费用,可扩展性一直是许多加密货币项目的首要考虑因素。一种流行的解决方案是将程序执行与第 1 层共识机制分开,将前者卸载到链下运营商。Vitalik 提出的最新以太坊基金会 路线图 甚至描绘了一个世界,其中大部分交易发生在“第 2 层”(L2)中,并且仅定期在以太坊 2.0 主链上结算。

尽管这个想法正在获得关注,但它并不新鲜。2017 年,面对越来越多的 dApp(如 Cryptokitties)的使用,Plasma 和状态通道等方法被认为是一种提高可扩展性的方法。但即使使用汇总等较新的方法, 数据可用性 仍然是一项重大挑战。因为即使可以将计算与共识层分离以获得更大的交易吞吐量,它也会增加智能合约执行模型的复杂性,特别是对于可组合合约而言。此外,更多的可扩展性通常是以去中心化为代价的。[1]

在这篇文章中,我认为数据可用性是可扩展性的关键考虑因素。我将从定义数据可用性的概念开始。然后,我将更详细地讨论这个问题与扩展区块链的关系。最后,我将调查目前正在使用的解决方案,以及即将出现的一些解决方案。

什么是“数据可用性”? 中央情报局。对于大多数人来说,这个首字母缩略词让人联想到一个穿着考究的间谍在国外某个地方玩斗篷和匕首的形象。但 CIA 也是信息安全关键原则的首字母缩写词: 机密性、 完整性、 可用性。其中,可用性是当今与区块链可扩展性最相关的。

要理解数据可用性意味着什么,我们必须首先定义两个重要术语: 状态 和 状态转换。假设您有一个手写的分类帐,您可以在其中跟踪谁欠您的钱。账本在任何一个时刻的样子被称为它的“状态”。

您刚刚赢得了与朋友的赌注,因此想在分类帐中添加一个条目。之后,分类帐将有一个额外的条目,因此将与以前不同。写一个名字和数量是状态转换的一个例子:或者我们如何从一个状态转移到下一个状态。

您可能想知道这与区块链有什么关系,但上面的系统描述了计算机在低级别大致如何工作。它从内存或存储中读取一些数据,根据该数据运行一些程序,然后输出结果,可能通过将结果显示给用户或将其写入磁盘。根据以上描述,计算机程序采用先前状态并执行状态转换,结果创建新状态。

如果我们考虑一下这种(诚然过于简单化的)计算机模型,我们会发现状态和状态转换都是必不可少的。我们如何在没有数据的情况下运行“程序”?一个不能从一个状态转移到另一个状态的程序有什么意义(就像我们简单的分类账一样)?

科学在 Unsplash 上 的高清照片 数据可用性和区块链可扩展性 对像以太坊这样的区块链进行建模的一种方法是作为分布式“世界计算机”。区块链网络不是一台机器,而是由许多机器组成,这些机器跟踪相同的全局状态,并就从一个状态到另一个状态的转换应该如何发生达成一致。因此,链中的每个新区块都基于运营网络的节点之间的共识。每个新块都包含新的分类帐状态。它还包含描述从前一个块到当前块的状态转换的单个事务。这样,其他节点可以验证状态转换和新状态是否有效。否则,他们拒绝它并且该块不会被添加到链中。[2]

与集中式网络相比,区块链速度较慢,因为每个节点都必须处理每个状态更新,这是低效的。[3] 正如我们之前提到的,已经有不同的提议来删除这个要求并将执行与共识分开。以下是一些已经提出的方案。

渠道——两方在链下进行交互,一段时间后在链上结算最终结果。如有争议,任何一方均可随时退出。这已经发展成为一个相当强大的解决方案,即使是多方(参见 闪电网络),但它假设所有各方通常都保持在线,并且很难概括以解释智能合约交互。 Plasma — 操作员将交易处理成单独侧链上的块。该侧链通过管理用户存款和进入/退出侧链的智能合约连接到主链。如果运营商行为不端,用户可以提交欺诈证明来赎回他们在主链上的存款。由于去中心化程度较低, Plasma 可以显着提高交易吞吐量。但是,在 Plasma 链出现大规模退出的情况下,主链拥堵可能会导致部分用户无法及时认领资产。 Rollups——与 Plasma 类似,在 rollup中, 用户将交易提交给链下不受信任的运营商。然而,与 Plasma 不同的是,汇总运营商将每个区块的结果状态发布到主链上。这允许任何人验证状态转换的正确性,并且它确实提供了更高的吞吐量,因为主链上的节点不会执行每笔交易。然而,由于 rollup 将数据存储在链上,它们提供的可扩展性优势在一定程度上受到限制——大约比 Plasma 之类的产品小一个数量级。此外,主链的状态以更快的速度增长。 这些方法中的每一种都将每个节点的执行负担减少到少数处理交易但不结算交易的运营商身上。这提高了效率和吞吐量。在所有参与者都诚实的情况下,这些方法中的任何一种都可以在今天发挥作用。当然,如果是这样的话,我们为什么还要使用区块链呢?任何可扩展性解决方案都必须考虑一个或多个参与者和/或运营商不诚实的情况。我们希望防止两种类型的不当行为。例如,我们希望确保状态转换的完整性(记住 CIA 中的“I”)。换句话说,我们要确保任何一方都不能通过例如双花来“欺骗”系统规则。该问题的解决方案通常分为加密或加密经济。

  1. 加密——基于数学的加密协议将用户可以采取的行动限制在协议允许的范围内。一个例子是 zk-rollup,它使用零知识证明来证明给定块内交易的有效性。

  2. 加密经济——一些经济激励(或惩罚)鼓励所有协议参与者遵守规则。例如,Plasma 用户提交欺诈证明退出侧链,导致运营商被 slash。 乐观汇总 还使用欺诈证明来让汇总操作员在该计划中负责。

但操作员行为不端的一种更微妙的方式是隐瞒状态。这可以防止其他参与者验证交易的有效性。如果没有这些信息,我们如何证明不当行为并对行为不端的运营商实施处罚?这就像在审判前销毁证据以逃避定罪。因此,完整的数据可用性对于确保分散系统中的所有参与者能够相互问责至关重要。

这就是汇总成为主流扩展解决方案的原因之一。他们的解决方案是将所有交易数据存储在以太坊上(尽管执行仍然是脱链的)。然而,与其他方法相比,这提供了更有限的好处。 例如,ZK rollups可以将 ETH 交易吞吐量从 15-20 TPS 提高到 1000-2000 左右。这是一个进步,但仍远不能支持 Visa 交易量的一小部分。我们能做得更好吗?

美国国家航空航天局在Unsplash上拍摄的照片 潜在的解决方案 可扩展性没有“灵丹妙药”,可以同时提供无限的交易吞吐量和完整的数据可用性,同时保持去中心化。但是有一些方法可以减少必须存储整个交易历史的负担,或者可以更有效地批量验证状态转换。下面是一个不完整的列表。

更有效的数据恢复/存储方法——使用像 Reed-Solomon 码这样的纠错技术(以及像 Coded Merkle Trees这样的新方法),我们可以仅从数据的一个子集重建块。这与创建 CD 时使用的方法相同,即使光盘可能有一些划痕,我们也可以聆听。 NEAR 协议和 Polkadot 使用这些方法来帮助解决其链上的数据可用性问题。

数据可用性作为一个单独的组件——我们已经讨论过将共识与程序执行分开。如果我们可以采用同样的模块化理念并将其应用到数据可用性中呢?这就是 LazyLedger背后的理念,这是一个完全优化为支持 L2 汇总的数据可用性层的区块链。或者像 Arweave(为永久存储而构建)这样的区块链可以用于存储来自其他链的数据。 Solana 今天正在这样做。

递归 SNARK — 零知识证明保证计算完整性。它们不提供数据可用性。然而,递归组合 SNARK 可以通过验证曾经发生的每个状态转换来减轻轻客户端和全节点的负担。这类似于 Incrementally-Verifiable Computation的密码学思想,也是支撑 Mina等区块链的基本思想之一。

结论 作为一名前投资者,我多次听到“产品 x”是“问题 y”的完美解决方案的说法。我学会了问的问题是:“在什么假设下?” 对于一个长期存在的问题,一个看似明显的解决方案很少被考虑在内。在分布式网络中将计算与共识分离是一个自然的想法。有很多方法可以确保计算的 完整性 。但确保数据 可用性的问题 通常是您发现支撑整个系统安全性的关键假设的地方。随着 DeFi 应用程序从以太坊主链转移到第 2 层,我们作为用户需要充分了解各种权衡,以便做出明智的决定。作为下一代网络的建设者,我们必须努力在可扩展性与去中心化之间取得平衡,并意识到没有免费的午餐。

感谢 Anna Rose、Richard Chen 和 Emre Tekisalp 审阅了这篇文章