truffle 编译合约指定了不正确的 solidity 版本

truffle compile contracts specifying incorrect solidity version

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

我觉得这很奇怪,因为我已经在我的合同和我的 package.lock.json 中编辑了版本,尝试删除我的 package-lock,更改了合同中的版本然后再次尝试 运行 npm install但是无论我使用什么版本我都会得到同样的错误

我以前在其他项目中遇到过这个错误,但只是通过更正版本来修复它...但这次没有用:(

我试过 pragma solidity >=0.4.21 <0.6.0;和 0.6.0 和 0.5.16 ^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"
      }
    },

我遇到了同样的问题 :( 检查你的 package.json 是否有旧版本的 solidity 库。 我在 truffle-config 中指定了版本 0.8,这让我进一步了解了 OpenZepplin 最新的合约,但仍然有一些旧合约使用 0.5,但它失败了。 我通过编辑 package.json 指向最新的 openzepplin 解决了这个问题 然后

npm install --upgrade

然后

truffle compile --all

我们可以在 truffle 中列出多个 solidity 编译器吗?

    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)

           }
   }

};