Solidityバージョンの不整合を解決する方法
Truffle のバージョン対応
実装している Solidity のバージョンと Truffle コマンドに紐づいているコンパイラ Solc (solc.js) のバージョンが一致していないと,Truffle でコンパイルしたとき Compilation failed
が発生します.
コントラクト上では下記のようにバージョンが指定されていますが,この場合はキャレットのため ^0.5.0 := 0.5.0 <= version < 0.6.0
を満たすバージョンが指定されていればエラーは出ません.
pragma solidity ^0.5.0
特定バージョンのインストール
terminal
$ npm i -g truffle@5.1.4
$ truffle version
Truffle v5.1.4 (core: 5.1.4)
Solidity v0.5.12 (solc-js)
Solidity のバージョンをコントラクトのバージョンと合わせる必要があります.
コンパイラのバージョンは直接ファイルを参照し,dependencies > solc
を確認すればある程度掴めます,
(追記 2021.10.30)
truffle version
で出力される Solidity のバージョンは truffle-config.js (truffle.js) に依存するようです.
例えば,solc: ^0.5.12
と設定した場合のバージョン表示は以下のように少し変わります.
$ truffle version
Truffle v5.1.4 (core: 5.1.4)
Solidity - ^0.5.12 (solc-js)
インストール時は(新しめのバージョンであれば)特にバージョンを指定する必要がなく,Solidity ファイルの宣言と truffle-config.js (truffle.js) ファイルのバージョンが一致していれば問題なさそうです.
v5.0.35 以降
trufflesuite / truffle / packages / compile-solidity / package.json
v5.0.34 以前
trufflesuite / truffle / packages / truffle-compile / package.json
VS Code のバージョン対応
VS Code で Solidity を編集しているときに下記のようなエラーが表示されることがあります.
Source file requires different compiler version (current compiler is 0.4.24+commit.e67f0147.Emscripten.clang - note that nightly builds are considered to be strictly less than the released version)
これはコントラクトコードで指定している Solidity のバージョンと VS Code のワークスペースに設定されている Solidity のバージョンに整合がない場合に表示されます.
VS Code ワークスペースのバージョンは以下の手順で変更できます.
- command⌘ + shift + P でコマンドパレットを開く
- Solidity: Change workspace compiler version (Remote) を選択する
- 上記の条件を満たすバージョンを指定する