This repository has been archived by the owner on Oct 19, 2024. It is now read-only.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This includes a more sophisticated human readable abi parser that should be on par with
ethers-js
's interface parser.Motivation
The existing parser followed the grammar loosely;
False positives were possible, so that for example
event SetValue_function_called()
would be detected asFunction
.Solution
All parser function are replaced with a handwritten parser that follows
ethers-js
abi parsing rules.This also detects
StateMutability
and constructors.All tests are successfully updated with the new parsers.
Up for discussion
returns
statement: The new parser will fail if a function lacks areturns
statement before its outputs. Thecontract_human_readable
example did not succeed because a missingreturns
statement (function getValue() external view (string)
) was detected and fixed in #f3bd156 . I'm not sure wether the preferential behavior would be to allow a missing
returns
or require it.ethers-js
treats a missingreturns
before ouputs as anINVALID_ARGUMENT
exception.ParseError::ParseError(super::Error::InvalidData)
is returned. I'm open to make this responsive by introducing aMessage(String)
error type or provide theParseError::ParseError(super::Error::Other(anyow::Error))
with a message.constructor
s are handled asConstructor
now and asigned toContract::constructor
, I'm not sure about potential side effects of the constructor now missing fromContract::functions