Ethereumを動かす ~Part8~

今回は、前回紹介したスマートコントラクトを実際に書いてみたいと思います。
Solidity
スマートコントラクトを書くプログラミング言語は幾つか存在するのですが、その中で最も使われており開発も活発なのはSolidityという言語です。
今回はこのSolidityを使おうと思います。
ただでさえ実体の掴みにくい”スマートコントラクト”を、”Solidity”というこれまたよく知らない初見の言語で実装するというと思わず身構えてしまう人もいるかもしれませんが、実際にやってみると他のプログラミングとそこまで決定的に違うということはありません。
プログラミングをやったことのある方であれば案外すんなり書けると思います。
(※Solidityは特にバージョンアップが活発なので、ここに書いてある文法は現在サポートされているものだということは念頭に置いておいてください)
“Hello World”
それでは、実際にスマートコントラクトをSolidityで書いてみましょう。
プログラミングの勉強のよくある導入に倣って、まずは”Hello World”と表示させるだけのスマートコントラクトを書いてみます。
コードは以下のようになります。
pragma solidity ^0.4.23;
contract HelloWorld {
function get() external pure returns (string) {
return "Hello World";
}
}
いかがでしょう、「どこかで見たことあるような」と思った方もいるのではないでしょうか。
一つ一つ説明していきます。
pragma solidityは用いるSolidityのバージョンを指定しています。今回はバージョン0.4.23を用います。繰り返しになりますが、これより前のバージョンだと今回説明する文法に則していない部分もあるので注意が必要です。
contract HelloWorldでは、コントラクトの名前を決めています。今回はHelloWorldという名前のコントラクトを作成しました。同じファイルに複数のコントラクトを作成することも可能です。
ここで気づいた方もおられるかもしれませんが、コントラクトの構成や考え方は、オブジェクト指向言語におけるクラスと似ている部分があります。
function get() external pure returns (string retVal)の部分でHelloWorldコントラクトの中に用意する関数を定義しています。
関数名はgetです。今回は関数に値を渡すようなプログラミングではないので引数は定めていませんが、もちろん関数に引数を持たせることもできます。
publicはその関数にアクセスできるものの権限を定めています。他にもprivate、internal、externalがあります。詳しくはこちらの”Visibility and Getters”をお読みください。今回は外から呼び出したいのでpublicにしています。
pureはトランザクションを発生させないという意味になります。トランザクション等についてはまた改めて説明いたしますが、今回はトランザクションの必要がない処理なのでpureとつけています。
returnsは返り値を定めています。今回は”Hello World”という文字列を返すのでstring型をしていしています。
関数の中ですが、returnで関数から返すものを指定しています。また、文字列は””で囲い、各センテンスの終わりにはセミコロンがつきます。これは他のプログラミングとよく似ているのでピンとくる方も多いのではないでしょうか。
Solidityで極々簡単なスマートコントラクトを書く方法は以上となります。
次回は、これを実際に動かして見たいと思います。