Solidityバージョンの不整合を解決する方法

2021-10-23

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 ワークスペースのバージョンは以下の手順で変更できます.

  1. command⌘ + shift + P でコマンドパレットを開く
  2. Solidity: Change workspace compiler version (Remote) を選択する
  3. 上記の条件を満たすバージョンを指定する