【Solidity】pragma(バージョン指定)の書き方は?

コード冒頭に記述するpragma(バージョン指定)の書き方について解説します。

pragmaを記述する意味は?

pragmaを記述することにより、コンパイラのバージョンを指定できます。

コンパイラとは?

コンパイラとは、“我々の書いたコードを機械が理解可能な形に変換するプログラムのこと”です。

コードは英語で構成されているため我々には理解し易いですが、コンピューターがそれを実行するためには、いちど機械語に直してあげる必要があります。

なぜコンパイラのバージョン指定が必要?

コンパイラは日々改良されており、定期的に新しいバージョンが登場します。

ずっと昔に書いたコードの場合、最新のコンパイラでは上手く処理されない恐れがあります。

古いアプリが最新OSだと上手く動かないことによく似ています。

そこで、「このソースコードはこのバージョンのコンパイラで処理して下さいね」という風にコンパイラのバージョンを指定することで、お互いのバージョンのミスマッチを防ぐようにします。

pragmaの書き方は?

pragmaの書き方ですが、2つあります。

キャレット(一括指定)

pragma solidity ^0.x.x;

バージョンの頭にキャレット(^)を付けた場合、“そのバージョンからそのマイナーバージョン(真ん中の数字)いっぱいまで”という意味になります。

pragma solidity ^0.8.17;

上記の場合、そのバージョン(0.8.17)からそのマイナーバージョン(0.8.x)のいっぱいまで(0.9.0)ということで、対応するコンパイラのバージョンは“0.8.17以上0.9.0未満”ということになります。

不等号(範囲指定)

pragma solidity >=0.x.x <0.x.x;

バージョンの頭に不等号を付けた場合、“その不等号に該当するバージョンの範囲まで”という意味になります。

pragma solidity >=0.7.0 <0.9.0;

上記の場合、>=0.7.0(0.7.0以上)かつ<0.9.0(0.9.0未満)ということで、対応するコンパイラのバージョンは“0.7.0以上0.9.0未満”ということになります。

キャレットでバージョンを一括指定してもいいですし、不等号で細かく範囲指定してもどちらでも構いません。その時の状況に応じて上手く使い分けましょう。取り敢えず、コード冒頭のpragmaといえばコンパイラのバージョン指定、ということだけ押さえておきましょう。

タイトルとURLをコピーしました