-
Notifications
You must be signed in to change notification settings - Fork 1.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
chore: clearer error message when function signature does not contain parentheses #9478
base: master
Are you sure you want to change the base?
Conversation
Co-authored-by: Yash Atreya <[email protected]>
Thanks! |
} | ||
|
||
let func = if sig.contains('(') { | ||
// a regular function signature with parentheses | ||
get_func(sig)? | ||
} else { | ||
let etherscan_api_key = etherscan_api_key.ok_or_eyre( | ||
"If you wish to fetch function data from EtherScan, please provide an API key.", | ||
"Function signature does not contain parentheses. If you wish to fetch function data from Etherscan, please provide an API key.", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Doesn't make sense to include it in this error message to be honest
Should rather be different message or fall-through condition in this else block, not part of this error for handling missing Etherscan API key (which is valid on its own)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Maybe when the signature does not contain parentheses the code try to treat the string as the function name and want to fetch the signature from Etherscan?
I think this message can help users that wrongly omit parentheses solve the problem faster without misleading info.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don't think there is actually a problem with omitting parentheses here
You are having this issue because you need to pass an Etherscan API key and RPC URL.
The function deposit
is also not a method on the Uniswap V2 Router but rather on WETH.
cast call 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2 'deposit' --etherscan-api-key <API_KEY> --rpc-url <RPC_URL>
cast call 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2 'deposit()' --etherscan-api-key <API_KEY> --rpc-url <RPC_URL>
yield the same result 0x
, which is expected
cast call 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D 'factory' --etherscan-api-key <API_KEY> --rpc-url <RPC_URL>
yields: 0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f
whereas
cast call 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D 'factory()' --etherscan-api-key <API_KEY> --rpc-url <RPC_URL>
yields: 0x0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I guess it could be explained further that factory()
is providing the full signature, while factory
without parens is requesting a function called factory
which can only be retrieved from an outside source
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
My issue is when I wrongly omit the parentheses, the printed error message does not direct me to fix the problem.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@yipu3 per comments above, we discussed a better UX would be to warn that the function will be retrieved from outside source, do you want to update the PR to reflect this? thanks
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ok thanks. I will update.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
How about this:
Function is pure name. The signature will be retrieved from outside source, please provide an Etherscan API key.
Any suggestion?
Motivation
Closes #9479
When I wrongly input a function signature without parentheses:
./target/debug/cast call 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D 'deposit'
The error message is a bit of confusing:
Which costs me some time to figure out what's the point.
A clearer error message is needed.
Solution
Change the message into: