株式会社NiMiLのロゴ

Source file requires different compiler version (Ethereum入門)

公開 2021/3/14:更新 2021/3/14
アイキャッチ画像

こんにちは。

ブロックチェーンの勉強をしています。Gethを使ってコントラクトをデプロイするときにエラーが出て、勉強になったのでまとめます。

今回は、

こちらのページを参考にイーサリアムに触れてみてます。

エラーの内容

先程の記事を参考にして、

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でのバージョンアップによる破壊的変更が結構あるということを知れた。

次は実際にコンパイルしたときに起きたシンタックスのエラーについての記事を書く予定です。

CATEGORIES

分類は、世界の見方

TAGS

記憶の糸をたぐりましょう
twitter icon
instagram icon
友だち追加
twitter iconinstagram icon友だち追加