@staticmethod<EOL><INDENT>def _in_user_func(state):<DEDENT>
<EOL>in_function = state.context.get('<STR_LIT>', False)<EOL>prev_tx_count = state.context.get('<STR_LIT>', <NUM_LIT:0>)<EOL>curr_tx_count = len(state.platform.transactions)<EOL>new_human_tx = prev_tx_count != curr_tx_count<EOL>if in_function and not new_human_tx:<EOL><INDENT>return True<EOL><DEDENT>in_function = len(state.solve_n(state.platform.current_transaction.data[:<NUM_LIT:4>], <NUM_LIT:2>)) == <NUM_LIT:1><EOL>state.context['<STR_LIT>'] = in_function<EOL>state.context['<STR_LIT>'] = curr_tx_count<EOL>return in_function<EOL>
:param state: current state
:return: whether the current execution is in a user-defined function or not.

NOTE / TODO / FIXME: As this may produce false postives, this is not in the base `Detector` class.
It should be fixed at some point and moved there. See below.

The first 4 bytes of tx data is keccak256 hash of the function signature that is called by given tx.

All transactions start within Solidity dispatcher function: it takes passed hash and dispatches
the execution to given function based on it.

So: if we are in the dispatcher, *and contract have some functions* one of the first four tx data bytes
will effectively have more than one solutions.

BUT if contract have only a fallback function, the equation below may return more solutions when we are
in a dispatcher function.  <--- because of that, we warn that the detector is not that stable
for contracts with only a fallback function.