こんにちは。
ブロックチェーンの勉強をしています。Gethを使ってコントラクトをデプロイするときにエラーが出て、勉強になったのでまとめます。
今回は、
https://book.ethereum-jp.net/first_use/contract
こちらのページを参考にイーサリアムに触れてみてます。
エラーの内容
先程の記事を参考にして、
solc --abi --bin SingleNumRegister.sol
を実行するとこちらのエラーが出ました。
Source file requires different compiler version
実際の画像はこちら。

Error: Source file requires different compiler version (current compiler is 0.8.2+commit.661d1103.Darwin.appleclang) - note that nightly builds are considered to be strictly less than the released version
--> SingleNumRegister.sol:1:1:
|
1 | pragma solidity ^0.4.0;
| ^^^^^^^^^^^^^^^^^^^^^^^
コンパイラーのバージョンが違うそうです。
現在のバージョンは0.8.2ですのでと言われていますので、コンパイラの指定を
pragma solidity ^0.8.2;
contract SingleNumRegister {
uint storedData;
function set(uint x) public{
storedData = x;
}
function get() public constant returns (uint retVal){
return storedData;
}
}
上記のように変更するとコンパイラーのバージョンに起因するエラーはなくなりました。
※ただ、文法的要因でコンパイルエラーとなったので、別記事で紹介したいと思います。
バージョン指定の方法
こちらの記事が参考になりました。
参考サイトの「^0.4.0」だと、
「0.4.0 <= version < 0.5.0」っていう意味になります。
なぜ^0.4.0ではコンパイラーが動かないのか。
solc --version
を実行すると、
Version: 0.8.2+commit.661d1103.Darwin.appleclang
と出てきました。現在自分のPCに入っているのは0.8.2ですので、コンパイラーが動かないというわけでした。当たり前でした。
ちなみに、pragmaを>0.4.0とか、>=0.5.3とか、今持っているv0.8.2を含める形であればコンパイラは動きました。
まとめ
- バージョンの指定方法の復習になった。
- 色々調べてみる中で、solidityとかsolcでのバージョンアップによる破壊的変更が結構あるということを知れた。
次は実際にコンパイルしたときに起きたシンタックスのエラーについての記事を書く予定です。