API fundamentals3 min read

Ethereum Calldata: Selectors, Arguments and Meaning

Understand Ethereum transaction input data, four-byte selectors and ABI arguments, including why decoding alone cannot prove a business action.

Editorial illustration accompanying ethereum calldata: selectors, arguments and meaning.

Overview

When translating these concepts into an integration, keep the scope described by the wallet history api with the result. The examples in wallet transaction history and smart contract event logs show how the same distinction affects neighbouring data questions.

Transaction input data carries bytes supplied to the recipient. Contract calls often start with a function selector followed by ABI-encoded arguments. Those bytes become useful only when decoded with the correct contract and execution context.

Identify the interface first

A four-byte selector usually comes from the beginning of a function signature hash. It is a dispatch hint, not a globally unique function name. Different signatures can collide, and proxy contracts can execute another implementation. Native-currency transfers and contract creation also need different input interpretation from an ordinary contract function call.

Worked example: decoding an intended transfer

A decoded call appears to request transfer(recipient, amount). That describes an input intention. The transaction might revert, the implementation might apply a fee, or another call path might produce a different result. Compare the receipt and relevant state or events before describing an actual delivered amount. Keep requested and observed quantities in separate fields.

Build a cautious decoder

Record recipient contract, block reference, ABI identity and decoder version. Preserve undecoded bytes when no trustworthy interface is available. Test dynamic arguments, empty input, overloaded function names and proxy upgrades. A friendly method label is a convenience for readers; it should never replace the underlying bytes or the evidence of execution.

A practical acceptance test

Decode transfer-shaped calldata in one fixture with a successful receipt and another with a reverted receipt. The requested recipient and quantity can match while the observed outcomes differ. Also supply an unknown selector. Preserve its raw bytes and an undecoded status rather than borrowing a method name from an unrelated contract.

Questions about the topic

Frequently asked questions

Is a selector a unique function identifier?

Not globally; four-byte selector collisions are possible.

Does decoded calldata prove a transfer happened?

No. It describes input, while execution evidence establishes the outcome.

Standards & technical documentation

Further reading

{{TODO: author name}}

Practical explanations of blockchain data, software integration and the context behind a record.

About Indexbase
← Back to all articles

Build with better context.

Get an update when private beta opens.

Form setup in progress. Nothing entered here is sent or saved. {{TODO: endpoint}} See the full form and email alternative.