Is it possible to detect a contract function call using a listener, even though it does not explicitly emit an event? I want to think this is possible, because block explorers like Etherscan are able to detect functions calls/transactions, as well as their metadata, such as block hash, value, caller, etc, even when the function called does not emit an event.
You can look at the data of the transaction. The data for a function call starts with the function signature (4 bytes), followed by the parameters of the function. If you want to see if a transaction called the
transfer function of a token for example, you take the first four bytes of
0xa9059cbb. Then you can simply check if the function data starts with those four bytes.