以太坊交易全流程详解

张开发
2026/4/18 19:12:59 15 分钟阅读

分享文章

以太坊交易全流程详解
引言以太坊是一个基于交易的状态机交易是唯一能够修改网络状态的方式。一笔简单的ETH转账从用户点击“发送”到最终链上确认需要经过交易创建与签名、Gas费用设定、网络广播、交易池排队、区块构建与执行、共识确认等多个技术环节。本文将完整剖析ETH交易的生命周期。一、交易发起与签名1.1 以太坊账户模型以太坊中有两种账户类型外部拥有账户EOA和合约账户。EOA由私钥控制与个人用户直接关联可以发送交易并持有ETH。合约账户则受智能合约代码控制无法主动发起交易只能在收到交易时被动执行。因此所有交易的发起者必须是EOA。每个以太坊账户包含四个核心字段nonce交易计数器、balanceETH余额、codeHash合约代码哈希和storageRoot存储根哈希。其中nonce是一个递增的整数记录从该账户发送的交易次数用于防止重放攻击——同一nonce的交易只能被执行一次。1.2 交易的数据结构一笔完整的以太坊交易需要包含以下信息from发送方地址EOAto接收方地址可以是EOA或合约地址value转账的ETH数量以wei为单位1 ETH 10¹⁸ weinonce发送方已发起交易的序号gasLimit用户预设的最大Gas消耗量maxFeePerGas愿意支付的每单位Gas的最高总费用maxPriorityFeePerGas支付给验证者的小费上限input data可选的附加数据字段signature发送方的数字签名交易数据经过RLP递归长度前缀序列化编码后再通过私钥签名最终形成一条可广播的原始交易。1.3 交易类型的演进以太坊的交易格式经历了多次演进。最初是Legacy交易Type 0采用单一的gasPrice参数进行竞价。伦敦硬分叉后引入了EIP-1559交易Type 2将费用拆分为Base Fee和Priority Fee两部分。此后陆续增加了EIP-2930访问列表交易Type 1、EIP-4844 Blob交易Type 3以及Pectra升级中的EIP-7702授权交易Type 4。目前EIP-1559交易是绝大多数用户使用的默认格式。二、Gas费用机制2.1 Gas的本质Gas是以太坊网络中衡量计算复杂度的核心单位本质上是计算资源的量化指标。每一条EVM指令都有对应的Gas消耗量转账操作约消耗21,000 Gas而复杂的智能合约交互可能消耗数十万甚至上百万Gas。2.2 EIP-1559的费费用结构EIP-1559将交易费用分为两个部分基础费用Base Fee由协议根据网络拥堵程度动态计算的固定部分是交易被打包必须支付的最低金额。基础费用会被系统直接销毁burn不再支付给验证者。这一销毁机制使ETH具备通缩潜力网络活跃时销毁速度可能超过增发速度。优先级费用Priority Fee用户自愿支付给验证者的“小费”用于激励验证者优先处理该交易。优先级费用越高交易越容易被提前打包进区块。2.3 费用计算公式EIP-1559下的Gas费用计算方式如下总费用 Gas Used × (Base Fee Priority Fee)其中Gas Used是交易实际消耗的Gas数量不超过gasLimit。用户在交易中设置的maxFeePerGas是愿意支付的每单位Gas最高总价实际支付时若Base Fee Priority Fee ≤ maxFeePerGas则按实际值支付差额部分退还若Base Fee本身已超过maxFeePerGas则交易无法被验证者接受。2.4 费用优化策略降低Gas费用有多种方法在网络不拥堵的时段操作、调整优先级费用以平衡速度与成本、以及使用Layer 2网络如Arbitrum、Optimism进行交易L2的Gas费用远低于主网。三、Mempool交易的等候区3.1 交易池的运作机制用户将签名后的交易广播到以太坊网络后接收交易的节点首先验证签名的有效性、发送方余额是否充足以及nonce是否正确。验证通过后交易被存入节点的内存池Mempool——节点RAM中的一个临时存储区域存放所有已验证但尚未被打包进区块的交易。Mempool本质上是一个等候区。由于区块有大小限制每12秒左右只能打包有限数量的交易因此交易必须在池中排队等待。节点的Mempool并不完全一致——由于网络传播的异步性不同节点可能持有不同的待处理交易集合。3.2 交易的传播交易通过以太坊的去中心化P2P网络传播使用RLPx和Wire Protocol等网络协议确保区块生产者和验证者能够在Mempool中找到待处理的交易。当一个节点收到有效交易后会将其转发给相邻节点使得交易在整个网络中逐步扩散。这种广播机制保证了即使交易只发送给一个节点最终也能被所有验证者知晓。3.3 交易的替换与取消用户可以通过发送相同nonce但费用更高的新交易来“替换”原交易使其更快被打包。同样地发送相同nonce但value为0的交易可以“取消”原交易——前提是原交易尚未被打包。如果费用设置过低交易可能被从Mempool中“丢弃”永久不会被打包。四、区块构建与执行4.1 验证者选择与区块提议在以太坊的权益证明PoS共识下时间被划分为12秒的“时隙”slot和32个时隙组成的“时段”epoch。每个时隙中协议会随机选择一名验证者来提议区块该验证者从Mempool中挑选交易并将其打包进新区块。4.2 交易选择与排序验证者或区块构建者在选择交易时并非遵循先进先出原则而是优先选择优先级费用更高的交易因为这部分费用直接作为小费归验证者所有。这解释了为何在高需求时期Gas费用会急剧飙升——用户通过竞价争夺有限的区块空间。4.3 EVM执行与状态转换以太坊可以理解为一个交易驱动的状态机输入一笔交易T经过状态转换函数Υ处理后从当前状态σ转换到新状态σ′。当区块被提议后其中的每一笔交易都会在以太坊虚拟机EVM中依次执行。对于一笔简单的ETH转账EVM执行以下操作验证发送方的nonce与签名扣除发送方的余额增加接收方的余额将发送方的nonce加1如果交易调用的是智能合约EVM会加载合约代码并逐条执行指令每次状态变更都被记录在StateDB中。4.4 交易回滚机制交易执行过程中如果任何一步出错例如Gas不足、余额不足、合约调用失败整个交易会被回滚但已消耗的Gas费用不会退还。这就是为何gasLimit设置过低可能导致交易失败且损失Gas费用的原因。五、共识与区块最终性5.1 Gasper共识协议以太坊的共识协议名为“Gasper”由LMD GHOST和Casper FFG两个独立协议组合而成。LMD GHOST负责分叉选择规则提供网络的活性livenessCasper FFG作为最终确定性小工具为区块提供最终性finality。5.2 见证投票与区块确认每个验证者在每个时段中会以“见证”attestation的形式投出一票投票内容包括对当前链头的认可和对最新两个时段的检查点投票。验证者的投票权重与其质押的ETH数量成正比质押32 ETH即可成为验证者。区块从被提议到最终确认需要经历多个阶段Latest交易刚被包含在区块中后续区块仍可能产生分叉导致重组SafeJustified区块已获得超过2/3验证者投票支持不太可能被重组Finalized区块已通过Casper FFG的最终确认机制极不可能被回滚5.3 最终性的时间与安全性在当前以太坊网络中一笔交易实现最终确定性通常需要64到95个区块即大约15分钟。Casper FFG的两个时段约12.8分钟后区块被最终敲定此后若要回滚该区块需要至少1/3的验证者销毁其质押ETH——攻击成本超过400万ETH。这种经济安全性使得已最终确认的交易几乎不可逆转。六、交易生命周期的完整流程综合以上各个环节一笔ETH交易从用户发起到达成最终确认经历以下完整的生命周期第一步——交易创建用户在钱包中输入接收地址、转账金额和Gas设置钱包构造交易对象。第二步——交易签名钱包使用用户的私钥对交易进行数字签名证明交易的发起者是账户的合法持有人。第三步——广播到网络签名后的交易被发送到以太坊节点可通过RPC调用直接提交或通过钱包服务商间接转发。第四步——节点验证与入池接收节点验证签名、余额和nonce通过后将交易存入Mempool并向相邻节点转发广播。第五步——等待打包交易在Mempool中等待被验证者选中。验证者按优先级费用从高到低排序将交易打包进新区块。第六步——区块提议被选中的验证者在12秒时隙内生成区块包含所选交易及见证投票信息并广播到全网。第七步——EVM执行网络中的其他节点接收区块后依次执行区块内的每笔交易验证状态转换的正确性。第八步——区块确认区块被添加到链上后其中的交易获得第一次确认。随着后续区块的追加确认次数不断增加。第九步——最终确认经过约64-95个区块约15分钟和Casper FFG的最终性机制验证后交易被最终确认理论上不可逆转。七、结语一笔简单的ETH转账背后是账户模型、Gas机制、Mempool队列、EVM执行和PoS共识等多个子系统协同工作的结果。从用户点击“发送”到15分钟后交易最终确认交易经历了签名、广播、排队、打包、执行、见证、最终化等一系列精密流程。理解这些底层机制不仅有助于开发者编写更高效的DApp也能帮助普通用户在Gas费用高企时做出更明智的决策。随着以太坊的持续演进如EIP-4844 Blob交易、EIP-7702账户抽象等新特性的引入交易流程也在不断优化朝着更高效率和更低成本的方向持续发展。

更多文章