I find it a bit confusing that when defining a custom error like this:
interface MyInterface {
error MyCustomError();
}
The type of MyInterface.MyCustomError
is function() pure
.
I know that custom errors are ABI encoded identically as functions, but I think that they deserve a bespoke type.
My vote would go to error
, which under the hood would be an alias for bytes24
(just like function
).
cameel
April 4, 2022, 1:53pm
2
Where is it reported as function() pure
? I wanted to check if we do this by design or if it’s an error but I can’t find this.
I just checked the solc --abi
output and I see this:
[{"inputs":[],"name":"MyCustomError","type":"error"}]
In solc --ast-compact-json
the error looks like this:
[
{
"errorSelector": "4e7254d6",
"id": 2,
"name": "MyCustomError",
"nameLocation": "34:13:0",
"nodeType": "ErrorDefinition",
"parameters":
{
"id": 1,
"nodeType": "ParameterList",
"parameters": [],
"src": "47:2:0"
},
"src": "28:22:0"
}
]
And in solc --hashes
:
Error signatures:
4e7254d6: MyCustomError()
Where is it reported as function() pure
?
I first saw it in a hint in VSCode but this doesn’t look like a problem with the vscode-solidity
extension:
When I run the tests with forge
, the compiler run fails with the following error:
Error:
0: Compiler run failed
TypeError: Explicit type conversion not allowed from "function () pure" to "bytes4".
--> /path/to/my/test/file.t.sol:33:25:
|
33 | vm.expectRevert(bytes4(MyInterface.MyCustomError));
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
0:
Location:
cli/src/cmd/utils.rs:43
Environment:
solidity v0.8.13+commit.abaa5c0e
forge v0.2.0 (a0db055 2022-04-03T00:03:53.441110+00:00)
cameel
April 4, 2022, 2:20pm
4
Oh, so it’s in an error message. True, we should improve that. I suspect that something similar happens when you try it with an event. Can you submit an issue?
1 Like
Can you submit an issue?
I did it! See issue #12896 . I would have linked to it but for some reason the forum keeps considering my GitHub links as spam and hiding my posts.
cameel
April 4, 2022, 2:48pm
6
Thanks! I approved your posts and gave you a higher “trust level” so hopefully the false flag issue is resolved now.
1 Like