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

一、交易构造与签名
用户在钱包或 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)

浙公网安备 33010602011771号