Function Calls

Decode and store transaction calldata for specific function selectors.

Configuration

Add a [[contracts.calls]] block under any contract that has an ABI with function definitions.

sieve.toml
[[contracts]]
name = "USDC"
address = "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"
abi = "abis/erc20.json"
start_block = 21_000_000

[[contracts.calls]]
name = "transfer"
table = "usdc_transfer_calls"
context = ["block_timestamp", "tx_from"]
columns = [
  { param = "to",    name = "to_address", type = "text" },
  { param = "value", name = "value",      type = "numeric" },
]
name · required function name from the ABI
table · required PostgreSQL table name
context · optional same context fields as events
columns · optional auto-generated from ABI function inputs if omitted

How it works

Sieve matches the first 4 bytes of each transaction's input data against the function selector derived from your ABI. When a match is found, the full calldata is decoded and written to your table.

Only successful (non-reverted) transactions are indexed
Columns map to function input parameters, not return values
Can be combined with events on the same contract

Next steps

Native Transfers track ETH transfers without an ABI
Context fields reference all available metadata columns