pipermerriam/ethereum-function-signature-registry

Solidity code parsing error

pipermerriam opened this issue · 0 comments

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 87, in post
    if not serializer.is_valid():
  File "/home/web/venv/lib/python3.7/site-packages/rest_framework/serializers.py", line 213, in is_valid
    self._validated_data = self.run_validation(self.initial_data)
  File "/home/web/venv/lib/python3.7/site-packages/rest_framework/serializers.py", line 407, in run_validation
    value = self.to_internal_value(data)
  File "/home/web/venv/lib/python3.7/site-packages/rest_framework/serializers.py", line 439, in to_internal_value
    validated_value = validate_method(validated_value)
  File "./func_sig_registry/registry/forms.py", line 34, in validate_text_signature
    return normalize_function_signature(value)
  File "./func_sig_registry/utils/solidity.py", line 194, in normalize_function_signature
    raise ValueError('could not parse function args') from e
ValueError: could not parse function argsTraceback (most recent call last):
  File "./func_sig_registry/utils/solidity.py", line 192, in normalize_function_signature
    args_tuple_type = parse_type(normalize_type(f'({arg_types})'))
  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 3) 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 122, in parse
    raise IncompleteParseError(text, node.end, self)
IncompleteParseError: Rule 'type' matched in its entirety, but it didn't consume all the text. The non-matching portion of the text begins with ')' (line 1, column 3).Traceback (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 ' inte' (column 3) in type string '() internal view virtual returns (address payable)'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 122, in parse
    raise IncompleteParseError(text, node.end, self)
IncompleteParseError: Rule 'type' matched in its entirety, but it didn't consume all the text. The non-matching portion of the text begins with ' internal view virtu' (line 1, column 3).

This was triggered by the submission of:

"function _msgSender() internal view virtual returns (address payable)"

How can it be fixed

🤷 didn't investigate yet