Published on

以太坊交易的生命周期

1. 构建原始交易对象 (Construct the Raw Transaction)

首先,通过 Web3 库将函数调用转换为原始交易对象(Raw Transaction),该对象包含以下关键字段:

  • nonce: 账户发送的交易计数。用于确定交易顺序和防止重放攻击。
  • gasPrice: 你愿意为每单位 Gas 支付的价格(以 Gwei 为单位)。
  • gasLimit: 你愿意为该交易支付的最大 Gas 数量,防止死循环耗尽资金。
  • to: 目标地址(在合约调用中,即合约地址)。
  • value: 发送的以太币数量(调用函数时通常为 0)。
  • data: 包含函数签名的哈希和参数的编码数据,告诉合约执行哪个函数及使用什么参数。

2. 签名交易 (Sign the Transaction)

  • 使用发送者的私钥对原始交易对象进行签名。
  • 这一步是为了向网络证明该交易确实由账户持有者发起。

3. 本地验证 (Local Validation)

  • 签名后的交易提交给本地以太坊节点。
  • 本地节点验证签名的有效性,确保交易来源合法。

4. 广播到网络 (Broadcast to the Network)

  • 本地节点将验证后的交易广播给对等节点(Peers),对等节点再继续扩散。
  • 生成交易哈希 (Transaction ID),用户可通过该哈希在 Etherscan 等浏览器上追踪交易状态。

5. 矿工节点接收 (Miner Node Accepts)

  • 矿工将交易放入交易池 (Transaction Pool / Mempool)
  • 矿工通常根据 Gas Price 对交易进行排序,价格越高的交易越容易被优先打包进下一个区块。
  • 如果交易池已满且你的 Gas Price 过低,交易可能会被丢弃或无限期延迟。

6. 矿工打包并广播区块 (Miner Finds Block & Broadcasts)

  • 矿工挑选交易打包进区块,并进行工作量证明(PoW)计算(注:文章写于 PoW 时期,现为 PoS,但打包逻辑类似)。
  • 一旦找到有效区块,矿工将其广播到全网。

7. 节点同步 (Node Sync)

  • 你的本地节点最终接收到新区块,并同步本地的区块链副本。
  • 节点执行区块内的所有交易,更新状态。此时,交易被确认并在区块链上永久记录。

原文链接: Life Cycle of an Ethereum Transaction