如何修复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
相关产品推荐
相关产品推荐

