生の Ethereum トランザクションとは
生の Ethereum トランザクションは、ウォレットが署名時に生成する RLP エンコードされたバイト列です。型付きトランザクションでは 1 バイトの type プレフィックス(0x01〜0x04)の後に、nonce、手数料フィールド、ガス上限、to、value、data、ECDSA 署名(v、r、s)の RLP リストが続きます。送信者アドレスは保存されず、ノードが署名から復元します。トランザクションハッシュはこのバイト列そのものの Keccak-256 です。
生トランザクションの入手先
- MetaMask やほとんどのウォレット: 直接は表示されませんが、
eth_signTransactionを呼ぶ dApp やライブラリは受け取ります。ethers.js はtx.serializedとtx.unsignedSerializedを公開しています。 - ノード: Geth、Erigon、ほとんどの RPC プロバイダーの
eth_getRawTransactionByHash。Etherscan では「Get raw tx data」に表示されます。 - ハードウェアウォレットのフロー: 確認を求められる hex がまさにこの形式です。
フィールドの説明
最大合計手数料はガス上限 × ガスあたり最大手数料で、トランザクションにかかり得る最大額です。実際の手数料は通常これより低くなります。未署名ハッシュは秘密鍵が署名するダイジェストです。アクセスリストはガスを下げるためにストレージキーを事前宣言します。blob トランザクションでは、blob データ自体はここに表示される RLP には含まれず、バージョン付きハッシュだけが含まれます。
トランザクションタイプ一覧
| Type | EIP | 手数料フィールド | 追加フィールド |
|---|---|---|---|
| 0(レガシー) | v に EIP-155 チェーン ID | gasPrice | なし |
| 1 | EIP-2930 | gasPrice | accessList |
| 2 | EIP-1559 | maxPriorityFeePerGas、maxFeePerGas | accessList |
| 3 | EIP-4844 | type 2 と同じ + maxFeePerBlobGas | blobVersionedHashes |
| 4 | EIP-7702 | type 2 と同じ | authorizationList |
具体例
ガス上限 21,000、maxFeePerGas 30 gwei、maxPriorityFeePerGas 2 gwei の type 2 トランザクションでは、最大合計手数料は 21,000 × 30 gwei = 630,000 gwei = 0.00063 ETH と表示されます。ブロックの base fee が 12 gwei なら実効価格は 12 + 2 = 14 gwei、実際の手数料は 294,000 gwei = 0.000294 ETH で、残りの 0.000336 ETH は課金されません。to が USDT コントラクトで calldata が a9059cbb で始まるならトークン送金であり、その value フィールドは 0 です。
calldata をエンコードしたり未知の関数をデコードしたりするには、ABI エンコーダー / デコーダーとセレクタ逆引きを使ってください。