文章目錄
- 什么是交易?
- 交易類型
- 交易生命周期
- 關鍵概念:Gas 與交易費用
- 交易狀態與失敗原因
- 總結
什么是交易?
“交易(Transaction)” 是從一個賬戶向另一個賬戶發送的經過數字簽名的指令 。例如,如果 Bob 發送 Alice 1 ETH,則 Bob 的帳戶必須減少 1 ETH,而 Alice 的帳戶必須增加 1 ETH。 交易會造成狀態的改變(如轉移以太幣、調用智能合約、部署合約等)。
改變 EVM 狀態的交易需要廣播到整個網絡。 任何節點都可以廣播在以太坊虛擬機上執行交易的請求;此后,驗證者將執行交易并將由此產生的狀態變化傳播到網絡的其他部分。
交易需要付費并且必須包含在一個有效區塊中。
所提交的交易包括下列信息:
字段 | 作用 |
---|---|
from | 發起賬戶地址(EOA,必須有私鑰簽名,合約賬戶無法主動發起交易)。 |
to | 接收賬戶地址: 若為 EOA 地址(如0x…),則為普通轉賬; 若為合約賬戶地址,則為調用該合約; 若為空(null),則為部署新智能合約(此時data字段為合約字節碼)。 |
value | 轉移的以太幣數量(以 wei 為單位,1 ETH = 101? wei),僅在轉賬或向合約支付 ETH 時有效。 |
gasLimit | 交易允許消耗的最大 Gas 量(防止交易因邏輯錯誤無限消耗資源),若實際消耗 Gas ≤ gasLimit,剩余 Gas 退還;若超過,則交易失敗,已消耗 Gas 不退還。 |
maxFeePerGas | (EIP-1559 后)用戶愿意支付的最高 Gas 單價(以 gwei 為單位,1 gwei = 10? wei),包含基礎費(base fee)和優先級費(priority fee)。 |
maxPriorityFeePerGas | (EIP-1559 后)用戶額外支付給驗證者的 “小費”,激勵驗證者優先打包交易。 |
nonce | 發起賬戶的交易計數器(從 0 開始),確保每筆交易唯一,防止 “重放攻擊”(同一筆交易被重復提交)。 |
data | 附加數據(可選): 調用合約時,為函數名 + 參數的編碼(如調用transfer(address,uint256)的編碼); 部署合約時,為合約的字節碼;普通轉賬時可留空。 |
signature | 發起賬戶的數字簽名(由私鑰生成),用于驗證交易的合法性(確實由from地址的所有者發起)。 |
燃料是指驗證者處理交易所需的計算。 用戶必須為此計算支付費用。 gasLimit 和 maxPriorityFeePerGas 決定支付給驗證者的最高交易費。
下面是一個模擬交易信息
{from: "0xEA674fdDe714fd979de3EdF0F56AA9716B898ec8",to: "0xac03bb73b6a9e108530aff4df5077c2b3d481e5a",gasLimit: "21000",maxFeePerGas: "300"maxPriorityFeePerGas: "10"nonce: "0",value: "10000000000",
}
交易類型
以太坊有幾種不同類型的交易:
- 常規交易:從一個帳戶到另一個帳戶的交易。
- 合約部署交易:沒有“to”地址的交易,數據字段用于合約代碼。
- 執行合約:與已部署的智能合約進行交互的交易。 在這種情況下,“to”地址是智能合約地址。
交易生命周期
交易提交后,就會發生以下情況:
- 用戶發起與簽名
用戶通過錢包(如 MetaMask)輸入交易參數(to、value、gas等),錢包用用戶私鑰對交易進行簽名(生成signature),確保交易不可篡改且確實由用戶發起。 - 廣播至網絡
簽名后的交易被發送到以太坊 P2P 網絡,由節點(全節點或輕節點)接收并轉發,快速擴散至全網。 - 節點驗證
全節點收到交易后,驗證其合法性:- 簽名是否有效(from地址是否為私鑰持有者);
- nonce是否正確(與from賬戶的當前nonce一致);
- from賬戶余額是否足夠支付value + 預估Gas費;
- 若調用合約,驗證data字段的函數編碼是否符合合約接口。
- 進入交易池(mempool)
驗證通過的交易被放入節點的 “交易池”,等待驗證者(PoS)或礦工(PoW 時期)打包。交易池中的交易按 “Gas 價格” 排序,高 Gas 費的交易通常被優先處理。 - 打包進區塊
驗證者從交易池中選擇交易(優先高 Gas 費),打包進新生成的區塊,并廣播區塊至全網。此時交易狀態從 “pending(待處理)” 變為 “included(已打包)”。 - 全網確認
其他節點驗證區塊合法性后,將其添加到區塊鏈末尾。隨著后續區塊的生成(通常認為 6 個區塊后),交易被 “最終確認”(不可篡改的概率極高),全局狀態按交易指令更新(如余額變更、合約存儲更新)。
關鍵概念:Gas 與交易費用
以太坊交易必須支付 “交易費用”(以 ETH 計價),費用高低由 Gas 決定,這是防止網絡濫用的核心機制:
- Gas:衡量交易計算復雜度的單位(如簡單轉賬需 21,000 Gas,復雜合約調用可能需數百萬 Gas)。
- 實際費用:EIP-1559 后,費用 = 基礎費(base fee) + 優先級費(priority fee),其中基礎費會被銷毀(減少 ETH 流通量),優先級費歸驗證者。
- 費用計算:總費用 = Gas 消耗 ×(基礎費 + 優先級費),若用戶設置的maxFeePerGas ≥ 實際費用,則交易有效。
交易狀態與失敗原因
- 常見狀態:
- pending:已廣播但未被打包;
- success:已打包并確認,狀態更新成功;
- failed:已打包但執行失敗(如合約邏輯錯誤、Gas 不足)。
- 失敗原因:
- Gas 不足(實際消耗 Gas > gasLimit);
- 合約執行出錯(如轉賬給不接收 ETH 的合約、條件判斷不滿足);
- 簽名無效或nonce錯誤。
注意:失敗的交易仍會消耗 Gas(因驗證者已執行計算),費用不會退還。
總結
以太坊交易是連接用戶與網絡的核心接口,不僅支持簡單的價值轉移,更通過data字段實現了與智能合約的復雜交互,支撐了 DeFi、NFT、DAO 等豐富生態。理解其結構、類型和生命周期,是使用以太坊和開發 DApp 的基礎 —— 它既是 “數字現金” 的轉移工具,也是 “去中心化應用” 的操作指令,體現了以太坊 “世界計算機” 的核心價值。