You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Solidity中如何编写自定义错误并返回对应的错误提示信息?

Solidity自定义错误revert未返回信息的解决方法

先明确你代码里的两处核心问题:

  1. if条件语法错误
    if user 是无效的Solidity语法,必须编写完整的布尔判断逻辑,比如 if (user == address(0))(示例判断user地址为空),或者其他符合你业务需求的布尔表达式。

  2. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 11:45:35