OpenZeppelin ERC721合约执行truffle compile时override关键字解析报错
问题原因
你遇到的报错是Solidity版本和OpenZeppelin合约版本不匹配导致的:
override关键字是Solidity 0.6.8版本才正式引入的语法特性,低于该版本的编译器无法识别这个关键字,就会抛出「期望得到'{'却遇到保留关键字override」的解析错误- 目前最新版的
@openzeppelin/contracts(4.x及以上)要求Solidity版本 >=0.8.0,而你代码里声明的Solidity版本为^0.6.0,版本不适配就会触发该错误
解决方案
你可以任选一种方案修复:
方案1:降级OpenZeppelin到适配Solidity 0.6的版本
执行以下命令安装最后一个支持Solidity 0.6的OpenZeppelin版本:
npm install @openzeppelin/contracts@3.4.2
安装完成后重新执行truffle compile即可正常编译。
方案2:升级Solidity版本适配最新OpenZeppelin
- 修改合约代码开头的版本声明为:
pragma solidity ^0.8.0;
- 打开项目根目录下的
truffle-config.js,找到编译器配置段,修改solc版本匹配0.8.x:
compilers: { solc: { version: "^0.8.20", // 选任意0.8系列的稳定版本即可 } }
- 保存修改后重新执行
truffle compile即可。
内容的提问来源于stack exchange,提问作者Matinshoon
相关产品推荐
相关产品推荐

