菜单

交易处理

相关源文件

目的与范围

本文档介绍了 go-ethereum 中的交易池系统,该系统负责在交易被包含在区块之前对其进行管理。交易池负责验证、存储、组织和优先处理交易,以确保网络高效且安全地运行。

交易处理系统通过专门的子池处理多种交易类型,并协调它们从提交到包含在区块中的整个生命周期。有关区块创建和挖矿的信息,请参阅 挖矿与区块创建。有关 EVM 中交易执行的详细信息,请参阅 以太坊虚拟机

系统架构

交易池系统采用模块化架构,有一个主协调器(TxPool)管理多个专门的子池。每个子池负责处理特定的交易类型,并实现 SubPool 接口。

主交易池架构

来源: core/txpool/txpool.go66-79 core/txpool/subpool.go96-186 core/txpool/reserver.go41-51

核心组件

组件目的关键文件
TxPool所有交易池的主协调器core/txpool/txpool.go
LegacyPool处理 Legacy、AccessList、DynamicFee 和 SetCode 交易core/txpool/legacypool/legacypool.go
BlobPoolEIP-4844 blob 交易的专用池core/txpool/blobpool/blobpool.go
ReservationTracker防止账户在多个池中拥有交易core/txpool/reserver.go

来源: core/txpool/txpool.go66-79 core/txpool/legacypool/legacypool.go228-257 core/txpool/blobpool/blobpool.go306-335

交易生命周期

交易从最初提交到最终包含在区块中,会经历几个阶段。这个过程包括验证、池分配、状态管理和最终移除。

交易流程图

来源: core/txpool/txpool.go333-374 core/txpool/validation.go62-169 core/txpool/validation.go222-272

交易状态

交易在池中处于不同的状态

  • 未知:交易不存在于任何池中
  • 待处理:可执行的交易,已准备好包含在区块中
  • 已排队:未来交易,存在 nonce 缺口或余额不足

TxStatus 枚举定义了这些状态:core/txpool/txpool.go35-43

池协调和子池管理

子池接口

所有子池都实现 SubPool 接口,该接口定义了标准化的交易管理方法

来源: core/txpool/subpool.go96-186

账户预留系统

ReservationTracker 确保账户一次只能在一个子池中拥有交易,从而防止不同交易类型之间的冲突

来源: core/txpool/reserver.go41-51 core/txpool/reserver.go79-138

验证系统

交易验证分为两个阶段:基本验证和状态验证。

验证流程

来源: core/txpool/validation.go62-169 core/txpool/validation.go222-272

验证选项

不同的池通过 ValidationOptionsValidationOptionsWithState 结构使用不同的验证配置

选项目的Legacy PoolBlob Pool
接受接受的交易类型的位图Legacy, AccessList, DynamicFee, SetCode仅 BlobTx
最大尺寸最大交易尺寸128KB1MB
MaxBlobCount每笔交易的最大 Blob 数量07
MinTip最小 Gas 提示可配置可配置

来源: core/txpool/validation.go42-49 core/txpool/validation.go194-215

Legacy Pool 详解

LegacyPool 处理传统的以太坊交易,并维护两个主要队列

Legacy Pool 架构

来源: core/txpool/legacypool/legacypool.go242-247

交易提升

Legacy Pool 会持续将队列中的交易提升到待处理状态,当它们可以执行时

来源: core/txpool/legacypool/legacypool.go1030-1178

Blob Pool 详解

BlobPool 专门用于 EIP-4844 blob 交易,具有独特的特性

Blob Pool 特性

  • 持久存储:使用基于磁盘的存储来存储大型 blob 数据
  • 驱逐策略:复杂的定价模型
  • 严格排序:不允许出现 nonce 缺口
  • 容量有限:专为低交易吞吐量设计

来源: core/txpool/blobpool/blobpool.go311-335 core/txpool/blobpool/blobpool.go92-114

配置和管理

池配置

两个池都支持广泛的配置选项

Legacy Pool 配置

来源: core/txpool/legacypool/legacypool.go138-154

状态同步

交易池系统通过 Reset 方法与区块链状态变化同步,当添加新区块时会调用该方法

来源: core/txpool/txpool.go149-258 core/txpool/txpool.go400-403