以太坊作为全球领先的智能合约平台,其核心功能之一是支持用户与区块链之间的价值转移与复杂逻辑交互,而这一切的实现,都依赖于其精心设计的交易格式,理解以太坊交易格式,不仅是深入掌握以太坊工作原理的关键,也是开发者构建去中心化应用(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)

    • 类型随机配图