ETH Transaction
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 不代表被執行
- 準備交易欄位:依類型排序(如 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)。