以太坊面临可扩展性、gas 费用高昂、状态增长过快和 MEV 等挑战。为解决这些问题,以太坊正致力于 L1 扩容,包括提高 gas 上限、探索并行执行、控制状态增长和实施提议者-构建者分离(PBS)。同时,rollup 作为链下扩容方案,通过乐观 rollup 和零知识 rollup 等方式,在保证安全性的前提下提高交易速度并降低费用。未来的扩展方案还包括有效性证明、侧链和助推 rollup...
以太坊是最强大和最广泛使用的区块链平台之一,但正如我们一次又一次看到的那样,成功伴随着成长的烦恼。以太坊变得如此受欢迎,以至于其基础层难以跟上,gas 费用经常高到交易变得过于昂贵,并且系统正因其必须处理的所有数据而变得不堪重负。虽然以太坊开发者一直在推出诸如 EIP-1559(在第 6 章中描述)、The Merge(2022 年的硬分叉,将共识协议从 PoW 更改为 PoS)和 EIP-4844(proto-danksharding,稍后在本章中描述)之类的升级,但 L1 的基本约束仍然是大规模采用的瓶颈。这些改进有所帮助,但它们并没有消除对 L2 rollup 等额外扩容解决方案的需求。
注意
L2 rollup 是在链下处理交易,然后将摘要(例如证明或数据批次)发布到以太坊 Layer 1 的扩容解决方案。这减少了拥堵和费用,同时仍然依赖以太坊的安全性。有两种主要类型:乐观 rollup(假设有效,如果错误则发起挑战)和零知识 rollup(使用密码学证明正确性)。以太坊本质上变成了结算层,这意味着其主要角色转变为验证证明、确保数据可用性以及为 L2 交易提供最终安全保障。我们将在本章的第二部分详细探讨 rollup。
要充分理解以太坊的扩容挑战,我们需要将其分解为四个主要问题:可扩展性三难困境、gas 成本和网络拥堵、状态增长和存储以及区块传播和 MEV。这些问题并非以太坊独有——其他链也以不同的形式遇到相同的问题——但以太坊的受欢迎程度放大了这些问题。让我们深入研究每一个问题。
像任何无需许可的区块链一样,以太坊有三个基本目标:去中心化、安全性和可扩展性。但问题是:改进其中一个通常意味着牺牲另一个。这就是 Vitalik Buterin 所谓的可扩展性三难困境。
让我们来分解一下:
去中心化
去中心化使得以太坊具有抗审查性和无需信任性。任何人都可以运行节点、验证交易并参与网络,而无需中央机构的许可。
安全性
安全性确保以太坊对攻击保持弹性。交易必须是不可逆转的,智能合约必须是不可变的,恶意行为者不应该有轻易操纵系统的方法。
可扩展性
可扩展性使网络能够处理每秒数千甚至数百万笔交易(TPS),使其成为全球采用的实用选择。
挑战在于,像以太坊这样的传统区块链被设计为完全去中心化和安全,但代价是可扩展性。每笔交易都由所有节点处理,确保正确性,但也造成了瓶颈。
为什么我们不能仅仅提高吞吐量呢?如果我们试图通过使区块更大(以便它们可以容纳更多交易)来加速,那么能够运行完整节点的人将会减少,因为硬件要求将变得过于苛刻。这可能会将以太坊推向中心化,只有少数强大的实体控制着网络——这正是我们试图避免的。
其他区块链,如 Solana,采取了不同的方法。它们针对速度和可扩展性进行了优化,但以去中心化为代价,需要更强大的硬件才能运行节点。以太坊拒绝在去中心化方面妥协,这使得扩容的挑战更加艰巨。
随着 The Merge 引入的 PoS 取代了能源密集型的 PoW 系统。这不仅大幅降低了以太坊的能源消耗,还减少了能够负担大规模挖矿设置的大玩家的主导地位。虽然 staking 引入了新的中心化风险,但这仍然是朝着更易于访问和更高效的网络迈出的一步。然而,PoS 带来了新的挑战,例如大型 staking 池造成的中心化风险。流动性质押解决方案有助于保持已质押 ETH 的可访问性,但它们也将控制权集中在少数平台手中。找到合适的平衡仍然是一个持续进行的工作。
对于以太坊用户来说,最令人沮丧的体验之一是高 gas 费用,交易成本根据网络需求而剧烈波动。这是如何发生的,为什么费用在高峰时段变得如此昂贵?
以太坊交易需要 gas,这是一种衡量执行转移或智能合约交互等操作所需的计算量的单位。操作越复杂,所需的 gas 就越多。每个区块可以包含的 gas 量是有限的,这意味着对区块空间存在竞争。当需求很高时,用户相互竞价,从而推高费用。
我们已经看到了这种情况以戏剧性的方式上演:
CryptoKitties 热潮(2017 年)
这是以太坊极限的第一次真正考验。一个简单的游戏,用户可以在其中繁殖和交易数字猫,严重堵塞了网络,以至于交易时间减慢到爬行速度,gas 费用飙升。
DeFi 之夏(2020 年)
Uniswap 和 Compound 等 DeFi 应用的爆发给以太坊带来了大规模的活动。交易者争先恐后地进行交易,有时支付数百美元的 gas 费用以获得在 mempool 中的优先权。
NFT 繁荣(2021 年)
NFT 发售变成了 gas 战争,人们支付数千美元只是为了在其他人之前铸造一个新的数字收藏品。尽管用户花费了过多的 gas,但有些交易还是失败了。
以太坊的 Layer 1 并非旨在有效处理这种程度的需求。然而,2021 年 EIP-1559 的引入通过引入可变区块大小和新的 gas 定价机制改变了费用的运作方式,从而减少了网络活动高峰期间 gas 费用的飙升。L2 解决方案日益普及,使得以太坊能够卸载其大部分计算负担,从而进一步降低 gas 费用。最近,EIP-4844(proto-danksharding)已推出,显着降低了费用,特别是对于 L2 rollup 而言,并使以太坊交易对用户来说更负担得起。尽管有这些改进,以太坊的交易成本仍然高于大多数其他区块链(见图 16-1)。

