add transaction hooks to svm

pull/986/head
Joran Honig 6 years ago
parent 6971b2c2e7
commit 1d8995402d
  1. 14
      mythril/laser/ethereum/svm.py

@ -95,6 +95,10 @@ class LaserEVM:
self._add_world_state_hooks = [] # type: List[Callable] self._add_world_state_hooks = [] # type: List[Callable]
self._execute_state_hooks = [] # type: List[Callable] self._execute_state_hooks = [] # type: List[Callable]
self._start_sym_trans_hooks = [] # type: List[Callable]
self._stop_sym_trans_hooks = [] # type: List[Callable]
self._start_sym_exec_hooks = [] # type: List[Callable] self._start_sym_exec_hooks = [] # type: List[Callable]
self._stop_sym_exec_hooks = [] # type: List[Callable] self._stop_sym_exec_hooks = [] # type: List[Callable]
@ -176,8 +180,14 @@ class LaserEVM:
i, len(self.open_states) i, len(self.open_states)
) )
) )
for hook in self._start_sym_trans_hooks:
hook()
execute_message_call(self, address) execute_message_call(self, address)
for hook in self._stop_sym_trans_hooks:
hook()
def exec(self, create=False, track_gas=False) -> Union[List[GlobalState], None]: def exec(self, create=False, track_gas=False) -> Union[List[GlobalState], None]:
""" """
@ -480,6 +490,10 @@ class LaserEVM:
self._start_sym_exec_hooks.append(hook) self._start_sym_exec_hooks.append(hook)
elif hook_type == "stop_sym_exec": elif hook_type == "stop_sym_exec":
self._stop_sym_exec_hooks.append(hook) self._stop_sym_exec_hooks.append(hook)
elif hook_type == "start_sym_trans":
self._start_sym_trans_hooks.append(hook)
elif hook_type == "stop_sym_trans":
self._stop_sym_trans_hooks.append(hook)
else: else:
raise ValueError( raise ValueError(
"Invalid hook type %s. Must be one of {add_world_state}", hook_type "Invalid hook type %s. Must be one of {add_world_state}", hook_type

Loading…
Cancel
Save