def __init__(self, hash, trace): self.hash = hash self.name = get_func_name(hash) self.color_name = get_func_name(hash, add_color=True) self.abi_name = get_abi_name(hash) self.const = None self.read_only = None self.payable = None self.hash = hash self.trace = deepcopy(trace) self.orig_trace = deepcopy(self.trace) self.params = self.make_params() if 'unknown' in self.name: self.make_names() self.trace = self.cleanup_masks(self.trace) self.ast = None self.analyse() assert self.payable is not None self.is_regular = self.const is None and \ self.getter is None
if find_f_list(m.if_true, func_calls) == []: fi = m.if_true[0] if m2 := match(fi, ("jd", ":jd")): return int(m2.jd) default = find_f(trace, find_default) if func_list else None self.add_func(default or 0, name="_fallback()") except Exception: logger.exception("Loader issue.") self.add_func(0, name="_fallback()") abi = make_abi(self.hash_targets) for hash, (target, stack) in self.hash_targets.items(): fname = get_func_name(hash) self.func_list.append((hash, fname, target, stack)) def next_line(self, i): i += 1 while i not in self.lines and self.last_line > i: i += 1 if i <= self.last_line: return i else: return None def add_func(self, target, hash=None, name=None, stack=()): assert hash is not None or name is not None # we need at least one