ETH Transaction

Yan Ru Su

Transaction 結構

欄位 描述 單位/範例
nonce 發送者交易計數器 uint64
maxPriorityFeePerGas 最大優先費(小費給礦工) wei (Gwei 常用)
maxFeePerGas 最大總費(上限) wei
gasLimit 氣體上限 uint64 (基本轉帳 21k)
to 接收地址(EOA 或合約) Address
value 轉帳 ETH 數量 wei
data 輸入資料(呼叫合約) bytes
signature (v,r,s) ECDSA 簽名 65 bytes

sendTransaction 與 sendRawTransaction 差別

eth_sendTransaction

發送的是一個未簽名的交易給節點/錢包,節點/錢包有你的私鑰,用對應的的私鑰來對交易進行簽名/錢包。
節點/錢包做簽名,錢包可以多設計ㄧ步確認。

eth_sendRawTransaction

先簽好名,再將交易資料跟簽名給節點驗證,節點只驗證

Transaction 生命週期

包交易 -> 簽名 -> 送節點 -> 驗證 (簽名 Nonce 正確 Balance、Gas)-> mempool(交易廣播,每個節點都有自己的pool,驗證交易後才加入自己的 Mempool)-> 節點打包 (從 Mempool 拿,Priority Fee 高的優先)-> 執行交易

完成狀態修改,生命周期結束

什麼是 Receipt,與 Transaction 差異

交易執行後的結果 會記錄有沒有成功,花了多少 Gas
Transaction 執行完之後會產生一個 Receipt,可以用來查詢結果

TransactionResponse vs TransactionReceipt

TransactionResponse

交易發送後節點回傳的初步資訊,代表交易已經被節點驗證,但還沒被執行,因為還沒執行不會有結果。

TransactionReceipt

交易執行後生成的收據,代表交易已經被打包進區塊並執行完成,包含結果。

TX Hash 的生成邏輯

可以先算好,有看到Tx Hash 不代表被執行

  1. 準備交易欄位:依類型排序(如 nonce, maxPriorityFeePerGas, 簽名 v,r,s…等)。
    ​2. RLP 編碼:將欄位轉為 RLP bytes(處理字串、長度前綴,如短字串 <128 用單 byte,長者加 0x80 + len)。
    ​3. keccak-256:tx_hash = keccak256(rlp_encoded_bytes),輸出 32 bytes(64 字元 hex)。