区块链可扩展性一直是个热门话题。几乎所有的区块链网络都将每秒交易量(TPS)作为卖点。然而,TPS 并不是比较区块链网络的有效指标,这也使得评估它们的相对性能成为挑战。此外,高 TPS 通常要付出代价。这就出现了一个问题:这些网络是否真的有那么高扩展性,还是它们只是提高了吞吐量?
我们首先来看看如何定义可扩展性,为实现可扩展性做出了哪些取舍,以及为什么有效性证明是可扩展性的终极解决方案。
并非所有的交易都平等
首先我们要确定,简单的 TPS 指标并不是可扩展性的准确衡量标准。
为对节点执行交易进行补偿(并阻止用户用不必要的计算来扰乱网络),区块链会按照链上计算收取一定比例费用。在以太坊上,计算负担的复杂性以 gas 来衡量。由于用 gas 衡量交易复杂性非常方便,因此该术语将在本文中也应用于非以太坊区块链,尽管它通常是以太坊专有的。
交易在复杂性上存在显著差异,那对应的 Gas 也是如此。比特币是无需信任的点对点交易的先驱,只支持基本的比特币脚本。这种地址对地址的简单转移消耗的 gas 很少。相比之下,以太坊或 Solana 等智能合约链,支持虚拟机和图灵完备的编程语言,允许进行更复杂的交易。因此,像 Uniswap 这样的 DApp 需要更多的 Gas。
这就是为什么比较不同区块链之间的 TPS 没有意义。相反,我们应该比较的是计算能力,或者是吞吐量。
所有区块链都有一个(可变的)区块大小和区块时间,它们决定了每个区块可以处理多少个「计算单元」以及新出块的速度。这两个变量共同决定了区块链的「吞吐量」。
什么限制了可扩展性?
区块链的终极目标是实现去中心化、包容性最大化的网络。要实现这个目标,有两个特性必须得关注。
硬件要求
区块链网络的去中心化是由网络中最弱的节点验证验证区块链以及其保持状态的能力所决定。因此,运行一个节点的成本(硬件、带宽和存储)应尽可能低,以让更多的个体成为无需信任网络中的无需许可参与者。
状态增长
状态增长指的是区块链增长的速度。一条区块链在单位时间内的吞吐量越大,区块增长速度就越快。全节点存储网络历史,它们必须能够验证网络的状态。通过使用树状等高效结构,以太坊的网络状态得以储存和引用。随着状态增长,新的叶子和分支添加到其中,使得执行某些行动变得越来越复杂和耗时。随着链的增长,节点执行最差情况也会恶化,从而导致验证新区块的时间不断增长。随着时间推移,这也增加了同步一个全节点的总时长。
增加吞吐量的不利影响节点数
运行一个节点的最低要求以及节点数量是:
- 比特币:350GB 硬盘空间,5M/s 带宽,1GB 内存,CPU 大于 1Ghz。节点数量约 1 万
- 以太坊:500GB 以上的 SSD 硬盘空间,25 M/s 带宽,4 至 8GB 内存,CPU 2-4 核。节点数量约 6 千
- Solana:1.5TB 以上的 SSD 硬盘空间,300M/s 带宽,128GB 内存,CPU 12 核以上。节点数量约 1.2 千
请注意,区块链的吞吐量对节点的 CPU、带宽和存储要求越高,网络上的节点数量就越少,导致去中心化程度越弱,网络的包容性越差。
同步全节点的时间
当第一次运行节点时,需要与现有的所有节点进行同步,下载并验证从创世区块到链顶端的网络状态。这个过程应尽可能快且有效,以允许任何人都可以成为无需许可的协议参与者。
以 Jameson Lopp 的 2020 年比特币节点和 2021 年节点同步测试为指标,下表比较了在普通消费级 PC 上同步一个比特币与以太坊与 Solana 的完整节点所需的时间。
上表显示,增加吞吐量会导致更长的同步时间,因为越来越多的数据需要处理和存储。
尽管节点软件在不断地优化(降低磁盘占用空间,加快节点速度,增强崩溃恢复能力,组件模块化等等),以应对区块链持续增长带来的挑战,但节点显然仍然无法跟上吞吐量增加的步伐。
应该如何定义可扩展性?
可扩展性是区块链领域中误解最多的术语。虽然提升吞吐量是可取的,但它也只是难题的一部分。
可扩展性意味着在相同的硬件上有更多的交易。
所以,可扩展性可分为两类。
排序可扩展性
排序是网络中交易的排序和处理行为。如前所述,任何区块链都可以通过提高区块大小和缩短区块时间来微弱地增加其吞吐量,直至对其去中心化的负面影响显著到无法忽视为止。但是,调整这些简单的参数并不能达到所需的提升。以太坊 EVM 理论上可以处理高达约 2 千 TPS,但这不足以满足长期区块空间需求。为扩展排序,Solana 做出了创新:利用可并行的执行环境和一个巧妙的共识机制,让吞吐量的效率大大提高。但是,尽管有这些改进,它既不充分,也不具备可扩展性。随着吞吐量的增加,Solana 运行节点和处理交易的硬件成本也在增加。
验证可扩展性
验证可扩展性是在不增加硬件成本加重节点负担的情况下增加吞吐量的方法。具体来说,指的是像有效性证明这样的密码学创新,让区块链得以可持续地扩展。
什么是有效性证明 Rollup
有效性证明 Rollup(也称为 ZK-Rollup)将计算和状态存储转移到链下,链上只保留少量的特定数据。底层区块链上的一个智能合约维护 Rollup 的状态根。在 Rollup 上,一批高度压缩的交易,连同当前的状态根,发送到一个链下的证明器。证明器计算交易、生成结果和新状态根的有效性证明,并将其发送给链上的验证器。验证器验证有效性证明,存储 Rollup 状态的智能合约将其更新为证明器提供的新状态。
有效性证明 Rollup 如何在相同的硬件要求下进行扩展?
证明器对硬件要求确实高,但它们不会影响区块链的去中心化,因为交易的有效性是由数学上可验证的证明来保证的。
重要的是验证证明的要求。由于所涉及到的数据被高度压缩,并很大程度上通过计算被抽象化,它对底层区块链节点的影响是最小的。
验证器(以太坊节点)不需要高端硬件,批次的大小也不会增加硬件要求。只有状态转换和少量的调用数据需要由节点处理和存储。这允许所有以太坊节点用现有的硬件可以来验证有效性 Rollup 的批量交易。
交易越多越便宜
在传统区块链中,交易越多,区块空间占用越大,也就越昂贵。这就导致用户需要在手续费市场上竞价来优先打包交易。
而对有效性证明 Rollup 来说,这种动态是相反的。在以太坊上验证一批交易有一定成本。随着一批交易内交易数量的增加,验证该批交易的成本增加速度会以指数级降低。有效性证明中,一个批次里交易数量增多,尽管批量交易验证费用增加,但单笔交易费用反而更便宜,因为总交易成本由同一批次内所有交易均摊。有效性证明希望一个批次内有尽可能多的交易,这样验证费用就可以由批次内所有用户平摊。当批次规模增长到无限大时,每笔交易的平摊费用就会接近于零,也就是说,有效性证明的交易越多,对每个用户来说就越便宜。
dYdX,一个由有效性证明驱动的 DApp,经常有超过 1.2 万交易的批次规模。对比在以太坊主网和在有效性证明上,同样的交易的 Gas 消耗,可以说明可扩展性的提升:
在以太坊主网上结算一笔 dYdX 交易:200,000 Gas
在 StarkEx 上结算一笔 dYdX 交易:低于 500 Gas
从另一个方面来看,有效性证明 Rollup 的主要成本与同一批次的用户数量成线性比例。
为什么 Optimistic Rollup 不像大家想的那样可扩展
从理论上来讲,Optimistic Rollup 提供了与有效性证明几乎相同的可扩展性优势。但有一个重要的区别,Optimistic Rollup 针对平均情况进行优化,而有效性证明针对最坏情况进行优化。因为区块链系统是在极端对抗的条件下运行的,针对最坏情况进行优化是实现安全的唯一途径。
在 Optimistic Rollup 的最坏情况下,用户的交易不会被欺诈检查器检查。因此,为了质疑欺诈,用户必须同步一个以太坊全节点,一个 L2 全节点,并自己计算可疑的交易。
在有效性证明 Rollup 的最坏情况下,用户只需要同步一个以太坊全节点来验证有效性证明,这就节省了计算负担。
与有效性证明相比,Optimistic Rollup 的成本与交易数量呈线性关系,而不是用户数量,这也使得它的交易更昂贵。
最后的难题 — Rollup 状态的无需许可访问
用户只需运行一个以太坊节点就能保证交易的有效性。然而,用户和开发人员可能会出于各种目的想要查看、运行 Rollup 的状态和执行。「索引 L2 节点」完美满足了这个需求,它不仅可以让用户看到网络中的交易,而且也是生态系统运作所必需的关键基础设施。像 The Graph、Alchemy 和 Infura 这样的索引器,还有 Chainlink 这样的预言机网络,以及区块浏览器,无需许可的索引 L2 节点都可以完全支持。
结论
许多解决区块链可扩展性的方案错误地集中在增加吞吐量上。但是忽略了吞吐量对节点的影响:处理区块和存储历史网络的硬件要求不断增加,会妨碍网络的去中心化。
而有效性证明密码学的出现,不给节点不断加重成本负担,允许广泛的去中心化的情况下,让区块链可以实现真正的可扩展性。现在同样的硬件可以进行更多复杂且强大交易计算。这就逆转了手续费市场的困境 — 有效性证明上的活动越多,就越便宜!