Solidity
源文件需要不同的編譯器版本
我正在使用solidity版本“ pragma solidity ^0.4.20; ”。當我檢查契約的 JSON 文件時,編譯器版本顯示:
"compiler": { "name": "solc", "version": "0.4.21+commit.dfe3193c.Emscripten.clang" }
我仍然收到錯誤:
源文件需要不同的編譯器版本(目前編譯器是 0.5.0+commit.1d4f565a.Emscripten.clang - 請注意,夜間建構被認為嚴格低於發布版本
命令“松露版”給出:
Truffle v4.1.5 (core: 4.1.5) Solidity v0.4.21 (solc-js)
在solidity (solc) 0.5 發布期間,不同的框架,如solc、truffle、web3、openzeppelin 有一個時間表,其中一些發布了0.5 兼容版本,而另一些則沒有。我認為您可以像這裡一樣更改指定的 solc 版本(沒有嘗試過),但同時所有提到的都完全支持 0.5(自撰寫本文時 2 天前開始的 openzeppelin)。
考慮執行以下操作
npm outdated npm install [my-outdated-package] #repeat for all outdated packages rm -R -f build #cleanup step (might not be necessary) rm -R -f node_modules #cleanup step (might not be necessary) npm install truffle compile #(will still fail)
如果它與此處
truffle version
的目前版本匹配,請在其他地方(不是項目目錄)的終端視窗中檢查,否則請執行以下操作:npm uninstall -g truffle npm install truffle
通常你應該避免安裝全域包,但是例如 BlockCatIO/solidity-flattener 要求 solc 是全域安裝的,因為某些特性(這裡描述的安裝)。記得升級那個。
然後,當您執行 truffle-compile 時,您仍然應該看到錯誤,因為它們更改了 pragma 的語法(在此處找到)。
所以改變:
#old pragma solidity ^0.4.20; #new pragma solidity >=0.4.20;
我還建議升級 ganache-cli(我在使用舊版本執行測試時遇到問題):
npm install -g ganache-cli
然後您可能仍然會看到編譯錯誤,但這就是 v0.5 的出色之處,因為它們進行了一些改進,您應該逐一排除故障
這樣做我讓它再次編譯:)