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

Solidity 0.5.0版本require()正确语法咨询及报错解决

Solidity 0.5.0中require()的正确语法及报错解决

嘿,我正好清楚这个版本的语法变动!Solidity 0.5.0开始,require()函数的第二个参数(错误提示信息)从可选项变成了必填项,这就是你收到Provide an error message for require()报错的核心原因。

正确语法格式

require()必须接收两个参数:第一个是布尔类型的条件表达式,第二个是字符串类型的错误提示文本,标准格式如下:

require(布尔条件, "你的错误提示内容");

错误用法vs正确用法对比

  • ❌ 错误用法(缺少错误信息,0.5.0+版本会报错):
    require(msg.value >= 1 ether);
    
  • ✅ 正确用法(添加合法错误信息):
    require(msg.value >= 1 ether, "Sent value must be at least 1 Ether");
    

你可能踩的坑

如果之前尝试添加错误信息没成功,大概率是这两种情况:

  1. 把错误信息写在了require()函数外部,比如:
    require(msg.sender == owner);
    "Only owner can call this"; // 这完全无效,错误信息必须作为第二个参数传入函数
    
  2. 错误信息不是字符串类型,比如传入了数字、地址等非string类型的值,一定要确保第二个参数是字符串字面量或可转换为string的表达式。

完整示例合约

下面是一个简单的合约示例,展示require()的正确使用方式:

pragma solidity ^0.5.0;

contract AccessControl {
    address public owner;

    constructor() public {
        owner = msg.sender;
    }

    function changeOwner(address newOwner) public {
        // 校验调用者权限
        require(msg.sender == owner, "Only current owner can change ownership");
        // 校验新地址合法性
        require(newOwner != address(0), "New owner address cannot be zero");
        
        owner = newOwner;
    }
}

内容的提问来源于stack exchange,提问作者DEBIN D VARGHESE

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:13:51