以太坊 交易类型

admin
admin 7月13日
  • 在其它设备中阅读本文章

以太坊作为一个不断发展的区块链平台,随着时间的推移引入了多个改进提案来提升其性能和用户体验,其交易的数据结构也在一直“进化”

交易类型

过去,以太坊的交易都采用同一种格式:
RLP([nonce, gas_price, gas_limit, to, value, data, v, r, s])

EIP-2718(2021 年 4 月 15 日柏林(Berlin) 升级)改进协议中,定义了一种带交易类型的通用交易格式:
TransactionType || TransactionPayload
将上述字段连接(合并)起来,即可得到一个类型化交易。字段的定义是:

  • TransactionType:0 至 0x7f 范围内的某个值,最多可代表 128 种事务类型。
  • TransactionPayload:由事务类型定义的任意一个字节数组。

EIP-2718 没有为交易的有效负载定义格式。因此,交易的有效负载可以是任意一段经过编码的字节序列,只要采用符合新的交易类型(如 RLP、SSZ 等)定义的编码器即可。之所以选择简单的字节相连方式,是因为读取字节数组的第一个字节非常简单,无需使用任何库或工具。
新的交易类型最多可达 0x7f 种。选择这一上限是为了保证向后兼容传统交易。经过 RLP 编码的交易的第一个字节始终大于或等于 0xc0,因此类型化交易永远不会与传统交易产生冲突,而且类型化交易和传统交易之间可以通过第一个字节来区分。

以太坊目前的源代码中定义了四种交易类型:

// Transaction types.
const (
    LegacyTxType     = 0x00
    AccessListTxType = 0x01
    DynamicFeeTxType = 0x02
    BlobTxType       = 0x03
)

Legacy 交易

Legacy 交易是以太坊早期的交易类型,从链开始持续很长时间都是此类型的交易。

特点:

  • Gas 价格(Gas Price):用户设定的固定值,表示愿意为每个 Gas 单位支付的费用。
  • Gas 限额(Gas Limit):用户愿意为交易支付的最大 Gas 数量。
  • 交易费用:由 Gas Price * Gas Used 计算得出。

示例:

{
  "from": "0xSenderAddress",
  "to": "0xRecipientAddress",
  "value": "1000000000000000000",  // 1 ETH in Wei
  "gas": 21000,
  "gasPrice": "20000000000"  // 20 Gwei
}

AccessList 交易

EIP-2930(2021 年 4 月 15 日柏林(Berlin) 升级)改进协议,引入了访问列表(Access List)功能,以优化 Gas 费和提高交易效率。增加了以下格式的交易:

0x01 || RLP([chain_id, nonce, gas_price, gas_limit, to, value, data, access_list, y_parity, r, s])

特点:

  • 访问列表(Access List):提前声明交易将访问的存储和合约地址,减少 Gas 费。
  • Gas 价格和 Gas 限额:与 Legacy 交易类似,但增加了访问列表字段。

示例:

{
  "from": "0xSenderAddress",
  "to": "0xRecipientAddress",
  "value": "1000000000000000000",  // 1 ETH in Wei
  "gas": 21000,
  "gasPrice": "20000000000",  // 20 Gwei
  "accessList": [
    {
      "address": "0xContractAddress",
      "storageKeys": ["0xStorageKey1", "0xStorageKey2"]
    }
  ]
}

DynamicFee 交易

EIP-1559(2021 年 8 月 5 日伦敦(London) 升级)改进协议,引入动态费用功能,旨在改善 Gas 费的预测和用户体验。增加了以下格式的交易:

0x02 || RLP([chain_id, nonce, max_priority_fee_per_gas, max_fee_per_gas, gas_limit, to, value, data, access_list, y_parity, r, s])

特点:

  • 基础费用(Base Fee):由网络动态调整,不会支付给矿工,而是被销毁。
  • 优先费(Priority Fee):支付给矿工的费用,类似于小费,以激励矿工优先处理交易。
  • 最大费用(Max Fee):用户愿意支付的最高费用,包括基础费用和优先费。

示例:

{
  "from": "0xSenderAddress",
  "to": "0xRecipientAddress",
  "value": "1000000000000000000",  // 1 ETH in Wei
  "maxFeePerGas": "30000000000",  // 30 Gwei
  "maxPriorityFeePerGas": "2000000000",  // 2 Gwei
  "gasLimit": 21000
}

Blob 交易

EIP-4844(2024 年 3 月 13 日坎昆(Cancun)升级)改进协议,可以将 L2 分片数据以廉价的方式提交到链上,旨在大幅提升以太坊的扩展性。增加了以下格式的交易:

0x03 || RLP([chain_id, nonce, max_priority_fee_per_gas, max_fee_per_gas, gas_limit, to, value, data, access_list, max_fee_per_blob_gas, blob_versioned_hashes, y_parity, r, s])

特点:

  • 数据分片(Data Sharding):引入数据分片来分担以太坊主链的负载,大幅提高交易吞吐量。
  • Blob 数据:EIP-4844 引入了新的交易类型,包含“blob”数据,这些数据不会永久存储在以太坊节点中,而是短期存储,提高数据处理效率。

示例:

{
  "from": "0xSenderAddress",
  "to": "0xRecipientAddress",
  "value": "1000000000000000000",  // 1 ETH in Wei
  "gas": 21000,
  "maxFeePerGas": "30000000000",  // 30 Gwei
  "maxPriorityFeePerGas": "2000000000",  // 2 Gwei
  "maxFeePerBlobGas": "3000000000",  // 3 Gwei
  "blobVersionedHashes": "0xBlobData"
}

主要区别总结

Gas 费用机制:

  • Legacy:用户设定固定的 Gas 价格。
  • EIP-2930:类似 Legacy,但增加了访问列表以优化 Gas 费。
  • EIP-1559:引入动态调整的基础费用和优先费机制。
  • EIP-4844:引入数据分片和 blob 数据。

新功能:

  • Legacy:无特别优化,使用最早的交易机制。
  • EIP-2930:通过访问列表优化 Gas 费和交易效率。
  • EIP-1559:改善 Gas 费预测和用户体验。
  • EIP-4844:大幅提升扩展性,引入数据分片和 blob 数据。
    ghbpcxijcv
    ghbpcxijcv  2024-10-04, 21:57

    不错不错,我喜欢看 https://www.ea55.com/