图 16-1. 跨区块链的 gas 成本比较
以太坊不仅仅用于交易;它是一个全球状态机,持续跟踪帐户余额、智能合约数据、DeFi 头寸、NFT 和其他链上活动。与可以存档或删除旧记录的传统数据库不同,以太坊旨在保留其完整历史记录,从而确保透明度和可验证性。问题是?随着以太坊的增长,它需要存储更多数据,而这种存储负担越来越重。
目前,以太坊状态的大小——本质上是所有活跃帐户、合约余额和存储槽位的集合——正以惊人的速度增长。每个新的智能合约都会添加到此状态,并且每笔交易都会修改它。完整节点在验证网络完整性方面发挥着关键作用,它们必须存储并不断更新此数据。随着状态的增长,个人越来越难以在没有昂贵硬件的情况下运行完整节点,从而引发了对去中心化的担忧。
归档节点面临着更大的挑战。这些节点不仅存储当前状态,还存储以太坊的完整历史记录,包括每笔过去的交易和合约执行。此数据的庞大量达到 terabytes 级别,需要大量的存储容量和带宽。能够运行这些节点的人数正在减少,引发了关于谁将保存以太坊长期历史的问题。
验证者负责在以太坊的 PoS 系统中提议和证明区块,他们也感受到状态增长的压力。为了有效地验证交易,他们需要快速访问最新的区块链状态。但是随着状态的扩展,访问和处理此信息变得越来越慢且成本更高。如果这种趋势继续不受控制,我们可能会创造一种只有拥有高端硬件的人才能参与验证的环境,从而将以太坊推向中心化。
以太坊开发人员已经探索了控制状态膨胀的解决方案,包括历史过期和状态租金,我们将在本章后面的“扩容 L1”中详细讨论。
客户端多样性也有帮助。虽然 Geth 在历史上一直是占主导地位的以太坊客户端(参见图 16-2),但像 Nethermind、Erigon 和 Besu 这样的替代方案引入了优化,从而提高了存储效率。例如,Erigon 专门用于更有效地处理历史数据,从而减轻了完整节点的负担。

图 16-2. 以太坊客户端分布
即使以太坊可以处理更高的交易吞吐量,仍然存在另一个根本瓶颈:新区块在网络上传播所需的时间。验证者生成新区块的那一刻,该区块必须广播到全球数千个其他节点。区块越大,传播所需的时间就越长。而且传播时间越长,网络出现分歧的可能性就越高,甚至可能出现临时分叉,即网络的各个部分暂时diverge。
PoS 有助于降低这些风险,但区块传播延迟仍然会影响性能。客户端团队一直在努力进行网络优化以加快速度,但这是一个我们将随着以太坊的扩展而继续改进的挑战。
还有一个潜伏在地表之下的问题:MEV。即使以太坊已过渡到 PoS,名称“miner extractable value”仍然存在。今天,更准确的说法是 maximal extractable value,这意味着验证者和搜索者可以通过策略性地重新排序、包括或排除区块中的交易来获得的利润。
MEV 的出现是因为交易并非总是按照提交的顺序处理。相反,验证者可以根据自己的利润动机来确定交易的优先级。这为复杂的参与者创造了以损害普通用户的方式提取价值的机会。高频交易机器人扫描 mempool(以太坊的交易待处理区,尚未包含在区块中),寻找有利可图的机会。例如,如果有人在 Uniswap 等去中心化交易所提交了一笔大额交易,机器人可以抢先一步,首先购买该资产,然后再以更高的价格卖回。这被称为夹击攻击,是抢跑的一种形式,也是最臭名昭着的 MEV 形式之一。
一个运行多年的缓解措施是 MEV-Boost,这是一个由 Flashbots 开发的协议,使 MEV 更加民主和透明。然而,长期的解决方案是更根本的重新设计:proposer-builder separation (PBS) 的原生实现。我们将在下一节中更详细地探讨这些解决方案。
注意
MEV 在大多数 L2 链中基本上不存在,因为它们通常依赖于中心化的交易排序器。单个中心化的排序器通常按照接收到的确切顺序处理交易,从而消除了交易重新排序或抢跑的机会。虽然这种中心化的方法显着减少了 MEV,但它确实引入了与去中心化和抗审查性相关的潜在权衡。未来的 L2 发展旨在通过引入去中心化的排序机制来平衡这些权衡。
正在采取哪些措施来克服以太坊的扩容挑战?虽然没有单一、简单的解决方案,但开发人员正在积极致力于各种改进,以使网络更快、更便宜,并更好地适应大规模采用。让我们仔细看看他们正在探索的主要策略。
扩容以太坊的基础层(Layer 1)是我们从第一天起就面临的最艰巨的挑战之一。现实情况是,没有一种单一的解决方案可以解决所有问题;扩容不是我们可以翻转的二进制开关。相反,这是一个长期的过程:一系列优化,逐步提高以太坊的效率,而不会牺牲去中心化或安全性。虽然 L2 rollup 是我们处理大部分交易的最佳选择,但改进以太坊的基础层仍然很重要。如果我们可以提高 L1 的吞吐量和效率,rollup 将变得更加强大,gas 费用也会下降,并且以太坊可以在不诉诸中心化的情况下保持竞争力。让我们来看看我们改进以太坊基础层的一些核心方法。
以太坊的区块不受它们可以容纳的交易数量的限制,而是受每个区块中可以容纳的 gas 数量的限制。这就是 gas 上限。我们可以将其视为预算。每笔交易都会根据其复杂性消耗 gas,而区块中可用的 gas 由 EIP-1559 机制定义。提高 gas 上限意味着我们可以在每个区块中容纳更多交易,从而有效地提高以太坊的吞吐量。
但这不仅仅是提高 gas 上限那么简单。更大的区块需要更长的时间才能在网络上传播,这使得以太坊更容易受到链分裂的影响。它们还会增加完整节点的硬件要求,从而使我们更接近中心化。因此,gas 上限的增加是逐步且谨慎的,需要在吞吐量改进和网络健康之间取得平衡(参见图 16-3)。

