go-ethereum 交易类型(Transaction Types)
在 go-ethereum (Geth) 中,交易类型(Transaction Types)是根据以太坊协议的不同阶段和升级(如 EIP 引入的改进)来区分的。以下是 LegacyTx、DynamicFeeTx 的主要区别以及其他常见的交易类型:
1. LegacyTx(传统交易)
-
定义:以太坊最初的交易类型,在伦敦升级(EIP-1559)之前的标准格式。
-
关键字段:
-
Nonce:交易序号。 -
GasPrice:用户愿意支付的每单位 Gas 价格(固定值,由用户直接指定)。 -
GasLimit:交易消耗的 Gas 上限。 -
To:接收方地址(如果是合约创建则为空)。 -
Value:转账的 ETH 金额。 -
Data:附加数据(如合约调用参数)。 -
V, R, S:签名数据。
-
-
特点:
-
用户必须明确指定
GasPrice,矿工按价格高低优先打包。 -
不支持 EIP-1559 的动态费用机制。
-
2. DynamicFeeTx(动态费用交易,EIP-1559 交易)
-
定义:由 EIP-1559 引入(2021 年伦敦升级),旨在改进费用市场机制。
-
关键字段:
-
ChainID:防止跨链重放攻击。 -
MaxPriorityFeePerGas(小费):用户支付给矿工的优先费用。 -
MaxFeePerGas:用户愿意支付的最大 Gas 价格(含基础费用 + 小费)。 -
GasLimit:Gas 上限。 -
To/Value/Data:同 LegacyTx。 -
AccessList(可选):预访问列表(EIP-2930),优化存储访问成本。
-
-
特点:
-
费用分两部分:
-
基础费用(Base Fee):由协议自动计算并销毁(不归矿工)。
-
优先费用(Priority Fee):矿工的小费。
-
-
更可预测的 Gas 费用,减少用户超额支付的情况。
-
必须指定
MaxFeePerGas和MaxPriorityFeePerGas,而不是固定GasPrice。
-
3. 其他交易类型
a) AccessListTx(EIP-2930)
-
定义:伦敦升级前的过渡类型,引入
AccessList优化存储访问成本。 -
关键字段:
-
类似 LegacyTx,但增加了
AccessList(预声明要访问的存储槽)。 -
明确的
ChainID和GasPrice。
-
-
用途:减少某些复杂合约调用的 Gas 消耗。
b) BlobTx(EIP-4844,Proto-Danksharding)
-
定义:为支持分片(Danksharding)引入,允许携带大块数据(Blob)。
-
关键字段:
-
MaxFeePerBlobGas:Blob 数据的费用上限。 -
BlobHashes:Blob 数据的哈希列表。
-
-
用途:主要用于 Layer2(如 Rollups)数据存储,降低交易成本。
4. 核心区别总结
| 特性 | LegacyTx | DynamicFeeTx (EIP-1559) | AccessListTx (EIP-2930) | BlobTx (EIP-4844) |
|---|---|---|---|---|
| Gas 费用机制 | 固定 GasPrice |
动态费用(基础费 + 小费) | 固定 GasPrice |
动态费用 + Blob 费 |
| EIP 标准 | - | EIP-1559 | EIP-2930 | EIP-4844 |
| 签名兼容性 | 支持旧钱包 | 需 EIP-1559 支持 | 需 EIP-2930 支持 | 需 EIP-4844 支持 |
| 数据扩展 | 无 | 无 | AccessList |
Blob 数据 |
5. 如何选择?
-
LegacyTx:兼容旧版节点或工具链(如某些交易所)。
-
DynamicFeeTx:大多数场景的首选(费用更合理)。
-
AccessListTx:需要优化合约存储访问时。
-
BlobTx:Layer2 数据批量提交。
6. 代码中的类型定义
在 Geth 的 core/types 中,交易类型通过枚举区分:
type TxType uint8
const (
LegacyTxType TxType = iota
AccessListTxType
DynamicFeeTxType
BlobTxType
)
每种类型有对应的结构体(如 LegacyTx、DynamicFeeTx),并通过 tx.Type() 方法获取类型。

浙公网安备 33010602011771号