イーサリアムでスマートコントラクトを記述できるプログラミング言語Solidityを教えて!
こういった悩みにお答えします.
本記事の信頼性
- リアルタイムシステムの研究歴12年.
- 東大教員の時に,英語でOS(Linuxカーネル)の授業.
- 2012年9月~2013年8月にアメリカのノースカロライナ大学チャペルヒル校(UNC)コンピュータサイエンス学部で客員研究員として勤務.C言語でリアルタイムLinuxの研究開発.
- プログラミング歴15年以上,習得している言語: C/C++,Python,Solidity/Vyper,Java,Ruby,Go,Rust,D,HTML/CSS/JS/PHP,MATLAB,Verse(UEFN), Assembler (x64,ARM).
- 東大教員の時に,C++言語で開発した「LLVMコンパイラの拡張」,C言語で開発した独自のリアルタイムOS「Mcube Kernel」をGitHubにオープンソースとして公開.
- 2020年1月~現在はアメリカのノースカロライナ州チャペルヒルにあるGuarantee Happiness LLCのCTOとしてECサイト開発やWeb/SNSマーケティングの業務.2022年6月~現在はアメリカのノースカロライナ州チャペルヒルにあるJapanese Tar Heel, Inc.のCEO兼CTO.
- 最近は自然言語処理AIとイーサリアムに関する有益な情報発信に従事.
- (AI全般を含む)自然言語処理AIの論文の日本語訳や,AIチャットボット(ChatGPT,Auto-GPT,Gemini(旧Bard)など)の記事を50本以上執筆.アメリカのサンフランシスコ(広義のシリコンバレー)の会社でプロンプトエンジニア・マネージャー・Quality Assurance(QA)の業務委託の経験あり.
- (スマートコントラクトのプログラミングを含む)イーサリアムや仮想通貨全般の記事を200本以上執筆.イギリスのロンドンの会社で仮想通貨の英語の記事を日本語に翻訳する業務委託の経験あり.
こういった私から学べます.
国内・海外のブロックチェーンエンジニアのおすすめ求人サイトを知りたいあなたはこちらからどうぞ.
目次
プログラミング言語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の機能の詳細を学びたいあなたは,公式ドキュメントを読みましょう!(日本語は少し古いです.)
データ型
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カーネルを知りたいあなたはこちらからどうぞ.
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言語のプリプロセッサ(マクロ)と似ていますので,学びたいあなたはこちらからどうぞ.
Solidityの開発環境の構築
Solidityの開発環境は,主に以下がありますので,それぞれ解説していきます.
- オンラインで利用したい場合:Remix IDE
- 自分のPCで環境構築したい場合:Truffle Suite
Remix IDE
Remix IDEはWebサービスなので,すぐに利用できます.
Remix IDEの利用方法は,以下の記事のブロックアカデミーのSolidity 基礎編が参考になります.
Truffle Suite
Truffle Suiteを利用した開発環境の構築は,以下の記事が参考になります.
まとめ
イーサリアムでスマートコントラクトを記述できるプログラミング言語Solidityを紹介しました.
ブロックチェーンエンジニアになりたいあなたは,是非Solidityを習得しましょう!
Solidityを学べるWebサイトを知りたいあなたはこちらからどうぞ.
国内・海外のブロックチェーンエンジニアのおすすめ求人サイトを知りたいあなたはこちらからどうぞ.