图 16-3. 历史 gas 上限变化
由于以太坊的共享状态模型,它按顺序处理交易。这可以确保安全性和一致性,但会限制可扩展性,因为交易无法并行执行。相比之下,Solana 和 Aptos 等一些较新的区块链采用了并行执行,但它们依赖于更中心化的架构,并且需要验证者使用高性能硬件。
以太坊面临的挑战是,交易通常与相同的状态交互——例如,两个 DeFi 交易修改相同的流动性池。如果没有强大的依赖关系管理系统,重新排序它们可能会破坏智能合约逻辑。另一个复杂之处在于,完整节点必须验证所有交易,而引入并行执行将需要跨线程进行仔细的同步。
以太坊研究人员正在积极探索引入部分并行执行的解决方案,同时保持去中心化。一种方法是无状态执行,它可以减少对完整节点存储的依赖,从而使交易处理更有效率。另一种方法是乐观并发,其中假定交易是独立的,只有在出现冲突时才会回滚。我们将在本章的第二部分详细解释这些概念。
一些实验性的并行 EVM 实现已经出现在与 EVM 兼容的链中,包括 Monad、Polygon PoS 和 Shardeum。例如,Monad 实现了乐观的并行执行模型,实现了超过 10,000 TPS。Polygon PoS 通过其 Block-STM 方法实现了 1.6 倍的 gas 吞吐量增加,从而可以实现交易的部分并行化。这些进步提供了宝贵的见解,但以太坊必须在保持去中心化的同时实现并行化,这是一个仍然是关键挑战的平衡。最近的研究表明,大约 64.85% 的以太坊交易可以并行化,突出了性能改进的巨大潜力。但是,截至 2025 年 3 月,尚未有将并行执行集成到以太坊主网中的具体计划。围绕通过块结束虚拟交易并行化 EVM 的讨论正在进行中,但以太坊执行模型的复杂性使得实施具有挑战性。以太坊可扩展性的路线图包括继续研究交易依赖关系解决、替代执行模型以及逐步提高 EVM 效率。
以太坊的状态,包括所有帐户余额、智能合约存储和其他链上数据的集合,一直在增长。每个新合约都会添加更多数据,并且一旦将某些内容写入以太坊的状态,它就会永远保留在那里。这对于去中心化和可验证性来说非常棒,但对于可扩展性来说却很糟糕。完整节点必须存储和处理所有这些数据,并且随着状态的增大,运行节点的成本也会增加。
目前,完整节点的以太坊状态大小约为 1.2 TB,但存储整个历史状态和交易数据的归档节点需要超过 21 TB 的存储空间。这种庞大的数据占用空间使得个人越来越难以运行归档节点,从而将此角色集中在少数资金充足的实体手中。值得一提的是,Erigon 和 Reth 执行客户端经过优化,需要更少的存储空间,因为两者都需要大约 2 TB 的存储空间用于归档节点。
状态过期和历史过期之间经常存在混淆,但它们解决了不同的问题。状态过期旨在通过要求智能合约定期为它们消耗的存储空间支付租金来减少以太坊的活跃维护状态的大小。如果合约不支付租金,它将变得无法访问,直到有人明确支付租金以恢复它。这将显着减慢状态增长,并使完整节点更易于操作。
另一方面,历史过期处理的是过去交易数据的庞大规模。以太坊可以修剪较旧的数据,将其卸载到外部存储解决方案,而不是强制每个节点存储所有历史交易。这不会影响实时状态,但会使历史查询更加依赖于第三方数据提供商。这两种方法都有权衡取舍,目前正在进行研究以确定效率和可访问性之间的最佳平衡。
要进一步探索此主题,我们建议您研究 EIP-4444,其中涵盖了历史过期。至于状态过期,它仍处于研究阶段,因此目前尚无明确的策略,但您可以在以太坊路线图中找到更多信息。
即使在过渡到 PoS 之后,MEV 一直是以太坊中一个持续存在的问题。验证者和专门的搜索者参与交易重新排序、抢跑和其他策略,以牺牲普通用户的利益为代价来提取利润。这不仅仅是一个经济问题;它还会影响网络健康,增加拥堵并使 gas 费用变得不可预测。
PBS 是缓解 MEV 最有希望的解决方案之一。目前,验证者既提议又构建区块,这意味着他们对交易排序拥有完全的控制权。PBS 通过拆分这些角色来改变这一点:验证者仍然提议区块,但实际的区块构建通过竞争性拍卖外包给专门的构建者。这消除了验证者参与 MEV 提取的直接动机,并使交易包含更加透明。
PBS 已经以 MEV-Boost 的形式进行了测试,MEV-Boost 允许验证者将区块构建外包给出价最高的人。但是,重要的是要理解 MEV-Boost 和 PBS 不会消除 MEV;它们只会使其更加透明和公平。MEV 仍然会存在,因为驱动套利、抢跑和夹击攻击的基本激励措施不会消失。PBS 所做的是确保捕获 MEV 的过程更加开放、公平和具有竞争力,而不是少数内部人士从不透明的 MEV 策略中受益。从长远来看,其他解决方案(如订单流拍卖、加密 mempool 和其他 MEV 缓解技术)需要与 PBS 一起集成,以进一步减少其负面影响。
以太坊在可扩展性、交易吞吐量(以 TPS 衡量)和高费用方面面临着持续的挑战。为了解决这些问题,rollup 的概念应运而生。
Rollup 是一种在专用 L2 上“链下”执行交易的机制,然后将聚合(“rollup”)数据或证明发布回 L1 区块链。由于繁重的计算和状态更新远离 L1 进行,因此区块链避免了其通常的吞吐量瓶颈,从而提高了交易速度并降低了费用。实际上,rollup 自己的执行环境可以更有效地处理签名检查、合约执行和状态转换,而 L1 仍然是权威的“结算层”。
Rollup 旨在尽可能多地保留 L1 的安全性。安全目标是确保数据可用性、验证正确的状态转换以及提供抗审查性。数据可用性要求所有交易和状态信息都可访问,以便在发生争议时,参与者可以独立验证链的状态或通过依赖发布到(或由)L1 保证的数据安全地提取资金。状态转换完整性确保 L2 上的更改根据网络规则有效,通常通过有效性证明(例如零知识证明)或欺诈证明。最后,抗审查性保证没有单个实体或一小群参与者可以无限期地阻止或扣留用户交易。
注意
数据可用性和有效性是安全 rollup 实现的重要组成部分,确保恶意行为者无法伪造交易、窃取资金或人为地夸大余额。数据有效性通常依赖于两种主要方法之一。第一种方法使用零知识证明,其中每批 L2 交易都附带一个证明正确执行的加密证明。当此证明提交到 L1 时,智能合约会在接受新状态根之前验证其正确性。第二种方法在乐观假设下使用欺诈证明:L2 运营商将新状态发布到 L1,并且任何人都可以通过提供不当行为的证据来质疑这些提交。如果欺诈证明成立,则无效批次将被撤销,并且恶意行为者将面临处罚。
除了有效性之外,数据可用性确保用户始终可以在 L2 运营商消失或行为不诚实时重建链。存在不同的方法来实现这一点。一些系统将所有交易数据直接存储在 L1 上,通常作为以太坊 calldata,或者现在更常见的 blobs,因此它仍然透明地记录在区块链日志中。其他设计依赖于链下数据可用性层、专用网络或外部存储解决方案,这些解决方案提供密码经济激励来维护和提供数据。混合方法可能会结合这两种方法:关键信息放置在链上,而不太重要的数据存储在链下。
Rollup 依赖于部署在 L1 上的专用智能合约,该合约维护所有 L2 帐户的规范状态。此合约存储一个根(通常是 Merkle 根),表示当前的 L2 状态,接受由指定参与者(有时称为排序器、聚合器或运营商)提交的新交易批次,并验证这些批次的有效性。根据 rollup 的类型,它可能会检查零知识证明或处理欺诈证明,以确保状态更新是合法的。如果检测到违规行为(例如,成功的欺诈证明),合约可以恢复无效批次。
满足 rollup 要求的任何人都可以在智能合约中提交 L2 交易的状态更新,例如质押债券。情况并非总是如此。实际上,到目前为止,交易量和总锁定价值最高的rollup,其排序器级别都是中心化的。虽然一些 rollup 已经实现了去中心化,但对于大多数 rollup 而言,去中心化仍然是一个最终目标。每个状态更新都包括先前的状态根(以显示连续性)、新提出的状态根(反映提交的交易的结果)以及压缩的交易数据或对其的引用。如果满足 rollup 的规则(并且没有出现有效的挑战,对于乐观 rollup 而言),则合约将其存储的状态根更新为新的状态根,使其成为规范的 L2 状态。
不同的 rollup 以不同的方式处理欺诈或无效的状态更新。乐观 rollup 默认假设新的状态更新是正确的,但提供一个挑战窗口(通常持续几天)供任何人提交欺诈证明。如果证明被验证,则无效的状态更新将被回滚,并且恶意提交者的质押将被削减。同时,零知识 rollup 需要零知识证明来伴随每个新的状态根。由于此证明是在链上验证的,因此链会立即知道更新是否有效;如果证明是正确的,则不需要长时间的挑战期。
在其早期阶段,大多数 rollup 保留了部分中心化控制,通常称为training wheels,这允许运营商在出现错误或重大更新时迅速进行干预。虽然这对于新系统来说是实用的,但真正的去中心化要求逐步移除这些保护措施。
为了绘制此转换图,已经提出了一个框架,建立在 Vitalik Buterin 最初的里程碑之上,该框架将 rollup 分为三个成熟阶段。每个阶段都表明有多少权力保留在中心化手中,以及 rollup 离继承以太坊的基础层安全性有多近。
在 stage 0 中,rollup 称自己为 rollup,但仍然受到运营商的严格控制。它将状态根发布到 L1 并在 L1 上提供数据可用性,如果出现问题,可以重建 L2 状态。但是,此时,系统的“证明机制”(欺诈或有效性证明)可能不会由链上智能合约完全执行;如果发生错误,运营商干预是主要的后备措施。从本质上讲,stage 0 确保 rollup 的基本要素(链上数据、状态根和用户面向节点的软件)到位,但治理仍然是中心化的。
注意
此三阶段框架的要求可能会改变。例如,截至撰写本文时(2025 年 2 月),Arbitrum 是 stage 1 rollup,但根据新要求,如果它没有及时升级网络,则可能变成 stage 0 rollup。
Stage 1 rollup 需要具有适当的证明系统(乐观 rollup 的欺诈证明或零知识 rollup 的有效性证明),并且必须至少有五个外部参与者可以提交这些证明。用户还应该能够在不需要运营商合作的情况下退出系统,从而保护他们免受审查。另一个标准是,如果用户不同意提出的系统升级,则用户至少需要七天的退出窗口,但如果出现严重错误,Security Council 仍然可以更快地进行干预。该理事会必须通过一个多重签名形成,该签名需要至少八个或更多签名者的 50% 以上[^1],其中一半来自 rollup 主要组织之外。虽然该理事会可以修复错误或恢复恶意交易,但仍然存在潜在的单点故障。
[^1]: 最近修改了这一点,并且要求做了一些更改。我们不会在本章中分析这些更改;有关更多信息,请参见 Luca Donno 的 Medium 文章。
Stage 2 表示 rollup 是真正去中心化的,依赖于无需许可的证明和强大的用户保护措施[^2]。欺诈或有效性证明系统必须对任何人开放——没有允许列表。如果引入了治理提案或升级,用户必须至少有 30 天的时间才能退出,以确保他们不会被迫进行更改。Security Council 的作用严格限于链上、与健全性相关的错误,例如提交了矛盾的证明,而不是广泛的治理或酌情决定权。因此,在最终阶段,人为干预的范围很窄,rollup 主要由智能合约和社区共识来管理,这与以太坊的最小信任原则非常相似。
[^2]: Stage 2 并不表示更好的 UX 或更多的采用;它只是表示更多的去中心化。
我们要感谢所有参与开发和更新该框架的人员以及所有参与分析和公开 rollup 各阶段信息的人员;非常感谢您的服务,而且非常有必要。
乐观 Rollup 依赖于欺诈证明。运营商将状态根发布到 L1,基础是 假设它们有效。但是,观察者可以自由质疑他们认为带有欺诈性的批次。如果质疑被证明是正确的,无效批次将被恢复,运营商受到惩罚。由于其有效性没有得到即时确认,用户通常必须等待一个挑战窗口,时间可能长达一周甚至更长时间,才能有把握地提取资金或实现最终性。这种设计导致提款时间更长,但是它提供了同 EVM 更简便的兼容性,以及更低的证明复杂性。运营商不需要构建零知识电路,这可以简化系统运行的的某些方面。然而,对于用户体验而言,提款时间的延迟带来了消极影响,并且如果运营商的保证金小于锁定值总额,就会有经济攻击的可能性。乐观 Rollups 的例子包括Arbitrum、Optimism、Base 以及其他大量灵感来自“乐观以太坊”模型的项目。
ZK Rollup 基于有效性证明。当供应商在 L2 绑定交易时,它将生成加密证明(通常是 SNARK 或 STARK),证明状态转换的正确性。这些证明是链上验证的,无需延长质疑窗口,就可以提供接近即时的完成性。由于无需等待确认合法,用户可以享受快速提款的好处。这种高安全性来源于对证明的直接验证,降低了对观察者或大量运营商股份的依赖性。在链上验证一个证明,通常要比单独处理每笔交易都更高效。但为通用 EVM 计算实施零知识证明,在计算上非常昂贵,有可能需要专业的硬件。
其实,前言的密码学是有风险的。让我们以 Zcash 为例。Zcash 使用了论文“succinct non-interactive zero knowledge for a von Neumann architecture”中的一些实施结果,该论文描述了 Zcash 首次发行所使用的 zk-SNARK 构造。
在 2018 年,在这个论文发布几年,以及数十家同行评议之后,Zcash 当时聘用的密码学家 Ariel Gabizon,发现了一个隐晦的密码学缺陷,允许了一种伪造漏洞——本质上就是双花攻击。该漏洞已在 Zcash Sapling 升级中修复,而且看起来并未被任何人利用,但它已在一个非常公开和被引用的论文中潜伏了多年,才被人注意到。
在本章中,我们将零知识证明,称为高安全性和值得信赖的。一般来说这是确实,但如果从不接受挑战,那么这种假设将非常危险。
某些零知识系统还需要一个可信设置[^3](SNARK 常见)来生成初始参数,其中带有其自身的安全考虑因素。领先的 ZK-rollup 项目包括 ZKsync、Starknet、Scroll 和 Aztec。后者还在“ZK-ZK-rollup.”标签下整合了隐私功能。
[^3]: 第 4 章讨论过。
ZK-Rollup 首先就很适合简单的任务,比如令牌传输和互换,但难以胜任更加复杂的功能。随着 zk-EVM 的出现,事情发生了变化,这种开发旨在链下复制所有的 EVM。通过为图灵完备的计算生成证明,包括 EVM 字节码的执行,zk-EVM 扩展了 ZK Rollups 的范围,让大量 DApp 能够受益于可被伸缩性和零知识级别的安全性。
项目采取不同的道路来实现 zk-EVM 功能。一种方法使用 Transpiler,可以将 Solidity(或其他的 EVM 高级语言)转换成电路友好的语言,比如 Cairo(由 StarkWare 所用)。另一种方法会直接解释标准的 EVM 字节码,一个操作码接一个操作码,构建一些反映每条指令的电路。混合或多类型的解决方案,会调整 EVM 的某些部分(比如数据结构或者 Hash 算法), 使它们更易于被证明,同时试图保持接近全部的以太坊兼容性。我们不会在本章进一步扩展 zk-EVM。这将在第 17 章中完成。
乐观 Rollup 和 ZK rollup,并非是唯一可以扩展的方案;它们是目前所采用的两种主要方案,但未来可能变化。我们将分析其他扩展方案:对于旧的,目前不太可能再次变得有关联性的方法,我们会简单分析,而对那些即将到来,未来充满希望的方案,则会深入分析。
有效性证明 不会将交易数据存储在以太坊上。相反,它们会将证明发布到以太坊,以验证 L2 链的状态,如图 16-4 所示。 从本质上讲,有效性证明是一种 rollup,它使用了其它的数据可用性解决方案,比如 Celestia, Avail, 或者 EigenLayer。

图 16-4. 验证架构
作为 L2,有效性证明不需要支付与在以太坊存储数据相关的高昂 Gas 费用。这种方法要比 Rollup 的成本更有效益,意味着 Gas 费用对用户来说更低,。然而,有效性证明通常被认为不如其他的 Rollup 安全,这是由于它们使用了 数据可用性委员会或者其它的数据可用性方案,在以太坊之外存储交易数据。
侧链 是一种区块链网络,与另一个区块链并行运行。通常,侧链通过双向桥与主链连接,允许资产转移以及可能任意的数据,比如合同状态、Merkle 证明,以及两个网络之间特定交易的结果。
大多数侧链都有其共识机制,以及独立于主链的验证器集。这使得侧链可以结算,以及最终确认交易,而无需依赖其他的区块链。然而,这也意味着桥接到侧链的资金的安全性,取决于坚固的加密经济激励的存在,从而阻止验证器中的恶意行为。
基于 Rollup 依赖于 L1 区块链的本地排序能力。这种设计能够进行无缝集成,从而利用 L1 的去中心化、活跃度以及安全属性。
于传统的 Rollup 相比,基于 Rollup 使用了一种更简单的排序方法。大多数 Rollup 都实现了它们自己的排序器,而基于 Rollup 是接入到其底层的 Layer 1 的排序器上。本质上,主要的区别是,L1 验证器是 Rollup 的排序器,而不是像乐观 Rollup 一样,有外部的排序器。
共识、数据可用性、和结算层都是以太坊。构建在 Rollup 自身的唯一组件,是执行层,该层负责执行交易,以及更新其状态。这种设计允许 L1 区块提出者,与 L2 区块构建者和搜索器直接合作, 将下一个 Rollup 区块合并到 L1 区块中。由于基于排序的方法,仅仅依赖于现有的以太坊验证方法,所有它无需依赖任何外部的共识。
注意
基于 Rollup 有可能是最有希望的解决方案,而且有可能在用法上超过乐观Rollup。这主要在于,由于其最终性性与以太坊自身的最终性是相同的,所以基于 Rollup 之间可以进行原子交易,而无需任何挑战窗口。例如,DeFi 流动性可以在基于 Rollup 之间进行聚合。此前,只有 ZK Rollup 才能实现。
助推 Rollup 是一种 Rollup,它可以处理交易。就好像交易在 L1 上直接执行一样,这赋予了它们对 L1 状态的全部访问权限。除此之外,他们还维护自己独立的分开存储。以这种方式,执行和存储都在 L2 级别进行扩展,而 L1 框架则充当共享基础。另一种看待它的方式是,每个 L2 都会反映 L1,通过对事务执行与存储进行分片,从而有效地为所有 L1 部署的应用程序,都增加新的区块空间。
如果以太坊的未来,需要用到数百甚至数千个 Rollup,来处理高扩展性需求,那么让每个 Rollup 都像一个孤立的链那样运作,所有都用它们独有的规则集和合同,可能并不理想。开发者可能会发现,自己在每个 Rollup 上都重复相同代码。
相反,助推 Rollup 会直接为在 L1 上运行的任何 DApp,添加额外的区块空间。推出助推 Rollup,可以被认为是为计算机添加额外的 CPU 内核或更多的硬盘空间。每当应用程序知道如何利用多线程 (在区块链的意义上是多 Rollup)时,它就可以自动利用经过扩展的容量。开发者只需考虑如何最好地利用那个额外环境。
本地 Rollup 方案,推出了 EXECUTE 预编译,旨在充当 Rollup 状态转换的验证者;开发人员可以通过移除诸如欺诈证明游戏、SNARK 电路和安全委员会 (Security Counci) 等复杂的基础设施,从而极大地简化 EVM 等价 Rollup 的开发。 借助于 `Rollup将已执行的交易存储在数据blob中,并生成一个用于验证的加密“承诺”[^4]。为了创建这个承诺,它们使用多项式函数对数据进行编码。然后可以在特定点评估这个多项式。
[^4]: 多项式承诺就像多项式(数学表达式,例如 f(x) = 2x − 1)的一个简短、安全的“摘要”,允许你证明其中的特定值,而无需显示整个多项式。想象一下写下一个秘密公式并将其放在一个锁定的保险箱中。稍后,有人可能会问:“如果我们设置 x = 10,结果是什么?”无需打开保险箱或向他们展示你的完整公式,你可以快速轻松地提供证明,证明正确的答案是某个数字。多项式承诺正是以数学方式做到这一点:它们让你安全有效地证明较大数学数据集中的特定点(例如 x = 10)的准确性,而无需暴露所有细节。你将在第 4 章中找到关于多项式承诺的更详细的解释。
例如,考虑一个简单的多项式函数,例如 f(x) = 2x − 1。在 x = 1, 2, 3 点评估此函数会得到值 1, 3, 5。证明者独立地将相同的多项式应用于原始数据,并检查其在这些点的值。如果底层数据稍有变化,则多项式(以及因此,其评估值)将不再匹配,从而提醒参与者注意不一致之处。
当rollup在blob中发布数据时,它还会提供一个在链上发布的承诺。这个承诺是通过将一个多项式拟合到数据,并在 KZG 仪式(在第 4 章中讨论)期间产生的随机数所确定的特定点评估该多项式来创建的。证明者独立地在这些相同的点评估多项式。如果他们的评估与承诺值匹配,则确认数据是准确的。在实践中,这些承诺及其证明更为复杂,因为它们使用加密方法来确保完整性。
Danksharding的主要进步是引入了合并费用市场,它旨在成为gas费用市场和blob费用市场的结合。Danksharding不是拥有多个分片,每个分片都有自己的区块和提议者,而是指定一个单独的提议者来选择每个slot的所有交易和数据。
为了防止这种方法对验证者施加过高的硬件要求,使用了PBS。在PBS中,专门的“区块构建者”通过竞标来争夺组装slot内容的的权利,而提议者仅选择出价最高的有效header。只有区块构建者必须处理完整的区块,即使这一步也可以通过专门的oracle协议进一步去中心化。同时,验证者和用户可以依靠DAS来验证区块——记住,区块的很大一部分只是数据。
注意
术语 danksharding 和 proto-danksharding 带有以太坊基金会两位主要人物的名字,他们帮助塑造了这种分片。Dank 代表 Dankrad Feist,proto 代表 Protolambda,又名 Diederik Loerakker。两人都是研究人员:Feist 在以太坊基金会工作,而 Loerakker 在撰写本文时在 OP Labs 工作。
Proto-danksharding(也称为EIP-4844)建议实施完整danksharding所需的大部分基础逻辑和基础设施,例如交易格式和验证规则,但没有实际的DAS。^5 在proto-danksharding下,验证者和用户仍然直接验证所有数据blob的完整可用性。
proto-danksharding引入的主要创新是一种新的交易类型,称为blob-carrying交易。这些交易(我们已经在第6章中分析过)的功能与常规交易类似,但包含一个称为blob的额外数据组件。Blob相对较大(约125 KB),并且可能比等量的calldata ^6 便宜得多。但是,EVM无法直接访问blob数据;EVM只能访问blob的加密承诺。这些blob中的数据也会在固定时间段后自动删除(在撰写本文时设置为4,096个epoch,约18天)。
由于验证者和客户端仍然必须下载每个blob的完整内容,因此proto-danksharding将数据带宽限制为每个slot约1 MB。尽管存在此限制,但proto-danksharding仍然提供了巨大的可扩展性优势,因为blob数据不会直接与标准以太坊交易的gas成本竞争。
阅读本文后可能会出现一些问题。
为什么可以在18天后删除blob数据?用户如何访问较旧的blob?
Rollup在链上发布其交易数据的加密承诺,并同时通过数据blob提供基础交易数据。这种安排允许独立的证明者验证承诺的准确性,或者在必要时质疑不正确的数据。在网络级别,共识客户端会临时存储这些数据blob,并证明该数据已在以太坊网络中传播并可用。为了防止节点随着时间的推移变得过大且占用过多资源,此数据会在18天后自动删除。共识客户端提供的证明保证了证明者在此期间有足够的时间和访问权限来验证或质疑数据。修剪后,实际数据可以继续由rollup运营商、用户或其他第三方在链下存储。
有几种实用的方法可以长期存储和轻松访问历史数据。例如,特定于应用程序的协议(例如单个rollup)可以要求其自己的节点保留专门针对其应用程序的历史数据。由于历史数据丢失不会对以太坊本身构成风险,而只会对单个应用程序构成风险,因此每个应用程序独立管理其数据存储是有意义的。其他潜在的解决方案包括使用BitTorrent等去中心化系统(例如,定期生成和分发blob数据的每日快照),或者利用以太坊的门户网络,该网络可以扩展以支持历史数据存储。此外,诸如区块浏览器、API提供商或The Graph等第三方索引平台之类的服务可能会维护全面的档案。最后,进行数据分析的个人研究人员、爱好者或学术机构也可以在本地保留完整的历史记录,从而受益于直接访问数据的便利性和性能提升。
与其为blob分配每个slot 1 MB的带宽,不如降低普通交易calldata的成本不是更好吗?
这里的问题与以太坊网络的平均负载与其最坏情况(峰值)负载之间的差异有关。目前,以太坊区块的平均大小约为90 KB,尽管理论上的最大区块大小(如果区块中的所有3600万个gas全部用于calldata ^7,则可以达到大约2 MB)。以太坊偶尔会处理接近此最大大小的区块,而不会出现重大问题。但是,如果我们只是将calldata的gas成本降低十倍,而平均区块大小保持在可管理的范围内,则潜在的最坏情况区块大小将激增至大约20 MB,从而使以太坊网络不堪重负。
以太坊当前的gas定价模型使得难以分别管理平均负载和最坏情况,因为这两者之间的比率取决于用户如何在calldata和其他资源之间分配其gas支出。因此,以太坊必须根据最坏情况对gas进行定价,从而人为地将平均负载限制在网络可以舒适支持的水平以下。通过引入多维费用市场,其中gas定价明确区分不同的资源类型,我们可以更好地使平均网络使用率与其实际容量保持一致,从而安全地适应每个区块的更多数据。Proto-danksharding和EIP-4488是专门为解决此问题而设计的两个提案,旨在改善以太坊的gas定价模型。
警告
EIP-4488不应与EIP-4844混淆(感谢这些EIP中完全不令人困惑的数字)。EIP-4488是较早、更简单的解决平均情况/最坏情况负载不匹配问题的尝试。它目前处于停滞状态,因此可能永远不会实施。另一方面,EIP-4844已经上线。
另一个潜在的动机是,最终目标是允许节点不下载所有数据blob。这对于blob是可能的,但对于calldata却无法做到。
提示
你可能还有更多问题。有关答案,请参阅本章末尾的完整阅读清单。
在适度的硬件上运行以太坊节点的能力对于实现真正的去中心化至关重要。这是因为操作节点使用户能够通过加密检查独立验证区块链信息,而不是依赖第三方。运行节点还允许用户直接将交易提交到以太坊的P2P网络,而无需中介。如果这些好处仅限于拥有昂贵设备的用户,则无法实现真正的去中心化。因此,以太坊节点必须具有最低的处理和内存要求,理想情况下能够在移动电话、微型计算机或家庭计算机上不显眼地运行。
今天,高磁盘空间要求是阻止广泛访问以太坊节点操作的主要障碍。主要原因是需要存储以太坊的广泛状态数据,这对于正确处理新的区块和交易非常重要。
虽然更便宜的硬盘可以存储旧数据,但它们通常太慢而无法有效地管理传入的区块。仅仅使存储更便宜或更有效只能提供暂时的缓解,因为以太坊的状态数据增长实际上是无限的;存储需求将不断增加,迫使技术改进不断跟上。更可持续的方法是开发新的客户端方法来验证区块和交易,而无需从本地存储中检索数据。
术语无状态性可能具有一定的误导性,因为它实际上并没有完全消除状态的概念。相反,它改变了以太坊节点管理状态数据的方式。无状态性主要有两种类型:弱无状态性和强无状态性。弱无状态性允许大多数节点在不存储状态数据的情况下运行,方法是将该责任转移到数量有限的专用节点。相比之下,强无状态性消除了任何节点存储完整状态数据的要求。
提示
在以下小节中,我们将解释弱无状态性和强无状态性。值得一提的是,正如我们刚才所说,这些并不是实现“无状态以太坊”的唯一方法;这里的无状态性基本上意味着改变以太坊节点管理状态数据的方式。另一种方法是使用Helios等轻客户端。Helios将其用户的不受信任的集中式RPC端点转换为安全、不可操纵的本地RPC。它足够轻便,可以在移动设备上运行,并且需要的存储空间非常小。
弱无状态性,在第 14 章中简要提到,涉及对以太坊节点如何验证状态更新的更改,但并未完全消除网络中状态存储的必要性。相反,它将存储完整状态数据的责任放置在称为区块提议者或构建者的专用节点上。网络上的所有其他节点随后可以验证区块,而无需在本地维护完整状态数据。在弱无状态性下,创建(提议)新区块需要完全访问以太坊的状态数据,而验证这些区块可以在不存储任何状态数据的情况下完成。
实施弱无状态性取决于以太坊客户端采用一种称为 Verkle 树 的新数据结构(将在下一节中详细介绍)。Verkle 树取代了以太坊当前的状态存储结构,并支持创建小型的、固定大小的见证[^8],节点交换这些见证以验证区块,而无需引用本地数据库。此外,PBS 是必要的,因为它允许区块构建者——具有更强大硬件的专用节点——处理维护完整状态数据的繁重任务,而常规节点则以无状态方式运行。
[^8]: 验证区块意味着重新执行其交易,更新以太坊的状态,并确认计算出的状态根与区块提议者提供的状态根匹配。以太坊客户端目前需要本地存储的整个状态 trie 才能验证区块。见证仅包含执行区块交易所需的必要状态数据部分。但是,使用传统的 Merkle 树,这些见证变得太大,使得节点难以在以太坊的 12 秒 slot 时间内快速下载和处理它们。这种限制有利于具有快速互联网连接的节点,从而导致中心化。Verkle 树通过显着减小见证大小来解决这个问题,从而无需本地存储状态即可实现无状态验证。
术语 Verkle 树 结合了“向量承诺”和“Merkle 树”(我们在第 14 章中解释过的内容)。Verkle 树对于启用无状态以太坊客户端至关重要,这些客户端无需在本地存储整个以太坊状态即可验证区块。相反,这些客户端依赖于见证^9,以及确认其有效性的加密证明。小的见证大小至关重要,因为见证必须在以太坊的 12 秒 slot 内由节点有效地分发和处理。当前的基于 Merkle 的状态数据结构产生过大的见证,使其不适合无状态验证。Verkle 树通过显着减小见证大小来解决这个问题。
正如名称所示,Verkle 树使用 向量承诺:即 KZG 多项式承诺,这是一种加密承诺,允许在不显示整个数据集的情况下,有效地证明大型数据集中特定位置的数据值。与当前在 Merkle 树中使用的哈希相比,它们具有更好的扩展性和更快的计算速度,如图 16-6 所示。在 Merkle 树中,我们只有 Merkle 根(哈希),而在 Verkle 树中,我们还有向量承诺。

图 16-6。Merkle 树与 Verkle 树
仅使用哈希,我们无法证明某个元素存在于某个值向量中的特定位置;您需要传递整个向量。但是,通过向量承诺和一个打开(整个值向量的一小部分),可以证明某个元素存在于该特定位置。
Merkle 树允许以太坊节点在不下载整个区块链的情况下验证小部分数据。但是,当 Merkle 树变得非常大时,证明的大小(验证数据所需的信息)也会显着增加。这些大的证明会减慢网络速度,并且难以在以太坊继续扩展时保持效率,如图 16-7 所示。

图 16-7。Merkle 树证明大小
为了证明特定的叶子 X 存在于此 Merkle 树中,必须传递给定节点沿路径的所有兄弟节点;这是因为如果没有这一部分数据,哈希将没有意义。
Verkle 树通过显着减小这些证明的大小来解决这个问题。Verkle 树不使用随着数据量增加而增大的证明,而是使用一种称为向量承诺的加密方法。向量承诺允许您使用非常短、紧凑的证明来证明大量数据。这意味着即使以太坊的区块链变得更大,证明也会保持小而高效,如图 16-8 所示。

图 16-8。Verkle 树证明大小
通过利用之前分析的向量承诺,我们可以避免不必要的数据,并显着减小 Verkle 树的证明大小。
Merkle 树的证明大小如下(请注意,证明大小是根据图 16-5 和 16-6 计算的):
Verkle 树的证明大小要小得多:
在此解释之后可能出现的一个小问题是:为什么我们计算 Merkle 树的七层深度,而只计算 Verkle 树的四层深度?答案很简单:Merkle 树的节点只有 15 个兄弟节点,而 Verkle 树的节点有 255 个。由于每层深度的宽度相同,Verkle 树每个节点的兄弟节点多得多,因此我们可以在 Verkle 树中存储更多数据。
Verkle 树将数据组织成(key,value)对,其中每个key是 32 字节,由 31 字节的“stem”和一个字节的“suffix”组成,如图 16-9 所示。这种 key 格式特意设计成这样,确保存储位置相近拥有相同的 stem 和不同的 suffix,使得访问“相邻”存储位置的成本更低。

图 16-9。Verkle 树 key 结构
这些 key 被构建进三种节点:
为了构建完整的 Verkle 树,你需要从叶子节点开始,从下往上逐步计算多项式承诺,直到达到顶层或根承诺。 根承诺简洁地表示了整个树的数据,允许节点仅通过引用单个根承诺来快速验证区块链数据。 当节点需要验证特定的区块链数据(例如用户的账户余额或交易有效性)时,它会获取这个已知的根承诺以及一个非常小的加密证明,通常只有几百个字节。
强无状态性 消除了节点存储任何状态数据的要求。 在这个模型中,交易包括可以由区块生产者聚合的小见证。 然后,这些生产者只需要存储生成经常访问的帐户的见证所需的最小状态量。 这将大部分状态管理责任转移给用户自己,因为用户必须提供这些见证,并通过訪問列表精确指定其交易与之交互的帐户和存储鍵。 虽然这种方法将使节点变得非常轻量级,但它引入了某些权衡,特别是增加了与智能合约交互时的复杂性和难度。
强无状态性已在研究中进行了探索,但目前并未计划将其纳入以太坊的近期路线图。 以太坊更有可能追求弱无状态性,因为它似乎足以满足网络在可预见的未来的扩展目标。
以太坊的扩展方法不仅仅是让事情变得更快;它还涉及升级整个系统,而不牺牲使其值得信赖的东西:去中心化和安全性。以太坊没有使用快速修复方法,而是使用 rollup 和 danksharding,并且以无状态性为目标来构建分层系统,同时继续改进 Layer 1。在这种设置中,L2 网络处理大部分执行工作,但仍然依赖于以太坊的基础层来实现安全性和最终结算。这是一种深思熟虑的、模块化的前进道路,它保持了核心价值,同时为长期增长和创新奠定了基础。
更多信息,请参阅以下读物:
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!