def _new_node_state(
        self, state: GlobalState, edge_type=JumpType.UNCONDITIONAL, condition=None
    ) -> None:
        """

        :param state:
        :param edge_type:
        :param condition:
        """
        new_node = Node(state.environment.active_account.contract_name)
        old_node = state.node
        state.node = new_node
        new_node.constraints = state.mstate.constraints
        if self.requires_statespace:
            self.nodes[new_node.uid] = new_node
            self.edges.append(
                Edge(
                    old_node.uid, new_node.uid, edge_type=edge_type, condition=condition
                )
            )

        if edge_type == JumpType.RETURN:
            new_node.flags |= NodeFlags.CALL_RETURN
        elif edge_type == JumpType.CALL:
            try:
                if "retval" in str(state.mstate.stack[-1]):
                    new_node.flags |= NodeFlags.CALL_RETURN
                else:
                    new_node.flags |= NodeFlags.FUNC_ENTRY
            except StackUnderflowException:
                new_node.flags |= NodeFlags.FUNC_ENTRY
        address = state.environment.code.instruction_list[state.mstate.pc]["address"]

        environment = state.environment
        disassembly = environment.code
        if address in disassembly.address_to_function_name:
            # Enter a new function
            environment.active_function_name = disassembly.address_to_function_name[
                address
            ]
            new_node.flags |= NodeFlags.FUNC_ENTRY

            log.debug(
                "- Entering function "
                + environment.active_account.contract_name
                + ":"
                + new_node.function_name
            )
        elif address == 0:
            environment.active_function_name = "fallback"

        new_node.function_name = environment.active_function_name
def _new_node_state ( self , state : GlobalState , edge_type = JumpType . UNCONDITIONAL , condition = None ) -> None : new_node = Node ( state . environment . active_account . contract_name ) old_node = state . node state . node = new_node new_node . constraints = state . mstate . constraints if self . requires_statespace : self . nodes [ new_node . uid ] = new_node self . edges . append ( Edge ( old_node . uid , new_node . uid , edge_type = edge_type , condition = condition ) ) if edge_type == JumpType . RETURN : new_node . flags |= NodeFlags . CALL_RETURN elif edge_type == JumpType . CALL : try : if "retval" in str ( state . mstate . stack [ - 1 ] ) : new_node . flags |= NodeFlags . CALL_RETURN else : new_node . flags |= NodeFlags . FUNC_ENTRY except StackUnderflowException : new_node . flags |= NodeFlags . FUNC_ENTRY address = state . environment . code . instruction_list [ state . mstate . pc ] [ "address" ] environment = state . environment disassembly = environment . code if address in disassembly . address_to_function_name : environment . active_function_name = disassembly . address_to_function_name [ address ] new_node . flags |= NodeFlags . FUNC_ENTRY log . debug ( "- Entering function " + environment . active_account . contract_name + ":" + new_node . function_name ) elif address == 0 : environment . active_function_name = "fallback" new_node . function_name = environment . active_function_name
:param state:
        :param edge_type:
        :param condition: