def __init__(self, address, abi: Dict = None, sources: Dict = None) -> None: self._sources = sources self.abi = abi self.address = address self.selectors = None self.signatures = None if self.abi != None: self.selectors = { utils.build_function_selector(i): i["name"] for i in self.abi if i["type"] == "function" } # this isn't fully accurate because of overloaded methods - will be removed in `v2.0.0` self.signatures = { i["name"]: utils.build_function_selector(i) for i in self.abi if i["type"] == "function" } fn_names = [i["name"] for i in self.abi if i["type"] == "function"] for abi in [i for i in self.abi if i["type"] == "function"]: name = f"{self.address}.{abi['name']}" natspec: Dict = {} if fn_names.count(abi["name"]) == 1: fn = _get_method_object(address, abi, name, None, natspec) self._check_and_set(abi["name"], fn) continue # special logic to handle function overloading if not hasattr(self, abi["name"]): overloaded = OverloadedMethod(address, name, None) self._check_and_set(abi["name"], overloaded) getattr(self, abi["name"])._add_fn(abi, natspec)
def __init__(self, project: Any, build: Dict, sources: Dict) -> None: self._project = project self._build = build.copy() self._sources = sources self.topics = _get_topics(self.abi) self.selectors = { build_function_selector(i): i["name"] for i in self.abi if i["type"] == "function" } # this isn't fully accurate because of overloaded methods - will be removed in `v2.0.0` self.signatures = { i["name"]: build_function_selector(i) for i in self.abi if i["type"] == "function" }
def __init__(self, abi: List) -> None: self.abi = abi # self.topics = _get_topics(self.abi) # CHECK self.selectors = { build_function_selector(i): i["name"] for i in self.abi if i["type"] == "function" } # this isn't fully accurate because of overloaded methods - will be removed in `v2.0.0` self.signatures = { i["name"]: build_function_selector(i) for i in self.abi if i["type"] == "function" }
def decode_input(self, calldata: Union[str, bytes]) -> Tuple[str, Any]: """ Decode input calldata for this contract. Arguments --------- calldata : str | bytes Calldata for a call to this contract Returns ------- str Signature of the function that was called Any Decoded input arguments """ if not isinstance(calldata, HexBytes): calldata = HexBytes(calldata) abi = next( (i for i in self.abi if i["type"] == "function" and build_function_selector(i) == calldata[:4].hex()), None, ) if abi is None: raise ValueError( "Four byte selector does not match the ABI for this contract") function_sig = build_function_signature(abi) types_list = get_type_strings(abi["inputs"]) result = eth_abi.decode_abi(types_list, calldata[4:]) input_args = format_input(abi, result) return function_sig, input_args
def __init__(self, project: Any, build: Dict, sources: Dict) -> None: self._project = project self._build = build.copy() self._sources = sources self.topics = _get_topics(self.abi) self.signatures = { i["name"]: build_function_selector(i) for i in self.abi if i["type"] == "function" }
def __init__( self, web3: 'AsyncWeb3', address: Address, abi: Dict, ) -> None: self.web3 = web3 self._address = address self.abi = abi self.signature = build_function_selector(abi) self._input_sig = build_function_signature(abi)
def __init__( self, address: str, abi: Dict, name: str, owner: Optional[AccountsType], natspec: Optional[Dict] = None, ) -> None: self._address = address self._name = name self.abi = abi self._owner = owner self.signature = build_function_selector(abi) self.natspec = natspec or {}
def __init__(self, name: str, abi: List) -> None: self._name = name self.abi = abi self.selectors = { build_function_selector(i): i["name"] for i in self.abi if i["type"] == "function" }