truffle编译合同指定不正确的固体版本



真的被这个困扰了,试图编写一个ERC21收藏品,当我用松露编译我的项目时…我得到一个错误Truffle is currently using solc 0.5.16, but one or more of your contracts specify "pragma solidity ^0.8.0"

我觉得这很奇怪,因为我已经在我的合同和我的package.lock中编辑了版本。json,试图删除我的包锁,在合同中更改版本,然后尝试运行npm安装再次但我得到相同的错误,无论我使用什么版本

我以前在其他项目中有过这个错误,但只是通过纠正版本来修复它…但这次行不通了:(

我试过pragma solidity>=0.4.21 <0.6.0;^0.5.16和0.8.0和^0.8.0我试过相应地更改锁文件,没有运气

希望有人能解释我做错了什么?

合同例子

pragma solidity >=0.4.21 <0.6.0;
import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
contract color is ERC721 {
constructor() ERC721("color", "COLOR") {
}
}

truffle.config

require('babel-register');
require('babel-polyfill');
module.exports = {
networks: {
development: {
host: "127.0.0.1",
port: 7545,
network_id: "*" // Match any network id
},
},
contracts_directory: './src/contracts/',
contracts_build_directory: './src/abis/',
compilers: {
solc: {
optimizer: {
enabled: true,
runs: 200
}
}
}
}

package-lock.json

"truffle": {
"version": "5.0.5",
"resolved": "https://registry.npmjs.org/truffle/-/truffle-5.0.5.tgz",
"requires": {
"app-module-path": "^2.2.0",
"mocha": "^4.1.0",
"original-require": "1.0.1",
"solc": "^0.8.0"
}
},

我有同样的问题:(检查你的包。Json用于旧版本的固体库。我在truffle-config中指定了0.8版本,它让我进一步使用OpenZepplin最新的合约,但仍然有一些旧的合约使用0.5,它失败了。我通过编辑软件包解决了这个问题。Json指向最新的openzepplin

npm install——upgrade

然后

truffle compile—all

我们可以在松露中列出多个固体编译器吗?

module.exports = {
// See <http://truffleframework.com/docs/advanced/configuration>
// for more about customizing your Truffle configuration!
networks: {
development: {
host: "127.0.0.1",
port: 7545,
network_id: "*" // Match any network id
},
develop: {
port: 8545
},
nftWallet: {
provider: () => new PrivateKeyProvider(privateKey, "http://localhost:8545"),
network_id: "*",
type: "quorum",
gasPrice: 0
}
},
//Configure your compilers
compilers: {
solc: {
version: "0.8",    // Fetch exact version from solc-bin (default: truffle's version)
}
}
};

最新更新