Solidity

源文件需要不同的編譯器版本

  • April 4, 2022

我正在使用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 的出色之處,因為它們進行了一些改進,您應該逐一排除故障

這裡是Solidity 0.5.0 的重大變化

這樣做我讓它再次編譯:)

引用自:https://ethereum.stackexchange.com/questions/63530