What is a raw Ethereum transaction?
A raw Ethereum transaction is the RLP-encoded byte string a wallet produces when it signs: for typed transactions a one-byte type prefix (0x01 to 0x04) followed by an RLP list of nonce, fee fields, gas limit, to, value, data and the ECDSA signature (v, r, s). The sender address is not stored; nodes recover it from the signature, and the transaction hash is Keccak-256 of these exact bytes.
Where to get the raw transaction
- MetaMask and most wallets: not shown directly, but dApps and libraries that call
eth_signTransactionreceive it; ethers.js exposestx.serializedandtx.unsignedSerialized. - Nodes:
eth_getRawTransactionByHashon Geth, Erigon and most RPC providers; Etherscan shows it under "Get raw tx data". - Hardware wallet flows: the hex you are asked to confirm is exactly this format.
Fields explained
Max total fee is gas limit × max fee per gas: the most the transaction can cost; the real fee is usually lower. Unsigned hash is the digest the private key signs. Access list pre-declares storage keys to lower gas. For blob transactions the blob data itself is not part of the RLP shown here, only its versioned hashes.
Transaction types at a glance
| Type | EIP | Fee fields | Extra fields |
|---|---|---|---|
| 0 (legacy) | EIP-155 chain ID in v | gasPrice | none |
| 1 | EIP-2930 | gasPrice | accessList |
| 2 | EIP-1559 | maxPriorityFeePerGas, maxFeePerGas | accessList |
| 3 | EIP-4844 | as type 2 plus maxFeePerBlobGas | blobVersionedHashes |
| 4 | EIP-7702 | as type 2 | authorizationList |
Worked example
A type-2 transaction with gas limit 21,000, maxFeePerGas 30 gwei and maxPriorityFeePerGas 2 gwei shows a max total fee of 21,000 × 30 gwei = 630,000 gwei = 0.00063 ETH. If the block's base fee is 12 gwei, the effective price is 12 + 2 = 14 gwei and the real fee is 294,000 gwei = 0.000294 ETH; the remaining 0.000336 ETH is never charged. A to equal to the USDT contract with calldata starting a9059cbb is a token transfer, and its value field is 0.
Need to encode calldata or decode an unknown function? Use the ABI encoder / decoder and the selector lookup.