name: indexer-wildcard description: >- Use when indexing all instances of a contract across all addresses (e.g., all ERC-20 transfers on a chain). Config setup (no address), wildcard handler option, and event.srcAddress. metadata: managed-by: envio
Wildcard Indexing
Index all events matching an event signature across all contract addresses on a chain.
Config (no address = wildcard)
contracts:
- name: ERC20
events:
- event: Transfer(indexed address from, indexed address to, uint256 value)
chains:
- id: 1
contracts:
- name: ERC20
# No address = wildcard (indexes ALL matching events on the chain)
Handler with wildcard: true
Pass wildcard: true in the options object to indexer.onEvent. Use event.srcAddress to identify which contract emitted the event:
indexer.onEvent(
{ contract: "ERC20", event: "Transfer", wildcard: true },
async ({ event, context }) => {
const tokenAddress = event.srcAddress; // The actual contract address
const id = `${event.chainId}-${event.transaction.hash}-${event.logIndex}`;
context.Transfer.set({
id,
token_id: `${event.chainId}-${tokenAddress}`,
from: event.params.from,
to: event.params.to,
value: event.params.value,
});
},
);
Combining with Event Filters (where)
Wildcard indexing produces high event volume. Use where to reduce it — see the indexer-filters skill for object, array, function, and addresses forms.
indexer.onEvent(
{
contract: "ERC20",
event: "Transfer",
wildcard: true,
where: { params: { from: ZERO_ADDRESS } },
},
async ({ event, context }) => {
/* ... */
},
);
If something is unclear, use the
envio-docsskill to search and read the latest documentation.