In this track: Execution traces and low-level calls
advanced · 4 MIN READ
Trace a failed token transfer
Separate the call result, return value and state effects.
LET’S PICTURE IT
A service can reject the request, reply false or claim success under its own rules.
SEE IT FOR YOURSELF
Follow a revert and decode its error dataStep 1 / 4
This fictional call requests a transfer of one hundred raw units while the relevant balance is forty.
This fictional call requests a transfer of one hundred raw units while the relevant balance is forty.The contract rejects this request. State changes in the reverted call are rolled back, while work already consumed can still cost gas.A common Error(string) begins with selector 08c379a0. This example then encodes the message Not enough tokens.A decoder can recognize the supplied error shape. Identifying the true cause and source still needs the call context, code and state.
Animated local teaching model. No wallet, RPC or live blockchain data. Some labels and hashes are abbreviated for readability.
Identify the token interface
A standard transfer call takes a recipient and raw amount. The ABI input alone does not establish the implementation’s balance or permission behavior.
Read the low-level outcome
A revert yields a failed call and possible revert data. A successful low-level call can still return a boolean false under a token interface.
Apply the integration policy
A caller should handle the target’s documented return convention and relevant compatibility requirements. Do not equate every non-reverting byte sequence with a completed transfer.
Check retained effects
Inspect the successful state transition and surviving logs when available. A simulated trace needs matching state and chain context before it supports claims about a real transaction.
Follow the execution
Case A: call fails → inspect revert bytes
Case B: call succeeds, returns false → handle token-level failure
Case C: call succeeds, returns expected success shape → still use correct target context
A local conceptual trace with explicit assumptions; this is not a trace of a live transaction.
QUICK CHECK · NO PRESSURE
Does low-level success always mean a token returned true?
The return payload can still encode false or another shape.