Free Ethereum ABI Decoder

Decode Ethereum smart contract call data using an ABI JSON. Parse function selectors, decode uint256, address, bool, string, and bytes32 parameters.

Updated

Share:
Home/Utility Tools/Ethereum ABI Decoder

Ethereum ABI Decoder

Decode Ethereum transaction calldata using ABI definitions. Inspect function calls and parameter values.

ABI JSON

Frequently Asked Questions

What parameter types can be decoded?

uint256, address, bool, string, and bytes32. Dynamic types (arrays, tuples) require manual inspection.

What is a function selector?

The first 4 bytes of call data, derived from the keccak256 hash of the function signature (e.g., "transfer(address,uint256)").

Is it free?

Yes, completely free.

Is my data safe with this tool?

Absolutely. The Ethereum ABI Decoder processes everything client-side in your browser. No data is uploaded to or stored on any server. Your content remains private on your device at all times.

Does the Ethereum ABI Decoder work on mobile devices?

Yes, the Ethereum ABI Decoder is fully responsive and works on smartphones and tablets. You can use it on any device with a modern web browser -- no app download required.

Do I need to create an account to use this tool?

No account or registration is needed. Simply open the Ethereum ABI Decoder in your browser and start using it immediately. There are no sign-up walls or usage restrictions.

How do I use the Ethereum ABI Decoder?

Simply enter your input in the provided field, adjust any settings to your preference, and the tool will process it instantly. You can then copy the result to your clipboard or download it.

Which browsers are supported?

The Ethereum ABI Decoder works in all modern browsers including Chrome, Firefox, Safari, Edge, and Opera. For the best experience, use the latest version of your preferred browser.

How do I read uint256 amounts decoded from ERC-20 calldata?

A uint256 in calldata is a raw integer with no decimal point, so a token transfer amount comes out as a very large number measured in the token's smallest unit. For most ERC-20 tokens that means wei-style units with 18 decimals: the value 1000000000000000000 (0xde0b6b3a7640000) equals exactly 1 token. To convert, divide the decoded integer by 10 raised to the token's decimals. USDC and USDT use 6 decimals, so 1000000 is 1.00, while WBTC uses 8. The decoder reads the 32-byte slot big-endian and shows you the exact integer plus the raw hex it came from, so you can verify the amount yourself. Paste your ABI and calldata to see the precise figure before you trust a wallet prompt.

Why does the decoder say no matching function was found?

The decoder computes a Keccak-256 selector for every function in your ABI and compares it to the first 4 bytes of your calldata. When nothing matches, it means the ABI you pasted does not contain the function that was actually called. The usual causes are using the wrong contract's ABI, a proxy contract that forwards calls to a different implementation, or an ABI missing the specific function. A single character difference in a parameter type, such as uint versus uint256, also changes the selector and breaks the match. The fix is to load the verified ABI for the exact contract from a block explorer, then re-decode. The error itself is a useful signal that the transaction is not what you assumed. Double-check the source and try again with the correct ABI.

What is the difference between a function selector and a full ABI?

A function selector is just 4 bytes, the leading slice of the Keccak-256 hash of a canonical signature like transfer(address,uint256), which identifies which function a transaction targets. It tells you the function but nothing about parameter names or how to interpret the bytes that follow. A full ABI is the complete JSON description of a contract's functions, including each input's name and type and its outputs. The decoder needs the ABI, not just the selector, because the 32-byte argument slots are meaningless until you know that one holds an address and the next holds a uint256. With only a selector you can look up a likely signature; with the ABI you get named, typed values. Paste the ABI array here to turn raw hex into a labeled parameter breakdown.

Can this tool decode dynamic types like string, bytes, and arrays?

It handles string and bytes by following ABI encoding rules: the static slot holds an offset pointer to a separate region where the length is stored first, followed by the actual data. The decoder reads that pointer, jumps to the length, and reconstructs the text or hex value. Fixed-size static types such as uint256, int, address, bool, and bytes32 each sit in one 32-byte slot and decode cleanly every time. Where it stops short is complex dynamic structures like variable-length arrays and nested tuples, which use multi-part encoding that can require manual inspection rather than a single clean value. For everyday calls such as ERC-20 transfers, approvals, and simple setters, the automatic output is complete. Paste your calldata to see which parameters resolve directly.

