
イーサリアムでスマートコントラクトを記述できるプログラミング言語Solidityを教えて!
こういった悩みにお答えします.
本記事の信頼性
- リアルタイムシステムの研究歴12年.
- 東大教員の時に,英語でOSの授業.
- 2012年9月~2013年8月にアメリカのノースカロライナ大学チャペルヒル校コンピュータサイエンス学部(2021年の世界大学学術ランキングで20位)で客員研究員として勤務.C言語でリアルタイムLinuxの研究開発.
- プログラミング歴15年以上,習得している言語: C/C++,Solidity/Vyper,Java,Python,Ruby,HTML/CSS/JS/PHP,MATLAB,Assembler (x64,ARM).
- 東大教員の時に,C++言語で開発した「LLVMコンパイラの拡張」,C言語で開発した独自のリアルタイムOS「Mcube Kernel」をGitHubにオープンソースとして公開.
こういった私から学べます.
目次
プログラミング言語Solidity(ソリディティ)
Solidity(ソリディティ)とは,スマートコントラクトを明示的に記述するために開発されたオブジェクト指向のプログラミング言語です.
Solidityは,イーサリアムを含む様々なブロックチェーン基盤の実装に利用されています.
Solidityが影響を受けたプログラミング言語として,C++,Python,JavaScript,Eiffelがあります.
なので,オブジェクト指向の概念や上記のプログラミング言語を習得しているとSolidityの習得が容易となります.
Solidityの開発者は,ギャビン・ウッドです.
Solidity言語はC++で実装されていて,GitHubにオープンソースで公開されています.
Solidityのコードをダウンロードしたいあなたは,以下のコマンドを実行して下さい.
1 |
$ git clone https://github.com/ethereum/solidity |
Solidityのライセンスは,GPL Version 3になります.
Solidityの機能
Solidityの機能を紹介します.
Solidityの機能の詳細を学びたいあなたは,公式ドキュメントを読みましょう!(日本語は少し古いです.)
データ型
Solidityのデータ型は以下になります.
- bool:ブーリアン型
- int:符号あり整数型
- uint:符号なし整数型
- fixed:符号あり固定小数点型
- ufixed:符号なし固定小数点型
- address:アドレス型
- bytes1,bytes2,...,bytes32:1~32バイトの固定バイト配列
- bytes,string:可変サイズのバイト配列
- enum:列挙型
- []:配列型
- struct:構造体型
- mapping:マッピング型
演算子
Solidityの演算子を紹介します.
bool型で利用する演算子は以下になります.
- !:論理否定
- &&:論理積("and")
- ||:論理和("or")
- ==:等しい
- !=:等しくない
整数型で利用する演算子は以下になります.
- 比較:<=,<,==,!=,>=,>(boolで評価)
- ビット演算子:&,|,^(ビット排他論理和),~(ビット否定)
- シフト演算子:<<(左シフト),>>(右シフト)
- 算術演算子:+,-,unary -, *,/,%(剰余),**(累乗)
固定小数点型で利用する演算子は以下になります.
- 比較:<=,<,==,!=,>=,>(boolで評価)
- 算術演算子:+,-,unary -, ,/,%(剰余)
アドレス型で利用する演算子は以下になります.
- 比較:<=,<,==,!=,>=,>(boolで評価)
Solidityのバージョン選択
Solidityは,セマンティックバージョニングと呼ばれるドット(.)で区切られた3つの数字(メジャー.マイナー.パッチ)でバージョン管理します.
例えば,0.8.10はメジャーバージョン0,マイナーバージョン8,パッチバージョン10になります.
また,3つの数字の意味と値が増加する場合は以下になります.
- メジャー:メジャーリリースと後方互換性のない変更がある場合に増加
- マイナー:メジャーリリース間で後方互換性のある機能が追加される場合に増加
- パッチ:後方互換性があるバグ修正がある場合に増加
(厳密には異なりますが,)セマンティクスバージョニングでバージョン管理しているソフトウェアの例としてLinuxカーネルが挙げられます.
Linuxカーネルを知りたいあなたはこちらからどうぞ.
-
-
元東大教員から学ぶLinuxカーネル
こういった私から学べます. Linuxカーネルとは,C言語で開発されたオープンソースのOSです. Linuxカーネルは主に以下のコンピュータで広く利用されています. スーパーコンピュータ サーバ An ...
続きを見る
Solidityはまだまだ発展途上ですので,仕様は高い頻度で変更される可能性が高く,バージョン毎の互換性は低いです.
そこで,Solidityは,バージョンプラグマと呼ばれるコンパイラ命令を利用して,指定したバージョンで動作することを想定するコードを書きます.
もし指定したバージョンでない場合,コンパイルエラーになります.
例えば,以下のコードでは,バージョン0.8.10以上のマイナーリビジョンでのコンパイルを許可することを示します.
つまり,0.8.11はコンパイルを許可しますが,0.9.0以上はコンパイルを許可しません.
1 |
pragma solidity ^0.8.10; |
また,以下のコードでは,バージョン0.4.0以上かつ0.7.0未満のバージョンでコンパイルを許可します.
1 |
pragma solidity >= 0.4.0 < 0.7.0; |
Solidityのプラグマは,C言語のプリプロセッサ(マクロ)と似ていますので,学びたいあなたはこちらからどうぞ.
-
-
【C言語】プリプロセッサ(マクロ)とは
こういった悩みにお答えします. こういった私から学べます. 目次1 C言語のプリプロセッサ(マクロ)とは2 #include:ファイルの取り込み3 #define:マクロ置換3.1 記号定数マクロ3. ...
続きを見る
Solidityの開発環境の構築
Solidityの開発環境は,主に以下がありますので,それぞれ解説していきます.
Remix IDE
Remix IDEはWebサービスなので,すぐに利用できます.
Remix IDEの利用方法は,以下の記事のブロックアカデミーのSolidity 基礎編が参考になります.
-
-
【イーサリアム】無料でプログラミング言語Solidityを学べるおすすめWebサイト7選【入門レベル】
こういった悩みにお答えします. こういった私から学べます. 本記事は,以下の記事を読んでいることを前提とします. 無料でイーサリアムのプログラミング言語Solidityが学べるWebサイト7選を紹介し ...
続きを見る
Truffle Suite
Truffle Suiteを利用した開発環境の構築は,以下の記事が参考になります.
-
-
【イーサリアム】Truffle Suiteを利用したスマートコントラクトの開発環境の構築
こういった悩みにお答えします. こういった私から学べます. 目次1 イーサリアムでTruffle Suite(トリュフスイート)を利用したスマートコントラクトの開発環境の構築2 イーサリアムクライアン ...
続きを見る
まとめ
イーサリアムでスマートコントラクトを記述できるプログラミング言語Solidityを紹介しました.
ブロックチェーンエンジニアになりたいあなたは,是非Solidityを習得しましょう!
Solidityを学べるWebサイトを知りたいあなたはこちらからどうぞ.
-
-
【イーサリアム】無料でプログラミング言語Solidityを学べるおすすめWebサイト7選【入門レベル】
こういった悩みにお答えします. こういった私から学べます. 本記事は,以下の記事を読んでいることを前提とします. 無料でイーサリアムのプログラミング言語Solidityが学べるWebサイト7選を紹介し ...
続きを見る
ブロックチェーンエンジニアになりたいあなたは国内・海外の求人サイトをチェックしましょう!
-
-
国内・海外のブロックチェーンエンジニアのおすすめ求人サイト【転職エージェント】【C++/Go/Rust言語,Solidity/Vyper言語】
こういった悩みにお答えします. こういった私が解説していきます. 国内・海外のブロックチェーンエンジニアのおすすめ求人サイト(転職エージェント)を紹介します. 具体的には,イーサリアムのスマートコント ...
続きを見る