Я тестирую много контрактов вместе, и проблема с версией действительно смутила меня.
Фон
Migrations.sol pragma solidity >=0.4.21 <0.6.0;
Contract_code.sol pragma solidity 0.4.19;
truffle-config. js
module.exports = {networks:
{development:
{host: "127.0.0.1",
port: 8545,
network_id: "*", }},
compilers: {solc:
{version: "0.4.24", }}}
Однако, когда я запускаю truffle migrate
, вот результат, который я получил.
Error: Truffle is currently using solc 0.4.24, but one or more of your contracts specify "pragma solidity 0.4.19".
Please update your truffle config or pragma statement(s).
(See https://truffleframework.com/docs/truffle/reference/configuration#compiler-configuration for information on
configuring Truffle to use a specific solc compiler version.)
Я заметил, что есть еще одна ошибка, которая говорит:
Error: CompileError: /home/jiru/EEthereum/contract_code/assdbs_ASDCBA/contracts/assdbs_ASDCBA.sol:13:1: ParserError: Source file requires different compiler version (current compiler is 0.5.12+commit.7709ece9.Linux.g++ - note that nightly builds are considered to be strictly less than the released version
pragma solidity 0.4.19;
^---------------------^
Я пробовал несколько способов:
- Изменить версию в трюфеле- config. js на ^ 0.4.24.
- Измените версию вigration.sol на
pragma solidity >=0.4.19 <0.6.0;
- Измените версию в конфигурации трюфеля. js на 0.4.21.
Первые два метода вернули одну и ту же ошибку. Последний вернул
/home/jiru/EEthereum/contract_code/assdbs_ASDCBA/contracts/Migrations.sol:7:14: ParserError: Expected identifier, got 'LParen'
constructor() public {
Однако, когда я попытался изменить версию в contract_name.sol на ^ 0.4.19, это сработало.
Теперь вот все настройки: Migration.sol pragma solidity >=0.4.21 <0.6.0;
Contract_code.sol pragma solidity 0.4.19;
truffle-config. js version:"0.4.24"
Мне интересно, почему это изменение заставляет его работать, и я хочу знать, почему предыдущая настройка не будет работа.
Вопрос
- Связана ли версия Solid в Migrations.sol с версией трюфеля? Потому что, если я изменю его, возникнет странная ошибка.
note that nightly builds are considered to be strictly less than the released version
Что это значит? Разве старшая версия не всегда совместима с младшей? - Есть также некоторые контракты, которые я тестирую с более низкой версией, например
0.4.12
, но они работали без ошибок, почему?
Спасибо, если кто-нибудь может помочь: p