Error importing solidity file
Opened this issue · 0 comments
pipermerriam commented
What is wrong?
Traceback (most recent call last):
File "/home/web/venv/lib/python3.7/site-packages/django/core/handlers/base.py", line 147, in get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/usr/lib/python3.7/contextlib.py", line 74, in inner
return func(*args, **kwds)
File "/home/web/venv/lib/python3.7/site-packages/django/views/decorators/csrf.py", line 58, in wrapped_view
return view_func(*args, **kwargs)
File "/home/web/venv/lib/python3.7/site-packages/django/views/generic/base.py", line 68, in view
return self.dispatch(request, *args, **kwargs)
File "/home/web/venv/lib/python3.7/site-packages/rest_framework/views.py", line 466, in dispatch
response = self.handle_exception(exc)
File "/home/web/venv/lib/python3.7/site-packages/rest_framework/views.py", line 463, in dispatch
response = handler(request, *args, **kwargs)
File "./func_sig_registry/registry/views.py", line 118, in post
import_results.extend(Signature.import_from_solidity_file(file_obj))
File "./func_sig_registry/registry/models.py", line 101, in import_from_solidity_file
return cls.import_from_solidity_code(code)
File "./func_sig_registry/registry/models.py", line 95, in import_from_solidity_code
for raw_signature in function_signatures
File "./func_sig_registry/registry/models.py", line 95, in <listcomp>
for raw_signature in function_signatures
File "./func_sig_registry/registry/models.py", line 81, in import_from_raw_text_signature
text_signature = normalize_function_signature(raw_function_signature)
File "./func_sig_registry/utils/solidity.py", line 190, in normalize_function_signature
arg_types = ','.join(get_arg_types(args))
File "./func_sig_registry/utils/solidity.py", line 170, in get_arg_types
types = [p.strip().split(maxsplit=1)[0] for p in parts]
File "./func_sig_registry/utils/solidity.py", line 170, in <listcomp>
types = [p.strip().split(maxsplit=1)[0] for p in parts]
IndexError: list index out of rangeTraceback (most recent call last):
File "./func_sig_registry/utils/solidity.py", line 186, in normalize_function_signature
args_tuple_type = parse_type(normalize_type(f'({args})'))
File "/home/web/venv/lib/python3.7/site-packages/eth_abi/grammar.py", line 125, in parse
raise ParseError(e.text, e.pos, e.expr)
ParseError: Parse error at ' )' (column 2) in type string '( )'Traceback (most recent call last):
File "/home/web/venv/lib/python3.7/site-packages/eth_abi/grammar.py", line 123, in parse
return super().parse(type_str)
File "/home/web/venv/lib/python3.7/site-packages/parsimonious/nodes.py", line 254, in parse
return self._parse_or_match(text, pos, 'parse')
File "/home/web/venv/lib/python3.7/site-packages/parsimonious/nodes.py", line 289, in _parse_or_match
return self.visit(getattr(self.grammar, method_name)(text, pos=pos))
File "/home/web/venv/lib/python3.7/site-packages/parsimonious/grammar.py", line 115, in parse
return self.default_rule.parse(text, pos=pos)
File "/home/web/venv/lib/python3.7/site-packages/parsimonious/expressions.py", line 120, in parse
node = self.match(text, pos=pos)
File "/home/web/venv/lib/python3.7/site-packages/parsimonious/expressions.py", line 137, in match
raise error
ParseError: Rule 'type' didn't match at ' )' (line 1, column 2).
How can it be fixed
I'm not able to recover the original solidity source that was sent in, but I believe we simply need to catch the ParseError
at an appropriate place and present a friendly error to the user.