def _end_message_call( self, return_global_state: GlobalState, global_state: GlobalState, revert_changes=False, return_data=None, ) -> List[GlobalState]: # Resume execution of the transaction initializing instruction op_code = return_global_state.environment.code.instruction_list[ return_global_state.mstate.pc]["opcode"] # Set execution result in the return_state return_global_state.last_return_data = return_data if not revert_changes: return_global_state.world_state = copy(global_state.world_state) return_global_state.environment.active_account = global_state.accounts[ return_global_state.environment.active_account.address] # Execute the post instruction handler new_global_states = Instruction(op_code, self.dynamic_loader).evaluate( return_global_state, True) # In order to get a nice call graph we need to set the nodes here for state in new_global_states: state.node = global_state.node return new_global_states
def _end_message_call( self, return_global_state: GlobalState, global_state: GlobalState, revert_changes=False, return_data=None, ) -> List[GlobalState]: """ :param return_global_state: :param global_state: :param revert_changes: :param return_data: :return: """ return_global_state.mstate.constraints += global_state.mstate.constraints # Resume execution of the transaction initializing instruction op_code = return_global_state.environment.code.instruction_list[ return_global_state.mstate.pc]["opcode"] # Set execution result in the return_state return_global_state.last_return_data = return_data if not revert_changes: return_global_state.world_state = copy(global_state.world_state) return_global_state.environment.active_account = global_state.accounts[ return_global_state.environment.active_account.address.value] if isinstance(global_state.current_transaction, ContractCreationTransaction): return_global_state.mstate.min_gas_used += ( global_state.mstate.min_gas_used) return_global_state.mstate.max_gas_used += ( global_state.mstate.max_gas_used) # Execute the post instruction handler new_global_states = Instruction(op_code, self.dynamic_loader, self.iprof).evaluate( return_global_state, True) # In order to get a nice call graph we need to set the nodes here for state in new_global_states: state.node = global_state.node return new_global_states