自以太坊九年前推出首个去中心化、可编程的区块链以来,加密货币行业在扩展去中心化应用至数十亿用户的过程中不断面临各种挑战。为了解决这些被称为”性能问题”的瓶颈,行业投入大量资源开发新型区块链解决方案。
然而,当前对”性能问题”的定义和量化方式存在明显缺陷。诸如”每秒交易次数”这类合成指标将计算复杂度完全不同的交易简单打包比较,缺乏必要的细微区分。这种粗糙的评估方式不仅掩盖了区块链各组件对性能的实际影响,还使我们难以从基本原则出发,识别出一系列高度相互依赖的优化机会。
尽管如此,过去几年区块链可扩展性仍取得了显著进步。以太坊通过其以Rollup为中心的路线图引领创新浪潮,各种新型Rollup、协处理器、数据可用性层和竞争性L1不断涌现。这些方案各具特色的设计选择,为开发者构建可扩展、用户友好的去中心化应用提供了更高性能的环境。
随着EIP4844的引入和替代性DA层的出现,关键的数据可用性瓶颈已得到缓解。但最新数据显示,其他重要瓶颈仍然存在。例如,Base在单日内收取了157万美元交易费,而仅支付了5000美元的以太坊数据可用性成本。这表明验证和处理状态更新所需的计算工作仍是关键瓶颈和优化重点。
当前面临的核心挑战
执行层性能可以通过执行节点在区块时间内完成的计算工作量来评估,即”以秒计算的gas”。基于这一思路,执行层瓶颈可归结为两个相互关联的因素:低效的状态访问和低效的计算。
低效的状态访问指检索和更新区块链状态所需的高昂开销,这会显著拖慢交易处理速度。而低效计算则源于执行操作和状态转换的算法效率低下,涵盖从简单转账到复杂智能合约和签名验证等各种操作。这两个瓶颈相互强化——状态访问延迟会延长计算时间,而低效的计算方式又会对状态管理造成额外压力。
解决这些问题通常需要系统性改进,如分片或无状态架构等方案,通过提高状态访问和计算效率来优化执行性能。
瓶颈一:低效的状态访问
访问区块链状态的成本和速度是影响执行环境性能的关键因素,其核心在于状态膨胀问题。区块链通过特定数据结构——树结构来管理和更新世界状态。这些结构为外部方提供了一种安全高效的方式来验证区块链的正确状态。
以太坊采用的Merkle Patricia trie(MPT)数据结构包含四个子树。随着智能合约和代币的增加,状态树变得愈发庞大复杂。这种增长需要更多存储空间、计算资源和传输带宽,而节点硬件限制基本保持不变。
状态存储在磁盘中,磁盘操作产生高昂开销。从CPU寄存器访问数据仅需0.1纳秒,而从磁盘访问数据可能需要10-100微秒——相差100-1000倍,相当于约20万条CPU指令或36次ERC-20转账的时间。
MPT的非顺序结构导致磁盘I/O操作需要从不可预测的位置读写数据。交易输入的随机性引发分散的数据访问模式,显著减慢状态验证和更新过程,仅利用了硬件设备容量的一小部分。总体而言,区块链状态管理原语远未发挥其全部潜力。
瓶颈二:低效的计算
执行层还面临多种形式的计算效率低下问题。许多交易处理采用顺序执行,未能充分利用现代多核处理器的并行能力,导致CPU资源浪费。虚拟机执行需要将高级智能合约操作转换为低级字节码,这一过程特别是对复杂且重复的应用任务带来了显著开销。
优化状态访问的解决方案
开发团队通过多种方式提升状态检索和更新速度,包括简化数据结构、减少昂贵的磁盘I/O操作等。
无状态与内存计算
部分执行层通过将状态数据从磁盘转移到更快的随机访问内存(RAM)来应对状态膨胀。RAM访问显著减少了磁盘操作的开销,但这种方法对去中心化原则构成挑战。随着硬件要求提高,能够运行节点的实体数量将减少。
以太坊等L1和L2正在探索可扩展性路线图,将验证者角色分解为集中式执行节点和众多验证节点。高性能区块生产者负责生成区块,而验证节点通过加密证明确保其责任。这种架构允许区块生产者最大化速度,完全消除执行期间的磁盘I/O。RAM的延迟通常在100纳秒以下,使状态访问延迟降低近1000倍。
为实现这一过程,执行层需要实现某种程度的无状态性,最流行的是”弱无状态性”概念。这要求区块生产者向验证节点提供称为见证的加密声明,封装新区块的所有状态更改。
Verkle树相比Merkle树效率更高,简化了叶子节点与根节点的连接,消除了验证过程中需要包含兄弟节点的需求。Verkle树保持固定大小的见证,显著提高了数据验证的存储和计算效率。
未来几年,我们将看到L1和L2层面实现无状态性的多种配置。例如MegaETH团队正在将无状态性概念应用于乐观rollup设计,其序列器节点为每个区块生成包含必要状态值的见证。
数据库优化
团队正在改进数据库结构以解决EVM兼容链的状态访问低效问题。Monad发现即使实现并行执行,性能提升也有限,因为多线程读写请求相互阻塞。因此他们开发了兼容异步I/O的数据库作为关键解决方案。
异步I/O
异步I/O允许程序在等待I/O操作完成时继续执行其他任务。Monad利用针对SSD优化的自定义状态后端,支持高度并行数据处理并减少I/O延迟。Reth则采用数据库操作与EVM执行引擎分离的方法,使用actor模型有效管理并行进程。
状态默克尔化频率
Solana在每个epoch结束时更新状态提交,允许在该期间摊销写入成本。减少以太坊中默克尔化频率可能提高性能,但目前与以太坊轻客户端需求不兼容。
高效数据结构
现有以太坊客户端的分层树结构导致低效状态访问模式。Sovereign Labs提倡使用二叉默克尔树配置,显著减少哈希运算。Reth团队则通过预取中间trie节点优化性能。
状态过期
状态过期通过移除长期未访问的数据来管理状态大小。常见方法包括租金过期和时间过期,目标是只维护活跃使用的数据,将老旧数据归档。
执行分片
分片通过在专用节点间分配任务和数据优化资源利用。NEAR协议的Nightshade设计将区块链构建为单一逻辑链,每个区块包含多个分片特定块。有状态验证者负责特定分片,无状态验证者随机分配验证任务。
优化计算效率的解决方案
并行化执行
并行化交易执行可以同时利用多个计算资源处理交易,在高需求时期提高吞吐量。可并行化的组件包括状态访问、特定操作和共识与执行。
并行化状态访问
并行EVM将交易处理分布在多个CPU核心上,当一个交易等待存储数据时,系统可以切换到其他交易。主要方法包括悲观执行模型和乐观执行模型。
悲观模型要求交易预先声明状态访问,运行时分析访问模式构建并行队列。Solana的Sealevel运行时采用此模型。UTXO模型也可实现类似并行执行。
乐观模型推测性执行交易,采用MVCC和STM技术跟踪读写集。Aptos的Block-STM技术先并行执行交易,再识别冲突重新执行。
数据与任务并行
数据并行将数据集切分同时处理,任务并行将不同任务分配给多个处理器。Firedancer利用SIMD指令优化ED25519签名验证。Lagrange的ZKMR结合两种并行性高效生成大数据计算证明。
并行化共识与执行
Monad等系统并行处理共识和执行阶段,在对区块N达成共识的同时执行区块N-1的交易,提高资源利用率。
解释器优化
Reth引入JIT编译器将字节码翻译成本机代码,规避解释过程。研究表明这可使执行速度翻倍。Movement Labs的Fractal使Solidity合约能在MoveVM环境运行。
专业化状态机
定制执行层针对特定应用优化,如LayerN的Nord优化订单簿数据结构。Fluent和CWD采用Wasm平衡性能与开发者体验。Stackr允许开发者定义自己的执行规则。
结论
实现最佳执行层性能有多种途径。状态访问或并行优化都不是执行层间的关键差异化点。新的互操作性层对开发者至关重要,使他们能在不牺牲同步组合性的前提下使用专用区块空间。
状态管理和计算效率改进相互依赖。证据表明仅靠并行化作用有限,必须结合异步I/O等改进。专门执行层可能围绕更高效的状态协议建立优势。
区块空间的价值观影响执行层设计。像Solana这样的L1不接受分离验证者角色,而以太坊及其L2通过集中执行节点提高性能。随着加密工具发展,我们实际上减少了维持安全所需的节点数量。
正如Sreeram Kannan指出,”最小可行去中心化”意味着验证应”被正确激励”。虽然集中节点可提高性能,但这些优化能否吸引注重抗审查的开发者仍有待观察。
*表示Archetype投资组合的公司
声明:文章不代表CHAINTT观点及立场,不构成本平台任何投资建议。投资决策需建立在独立思考之上,本文内容仅供参考,风险 自担!转载请注明出处:https://www.chaintt.cn/13639.html