У меня есть контракт, в котором я хочу использовать <address>.transfer()
, который был выпущен в последней версии Solidity 0.4.10
.
У меня есть первая строка моего контракта: pragma solidity 0.4.10;
но когда я компилирую, я получаю Error: Source file requires different compiler version
, что совершенно очевидно означает, что трюфель пытается скомпилировать мой контракт с другой версией Solidity. До сих пор использует 0.4.8
.
Я установил 0.4.10
вчера вечером и solc --version
показывает 0.4.10
.
Итак, мой вопрос: как изменить версию Solidity в трюфельном проекте? Я просмотрел файл конфигурации и документы по трюфелю и не смог найти это. Я также не могу даже найти, где 0.4.8
он установлен (предполагался в самом трюфеле, но его нет в списке трюфелей package.json
).
В версии Truffle 5.0.0 (в настоящее время в бета-версии) вы можете указать версию Solidity в truffle.js
файле конфигурации, например
module.exports = {
networks: {
... etc ...
},
compilers: {
solc: {
version: <string> // ex: "0.4.20". (Default: Truffle's installed solc)
}
}
};
Это скопировано из сведений о выпуске здесь
К сожалению, Truffle не позволяет вам выбрать другую версию компилятора, по-видимому, это результат того, что solc API еще не является стабильным, что затрудняет изменение версии.
Если вы запустите truffle version
, он выведет как версию трюфеля, так и версию компилятора.
$ truffle version
Truffle v3.4.9 (core: 3.4.8)
Solidity v0.4.15 (solc-js)
При обновлении truffle вы получите самую последнюю версию, которую он поддерживает. Он имеет тенденцию несколько отставать от самого solc, поскольку для реализации последней версии требуется время, хотя в последнее время они были быстрее.
$ truffle version
. Это:Truffle v2.1.2
Начиная с truffle v5.2.0, вы можете разрешить компиляцию Truffle на основе выражений прагмы каждого файла Solidity. Единственное, что нужно сделать, это написать следующее в файле truffle-config.js :
module.exports = {
compilers: {
solc: {
version: “pragma”
}
},
// … the rest of your config goes here
};
Затем Truffle проверит каждый файл Solidity в проекте на наличие выражения прагмы и скомпилирует его на основе выражения, упомянутого в каждом из них.
Источник: https://www.trufflesuite.com/blog/take-a-dive-into-truffle-5#pragma-compilation
Для этого вам придется обновить свой трюфель. Я ответил, как обновить ваш трюфель здесь .
Все ответы спорны выше.
Добавьте вторую строку в файл truffle-config.
Где написано версия: "XXX"
Добавьте запятую, затем скопируйте и вставьте без запятой на следующую строку. Теперь ваша конфигурация должна выглядеть так:
версия: "ХХХ",
версия: "ГГГ"
Не ставьте запятую перед вторым. Сохраните изменения.
Теперь попробуйте скомпилировать. Он будет использовать ОБЕ версии. Аккуратный трюк, да? :D
*** Это работает только в трюфеле 5 и выше, но вы можете указать более низкие версии, например 4.
в версии 2022.6 truffle 5.x+ можно указать версию компилятора. например
По умолчанию версия solc 0.4.x, можно сделать 0.8.x
$ cat truffle-config.js
module.exports = {
networks: {
development: {
host: "127.0.0.1",
port: 8545,
network_id: "*"
},
},
// here you can speicify the compiler version
// by default , solc version is 0.4.x
compilers: {
solc: {
version: "^0.8.0",
}
}
};
и при первом запуске truffle migrate
вы можете увидеть, что truffle загрузил компилятор 0.8.x, например
$ truffle migrate --network development --verbose-rpc --interactive
Compiling your contracts...
===========================
✓ Fetching solc version list from solc-bin. Attempt #1
✓ Downloading compiler. Attempt #1.
✓ Fetching solc version list from solc-bin. Attempt #1
> Compiling ./contracts/MyTestNft.sol
> Artifacts written to /mnt/d/workspace/test_erc_721/build/contracts
> Compiled successfully using:
- solc: 0.8.15+commit.e14f2714.Emscripten.clang
см.: https://trufflesuite.com/docs/truffle/reference/configuration/
пример компиляции из официального документа:
module.exports = {
compilers: {
solc: {
version: <string>, // A version or constraint - Ex. "^0.5.0"
// Can be set to "native" to use a native solc or
// "pragma" which attempts to autodetect compiler versions
docker: <boolean>, // Use a version obtained through docker
parser: "solcjs", // Leverages solc-js purely for speedy parsing
settings: {
optimizer: {
enabled: <boolean>,
runs: <number> // Optimize for how many times you intend to run the code
},
evmVersion: <string> // Default: "istanbul"
},
modelCheckerSettings: {
// contains options for SMTChecker
}
}
}
}
Бадр Беллай
ДжонАллен
фон Горен
ДжонАллен
рстормсф
ДжонАллен