Skip to content
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

Open
wants to merge 2 commits into
base: master
Choose a base branch
from

Conversation

yipu3
Copy link

@yipu3 yipu3 commented Dec 4, 2024

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:

Error: If you wish to fetch function data from EtherScan, please provide an API key.

Which costs me some time to figure out what's the point.

A clearer error message is needed.

Solution

Change the message into:

Function signature does not contain parentheses. If you wish to fetch function data from Etherscan, please provide an API key.

crates/cli/src/utils/abi.rs Outdated Show resolved Hide resolved
@DaniPopes DaniPopes enabled auto-merge (squash) December 4, 2024 07:50
@DaniPopes
Copy link
Member

Thanks!

@yipu3 yipu3 requested a review from yash-atreya December 4, 2024 08:48
@zerosnacks zerosnacks changed the title chore: clearer error message when function signature does not contain… chore: clearer error message when function signature does not contain parentheses Dec 4, 2024
}

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.",
Copy link
Member

@zerosnacks zerosnacks Dec 4, 2024

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)

Copy link
Author

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.

Copy link
Member

@zerosnacks zerosnacks Dec 4, 2024

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

Copy link
Member

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

Copy link
Author

@yipu3 yipu3 Dec 4, 2024

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.

Copy link
Collaborator

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

Copy link
Author

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.

Copy link
Author

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?

@zerosnacks zerosnacks self-requested a review December 4, 2024 09:10
@zerosnacks zerosnacks disabled auto-merge December 4, 2024 09:45
@DaniPopes DaniPopes self-requested a review December 5, 2024 18:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
Status: No status
Development

Successfully merging this pull request may close these issues.

chore: clearer error message when function signature does not contain parentheses
5 participants