# Transaction Decoder > See what an EVM transaction actually did: call, events, token transfers, fee, finality. Looks up a transaction on Ethereum, Base, Arbitrum, OP Mainnet, Polygon, Avalanche or BNB Chain straight from a public RPC node and decodes it locally: the function called (from the verified ABI on Sourcify, a built-in table or the signature database), every event log, ERC-20 token transfers with symbols and decimals, gas fee, status and finality. Works offline for raw calldata too. Part of usefulweb.site (https://usefulweb.site/). Results are deterministic calculations from the inputs and the listed assumptions; the API returns exactly what the web page shows. ## Use it - Human interface: https://transactiondecoder.usefulweb.site/ (interactive tool at https://transactiondecoder.usefulweb.site/tool) - JSON API: POST https://transactiondecoder.usefulweb.site/api/v1/calculate with a JSON object of inputs (schema: https://transactiondecoder.usefulweb.site/api/v1/tool) - OpenAPI: https://transactiondecoder.usefulweb.site/openapi.json - MCP (Streamable HTTP): https://transactiondecoder.usefulweb.site/mcp - tool `transaction_decoder` ## Inputs - mode (select): What do you have? - chain (select): Chain - txHash (text): Transaction hash - calldata (textarea): Calldata (input data) - signature (text): Function signature (optional) - abi (textarea): Contract ABI JSON (optional) ## Method - Raw data comes from public JSON-RPC nodes: eth_getTransactionByHash, eth_getTransactionReceipt, eth_getBlockByNumber (timestamp, "finalized" tag) and eth_blockNumber. - Function: the first 4 bytes (selector) are matched against, in order, your signature/ABI, the verified ABI of the called contract on Sourcify, a built-in table of common functions, then the Sourcify signature database. The first candidate that ABI-decodes cleanly is used; other candidates are listed (selector collisions exist). - Events: topic0 is matched the same way. Without a verified ABI, the first (topics − 1) parameters are assumed to be indexed (flagged as indexingAssumed). - Token transfers: Transfer(address,address,uint256) logs with exactly 3 topics (ERC-20; ERC-721 has 4); symbol() and decimals() are read with eth_call. - Fake-token check: transfers of a token whose symbol is USDT/USDC/WETH/DAI but whose contract is not the official one on that chain are flagged. - Finality: "finalized" if the block is at or below the chain's "finalized" block tag; otherwise "unfinalized" with the confirmation count; "unknown" if the node does not support the tag.