<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def gen_txn_path(self, txn):
 """Return path to state as 'str' type or None"""

        txn_type = get_type(txn)
        if txn_type not in self.state_update_handlers:
            logger.error('Cannot generate id for txn of type {}'.format(txn_type))
            return None

        if txn_type == NYM:
            nym = get_payload_data(txn).get(TARGET_NYM)
            binary_digest = domain.make_state_path_for_nym(nym)
            return hexlify(binary_digest).decode()
        elif txn_type == ATTRIB:
            path = domain.prepare_attr_for_state(txn, path_only=True)
            return path.decode()
        elif txn_type == SCHEMA:
            path = domain.prepare_schema_for_state(txn, path_only=True)
            return path.decode()
        elif txn_type == CLAIM_DEF:
            path = domain.prepare_claim_def_for_state(txn, path_only=True)
            return path.decode()
        elif txn_type == REVOC_REG_DEF:
            path = domain.prepare_revoc_def_for_state(txn, path_only=True)
            return path.decode()
        elif txn_type == REVOC_REG_ENTRY:
            path = domain.prepare_revoc_reg_entry_for_state(txn, path_only=True)
            return path.decode()

        raise NotImplementedError("path construction is not implemented for type {}".format(txn_type))