How is the function selector calculated from a signature?

Start with the canonical signature: the function name followed by its parameter types in parentheses, comma-separated, with no spaces and no parameter names, for example transfer(address,uint256). Run that exact string through the Keccak-256 hash function and take the first 4 bytes of the 32-byte result. For transfer that produces 0xa9059cbb. The canonical form matters because uint must be written as its full alias uint256 and int as int256, otherwise the hash and selector change entirely. This tool computes selectors with a built-in Keccak-256 implementation directly in your browser, so it never needs the verbose online signature databases to match a call. Load the ERC-20 transfer example to watch a real signature resolve to its selector, then swap in your own function to confirm what a transaction calls.

About the Ethereum ABI Decoder

The Ethereum ABI Decoder turns raw transaction calldata into a human-readable function call. You paste a contract's ABI JSON and a hex calldata string, and the tool tells you which function was called, its 4-byte selector, and the decoded value of every parameter. It is built for Solidity developers, smart-contract auditors, and anyone trying to understand exactly what a pending or historical transaction does before signing or after the fact.

Everything happens locally in your browser. The ABI, the calldata, and the decoded output never leave your device — there is no API call, no wallet connection, and no sign-up. That matters when you are inspecting calldata from an unfamiliar dApp prompt or a transaction you do not yet trust.

What ABI decoding actually does

On Ethereum, a contract call is just a blob of bytes. The first 4 bytes are the function selector — the leading 4 bytes of the Keccak-256 hash of the canonical function signature, such as transfer(address,uint256), which produces 0xa9059cbb. Everything after those 4 bytes is the encoded arguments, packed in 32-byte (256-bit) slots.

This decoder computes selectors from your ABI using a built-in Keccak-256 implementation, then matches the selector at the start of your calldata against each function in the ABI. When it finds a match, it slices the remaining bytes into 32-byte words and interprets each one according to the parameter's declared type. The result shows the function name, the selector, and a per-parameter breakdown listing the name, type, decoded value, and the raw 32-byte slot it came from.

Parameter types you can decode

The decoder handles the common static (fixed-size) Solidity types, each of which occupies exactly one 32-byte slot:

  • uint256 / uint and int — read big-endian and right-aligned; signed int values are correctly interpreted using two's complement.
  • address — the 20 meaningful bytes are taken from the right of the slot, which is left-padded with zeros.
  • bool — decoded as true or false from the final byte.
  • bytes32 — shown as the full 32-byte hex value.

It also attempts string and bytes, which are dynamic types encoded as an offset pointer to a length-prefixed data region. Because these and other dynamic structures (variable-length arrays and tuples) use multi-part encoding, complex nesting may need manual inspection rather than a clean one-line value.

A practical workflow

Click Load ERC-20 Transfer Example to see a real transfer call decoded end to end: the selector 0xa9059cbb, a recipient address, and an amount in wei (for instance 0xde0b6b3a7640000, which is exactly 1 token with 18 decimals). From there, swap in your own data.

Real situations where this saves time:

  • Verifying a wallet prompt — before approving a transaction, confirm the function and the exact recipient and amount, not just a confusing hex string.
  • Debugging a failed or unexpected call — reconstruct what arguments were actually sent to a contract.
  • Auditing and reverse-engineering — inspect calldata pulled from a block explorer when you have the ABI but no verified source view.

A separate ABI Encoding Guide tab explains the encoding rules — selectors, static slots, and dynamic-type pointers — so the output makes sense even if you are new to low-level EVM data.

To decode, paste the ABI as a JSON array of function objects (each with name, type, and inputs), paste the calldata with or without the 0x prefix, and press Decode. If the leading selector does not match any function in the ABI, the tool tells you so — a quick signal that you are using the wrong ABI for that transaction.