How to Read an Ethereum Transaction: A Complete Breakdown

What Is an Ethereum Transaction?
Every time you send ETH, swap a token on Uniswap, or mint an NFT, you're creating a transaction on the Ethereum blockchain. A transaction is a signed message from an externally owned account (EOA) that gets broadcast to the network and permanently recorded in a block.
Understanding how to read a transaction is one of the most valuable skills in Web3. Whether you're debugging a failed swap, tracing funds, or verifying a contract interaction, it all starts here.
Anatomy of a Transaction
Every Ethereum transaction contains these core fields:
- Transaction Hash (txHash) — A unique 66-character identifier (e.g.,
0x5c50…) that acts as the receipt for this specific transaction. - From — The sender's wallet address. This is always an EOA, not a contract.
- To — The recipient. This can be a wallet address (simple transfer) or a smart contract address (contract interaction).
- Value — The amount of ETH transferred. For pure contract calls with no ETH attached, this is
0. - Gas Price / Max Fee — How much the sender is willing to pay per unit of gas. After EIP-1559, this split into
maxFeePerGasandmaxPriorityFeePerGas. - Gas Used — The actual computational units consumed. A simple ETH transfer always uses exactly 21,000 gas.
- Nonce — A sequential counter for the sender's address. The first transaction from a wallet has nonce 0, the second has nonce 1, and so on.
- Input Data — The encoded function call and parameters when interacting with a smart contract. For simple transfers, this is
0x.
Transaction Status Codes
After a transaction is mined, it has one of two statuses:
- Success (1) — The transaction executed without errors. Gas was consumed and state changes were applied.
- Failed (0) — The transaction reverted. Gas was still consumed, but all state changes were rolled back. Common reasons include insufficient token allowance, slippage exceeding limits, or a require statement failing in the contract.
A common mistake is assuming a failed transaction costs nothing. You still pay gas for failed transactions — the network did the work of attempting to execute it.
Decoding Input Data
When a transaction interacts with a smart contract, the input data field contains the encoded function signature and parameters. The first 4 bytes (8 hex characters) represent the function selector — a hash of the function name and parameter types.
For example, the function selector 0xa9059cbb corresponds to transfer(address,uint256), the standard ERC-20 transfer function. The remaining bytes encode the destination address and the amount.
Tools like SharpBlock automatically decode this input data when the contract's ABI is available, showing you human-readable function names and parameters instead of raw hex.
Understanding Gas After EIP-1559
Since the London upgrade, Ethereum uses a dual fee structure:
- Base Fee — Set by the network based on demand. This ETH is burned, permanently removed from circulation.
- Priority Fee (Tip) — Goes directly to the validator as an incentive to include your transaction.
The total cost is: Gas Used × (Base Fee + Priority Fee). The maxFeePerGas field sets your ceiling — you'll never pay more than this per gas unit, and any difference is refunded.
Internal Transactions
When a smart contract calls another contract or sends ETH during execution, these are called internal transactions (or message calls). They don't have their own transaction hash — they exist within the parent transaction's execution trace.
Internal transactions are critical for understanding DeFi interactions. A single Uniswap swap might trigger dozens of internal calls across multiple contracts: the router, pair contracts, and token contracts all communicate during execution.
Practical Tips
- Always check the status first — Before analyzing anything else, confirm whether the transaction succeeded or failed.
- Compare gas used vs gas limit — If gas used equals the gas limit, the transaction likely ran out of gas.
- Look at token transfers — The "Token Transfers" section shows all ERC-20/721/1155 movements, making complex DeFi transactions easier to follow.
- Use the input data decoder — Decoded input data tells you exactly which function was called and with what parameters.