Choose data and an ABI
An ABI describes how a contract’s functions and events are encoded. Add Decode, set Encoded data, and select the ABI for the contract whose bytes you are interpreting.
For Transaction in Contract, use {{ event.input }} to decode the call. Contract events can carry raw data and topics for event decoding. A token transfer or price sample does not necessarily carry the raw input you need.
Find or add an ABI
Search by contract name or address. Check its chain and address, since similarly named contracts may have different interfaces. For a proxy, use an ABI that describes the called implementation.
Use Add ABI when your interface is missing. Enter the requested address, name, and ABI JSON, then use it in the action. Account ABIs are reusable; removing one can break actions that rely on it.
Use the result
Run a test and inspect the decoded output. Later actions can reference fields under actions.decode_1, including args. Copy the exact argument path from the output rather than guessing its name.
If decoding fails, confirm the input is nonempty, the correct kind of encoded data, and compatible with the ABI. Function calls return positional arguments in an array; use paths such as args.0 and args.1. Decoding does not automatically convert integers to human-readable token units.
Example: a USDC transfer call
Consider a call to the USDC token contract on Ethereum: 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48. Its transfer(address,uint256) function requests a transfer to a recipient with an amount in raw token units.
This is an illustrative call for 25 USDC to 0x1111111111111111111111111111111111111111, not a real transaction. USDC uses six decimal places, so 25 USDC is represented as 25000000.
- Choose Transaction in Contract on Ethereum and select the USDC contract address.
- Add Decode and select the USDC ABI for Ethereum. For a proxy contract, use the interface containing transfer, not only proxy-management functions.
- Leave Encoded data set to {{ event.input }}. Test run decodes the matching example’s input; an actual example may call a different function.
The encoded input
The first four bytes, 0xa9059cbb, identify transfer(address,uint256). The following two 32-byte values encode the recipient and amount. Here is the complete sample calldata:
Decode interprets these bytes using the selected ABI. It decodes the function call, not the contract’s source code.
0xa9059cbb000000000000000000000000111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000017d7840The decoded output
For this input and ABI, the action returns the object below under actions.decode_1. Integer values are strings so large amounts retain their precision.
Call arguments are positional: args.0 is the recipient and args.1 is the raw amount. Although the ABI names them to and value, this call output does not expose args.to or args.value.
| Field · type | Meaning and availability |
|---|---|
kindstring | "call" for function calldata. A decoded event log instead has kind "log". |
namestring | Function name: "transfer" in this example. |
args.0string | The first function argument: the recipient address. |
args.1string | The second function argument: "25000000", the amount in raw USDC units. |
{
"kind": "call",
"name": "transfer",
"args": [
"0x1111111111111111111111111111111111111111",
"25000000"
]
}Use the result in a message
Place Email or Slack after Decode on the same path. Use the action’s displayed output key; a second Decode action uses decode_2.
Dividing by 1000000 is correct for this USDC example. Other tokens can have different decimals; Decode does not determine a token’s decimals for you.
- The rendered function is transfer.
- The rendered recipient is 0x1111111111111111111111111111111111111111.
- The rendered requested amount is 25 USDC.
Function: {{ actions.decode_1.name }}
Recipient: {{ actions.decode_1.args.0 }}
Requested amount: {{ actions.decode_1.args.1 / 1000000 }} USDCA decoded call is not proof of a transfer
The input describes what the caller requested. It can be decoded even if the transaction reverted. Check the transaction’s success status and emitted transfer events before describing the requested transfer as completed.
Named event-log arguments can have paths such as args.value; they are a different output shape from this function-call array. Inspect the actual Output panel before writing a template.