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

如何修复Solidity合约onlyOwner修饰符的Truffle编译错误?

解决Truffle编译onlyOwner修饰符时的ParserError

问题重现

合约代码片段:

pragma solidity ^0.8.0;

modifier onlyOwner() {
        require(msg.sender == owner, "Only contract owner can call this function.");
        _;
    }

编译错误:

Compiling your contracts...
===========================
> Compiling ./contracts/FractionalRealEstate.sol

ParserError: Invalid token.
  --> project:/contracts/FractionalRealEstate.sol:48:1:
   |
48 |         require(msg.sender == owner, "Only contract owner can call this function.");
   |                                                                                 ^

解决方案

1. 清除不可见特殊字符

错误指向语句末尾,大概率是粘贴代码时带入了全角空格、零宽空格这类不可见字符。直接删除该行末尾的分号及引号部分,手动重新输入:

require(msg.sender == owner, "Only contract owner can call this function.");

2. 确保owner变量已定义

你的代码片段未包含owner变量声明,必须在合约内定义并初始化:

pragma solidity ^0.8.0;

contract FractionalRealEstate {
    address public owner;

    constructor() {
        owner = msg.sender;
    }

    modifier onlyOwner() {
        require(msg.sender == owner, "Only contract owner can call this function.");
        _;
    }

    // 示例使用修饰符的函数
    function ownerOnlyFunction() public onlyOwner {
        // 逻辑代码
    }
}

3. 检查缩进与换行格式

确保代码使用半角空格缩进,避免混用制表符(Tab),部分编译器对制表符的解析会出现异常。

4. 对齐Truffle与Solidity版本

检查truffle-config.js中的编译器版本,确保与合约内的pragma solidity ^0.8.0;一致:

module.exports = {
  compilers: {
    solc: {
      version: "^0.8.0", // 与合约pragma匹配
    }
  }
};

内容的提问来源于stack exchange,提问作者Gregory Betz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 18:32:06