EVM 链上一笔交易从发起到最终确认完整流程

image

一、交易构造与签名

用户在钱包或 DApp 中发起操作(转账、调用合约等),客户端构造一笔交易数据,核心字段包括:
nonce:该账户已发送交易的递增计数器,防重放
to:目标地址(合约地址或外部账户)
value:转账的 ETH 数量
data:合约调用时的 ABI 编码数据
gasLimit:交易可消耗的最大 Gas 量
maxFeePerGas / maxPriorityFeePerGas:EIP-1559 费用字段
v, r, s:ECDSA 签名参数
构造完成后,用发送者的私钥对交易数据进行 ECDSA 签名,生成签名后的原始交易。此时交易还没有上链,只是在本地完成签名。

二、广播到网络(进入 Mempool)

签名完成后,钱包通过 JSON-RPC 接口(如 eth_sendRawTransaction)将交易发送到以太坊节点。
节点收到后会做基础校验:

  • 签名是否合法
  • nonce 是否正确(必须等于该账户链上 nonce)
  • 余额是否足够支付 value + gas 费用
  • gasLimit 是否合理
    校验通过后,交易进入该节点的内存池(Mempool),并通过 Gossip 协议向全网节点传播。Mempool 本质上是"还没上链的交易缓存区",每个节点维护自己的 mempool。
    在 mempool 阶段,验证者会根据 Gas 费高低对交易排序,出价高的优先被打包。这也是 MEV(最大可提取价值)问题产生的根源——MEV 机器人会监控 mempool 进行抢跑交易。

三、区块打包(验证者出块)

以太坊采用 PoS(权益证明) 共识机制,平均每 12 秒产出一个区块。
流程如下:

  • 协议随机选出一个验证者作为当前 slot 的区块提议者(Proposer)
  • 提议者从自己的 mempool 中挑选交易(优先高 Gas 费的),按顺序执行
  • 执行结果打包成一个新区块
  • 提议者将新区块广播到全网

四、EVM 执行与状态更新

区块中的每笔交易会被 EVM(以太坊虚拟机) 逐笔执行:

  • 预检查:验证 nonce、余额、Gas 等
  • 扣减 Gas:先从发送者账户扣除 gasLimit × gasPrice 的 Gas 费
  • 执行交易:
    • 普通转账:直接更新发送者和接收者的余额
    • 合约调用:EVM 加载合约字节码,逐条执行操作码(opcode),修改合约存储
  • 计算实际消耗:根据实际执行的计算量计算真实 Gas 消耗
  • 退还多余 Gas:(gasLimit - 实际消耗)× gasPrice 退还给发送者
  • 费用分配:Base Fee 部分被销毁,Priority Fee 部分给验证者
    执行完成后,全局状态树(State Trie)被更新,包括账户余额、合约存储等所有状态变更。

五、区块验证与共识

新区块广播后,网络中的其他验证者会:

  • 验证区块头的合法性(签名、难度等)
  • 重新执行区块中的所有交易,验证状态根是否一致
  • 对区块进行投票证明(Attestation)
  • 以太坊的共识基于 Casper FFG 协议:
    • 每 32 个区块组成一个纪元(Epoch)
    • 每个纪元的第一个区块是检查点(Checkpoint)
    • 当连续两个纪元的检查点获得超过 2/3 验证者的投票后,前序区块即实现最终确定性(Finality)
posted @ 2026-09-10 10:30  Charlie-Pang  阅读(22)  评论(0)    收藏  举报