Solidity events are logged on-chain. Indexed parameters become searchable 32-byte topics (`topics[1..3]`), while non-indexed parameters are ABI-encoded in the log data field.
js const filter = contract.filters.Transfer(userAddress); const logs = await contract.queryFilter(filter, fromBlock, toBlock);