Solidity中如何编写自定义错误并返回对应的错误提示信息?
Solidity自定义错误revert未返回信息的解决方法
先明确你代码里的两处核心问题:
if条件语法错误
if user是无效的Solidity语法,必须编写完整的布尔判断逻辑,比如if (user == address(0))(示例判断user地址为空),或者其他符合你业务需求的布尔表达式。revert调用自定义错误的语法错误
调用自定义错误时,你用的键值对格式参数名错误,正确的传递方式有两种:
- 按参数顺序直接传值:
revert MyCustomError(msg.sender); - 使用命名参数的正确格式:
revert MyCustomError({_address: msg.sender});(注意参数名要和你定义的_address一致,不是address)
修正后的完整代码示例:
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; // 自定义错误 error MyCustomError(address _address); contract TestContract { function testRevert(address user) public { // 示例触发条件:当user地址为空时执行revert if (user == address(0)) { // 二选一调用自定义错误 revert MyCustomError(msg.sender); // 或者 revert MyCustomError({_address: msg.sender}); } } }
另外需要注意:
- 自定义错误仅在Solidity 0.8.4及以上版本支持,确保你的合约编译器版本符合要求。
- 如果工具仍只显示"Runtime error: revert",大概率是开发工具版本过旧无法解析自定义错误,建议更新Remix、Hardhat或Foundry到最新版本,新版本工具会在交易详情里展示自定义错误的具体内容和参数。
内容的提问来源于stack exchange,提问作者Key Lol
相关产品推荐
相关产品推荐

