以太坊作为全球领先的智能合约平台,其核心功能之一是支持用户与区块链之间的价值转移与复杂逻辑交互,而这一切的实现,都依赖于其精心设计的交易格式,理解以太坊交易格式,不仅是深入掌握以太坊工作原理的关键,也是开发者构建去中心化应用(DApp)和进行安全审计的基础,本文将详细解析以太坊交易格式的构成、各字段的作用及其演变。

以太坊交易的核心:RLP编码

在深入具体字段之前,需要了解以太坊交易数据如何序列化以便在网络上传输和存储,以太坊使用递归长度前缀(Recursive Length Prefix, RLP)编码方式将交易数据转换为一字节数组,RLP是一种简洁高效的编码方法,特别适合编码对象和数组,它能够确保编码后的数据是唯一且可解码的,我们通常所说的“交易格式”,指的是RLP编码前的交易数据结构。

传统交易格式(Legacy Transaction)

以太坊最早期的交易格式被称为“传统交易格式”(Legacy Transaction),它包含以下关键字段:

  1. nonce (nonce)

    • 类型:整数 (UINT64)
    • 作用:发送方账户发起的交易序号,每个账户的nonce从0开始,每成功发送一笔交易,nonce值递增1,Nonce的主要作用是防止重放攻击(重复发送同一笔交易)并确保交易的顺序性,矿工会根据nonce来排序来自同一账户的交易。
  2. gasPrice (gasPrice)

    • 类型:整数 (UINT256)
    • 作用:发送方愿意为每单位 gas 支付的价格,单位是 Gwei(1 ETH = 10^9 Gwei),gasPrice越高,交易被矿工打包的优先级通常越高。
  3. gasLimit (gasLimit)

    • 类型:整数 (UINT256)
    • 作用:发送方愿意为这笔交易支付的最大 gas 量,gasLimit有两个作用:一是限制交易执行的计算量,防止恶意程序消耗过多网络资源;二是决定了交易的基本费用(基础费用 + 优先费),如果交易执行实际消耗的 gas 超过 gasLimit,交易会失败,但已消耗的 gas 不会退还。
  4. to (recipient)

    • 类型:20字节地址
    • 作用:交易接收方的地址,如果是一笔创建智能合约的交易(合约创建交易),此字段为空(或null),取而代之的是在交易数据中包含合约初始化代码。
  5. value (value)

    • 类型:整数 (UINT256)
    • 作用:发送方转账给接收方的 ETH 数量,单位是 wei(1 ETH = 10^18 wei)。
  6. v (recovery id)

    • 类型:整数 (UINT256)
    • 作用:签名恢复ID,用于从签名中恢复出发送方的公钥,进而验证地址的正确性,它与 rs 共同构成ECDSA签名的三个部分。v 的值通常为 27, 28, 或更高(根据以太坊改进提案 EIP-155 的链ID调整)。
  7. r (signature part r)

    • 类型:整数 (UINT256)
    • 作用:ECDSA签名的第一个组成部分。
  8. s (signature part s)

    • 类型:整数 (UINT256)
    • 作用:ECDSA签名的第二个组成部分。
  9. data (payload)

    • 类型:字节组 (BYTE ARRAY)
    • 作用:交易携带的数据。
      • 对于普通转账交易,此字段通常为空或包含注释(尽管不推荐)。
      • 对于智能合约交互交易,此字段包含调用函数的函数选择器(函数签名哈希的前4字节)和函数参数。
      • 对于合约创建交易,此字段包含合约的初始化字节码。

EIP-1559 交易格式:动态费用的引入

随着以太坊网络拥堵和 gas 价格波动问题日益突出,以太坊改进提案 EIP-1559 引入了一种新的交易格式,旨在提供更可预测的 gas 费用和更好的用户体验,EIP-1559 交易在传统交易格式的基础上增加和修改了一些字段:

  1. 新增字段

    • maxPriorityFeePerGas (优先费上限)
      • 类型:整数 (UINT256)
      • 作用:发送方愿意支付给矿工的最高优先费(也称为小费),单位是 Gwei,这部分费用激励矿工打包交易。
    • maxFeePerGas (总费用上限)
      • 类型:整数 (UINT256)
      • 作用:发送方愿意支付的最高总 gas 费用,单位是 Gwei,这是每单位 gas 的绝对上限,实际 gas 费用 = 基础费用 (baseFee) + 优先费 (priorityFee),且优先费 ≤ maxPriorityFeePerGas,总费用 ≤ maxFeePerGas。
    • accessList (访问列表)
      • 类型:地址与键对的列表
      • 作用:可选字段,用于预加载合约状态,对于需要频繁访问多个存储槽的复杂交易,可以显著降低 gas 费用(通过减少冷访问成本)。
  2. 修改字段随机配图