2013年後半にビットコインコミュニティーの若きプログラマーVitalik Buterin氏から生み出されたEthereum(イーサリアム)は、誰もが簡単かつ自由にスマートコントラクトを記述・実行ができ、そしてその実行結果を記録できるブロックチェーンとして一躍有名になりました。
分散アプリケーションプラットフォームを目指すブロックチェーンEthereum(イーサリアム)
そのEthereumのスマートコントラクトを記述するときに主に使用されている言語は「Solidity」です。今回はこのSolidityについて紹介します。
EthereumとSolidity
Ethereumの自由度の高さは、Ethereumネットワーク上のEVM(Ethereum Virtual Machine:Ethereum仮想マシン)と呼ばれる実行環境によって担保されています。スマートコントラクトはこのEVM上で動作します。ネットワーク上では他のEVMとつながりつつも、実行環境としては独立した環境でEVMが実行されるため、あるコードが他のEVMやブロックチェーンに深刻な影響を与えることなくセキュアに実行されます。
このEVMの上では専用の数値の羅列で書かれたバイトコード(機械語)によるプログラムが実行されます。このようなバイトコードのプログラムは、人間にとっては可読性や生産性が悪いものです。そこでEthereumでは、可読性と生産性が高いコントラクトを記述することに特化した高水準言語と、それをEVMのバイトコードに変換するためのコンパイラがいくつか開発されています。その代表的な言語が「Solidity」です。このスマートコントラクトを記述するためのプログラミング言語Solidityはチューリング完全で、あらゆるプログラムを記述できます。
これらの特徴から、Solidityはコントラクトを記述することに特化した高水準言語である「コントラクト指向言語」と表現されます。またSolidity開発のための統合開発環境も数種類あり、Mix、Remix(Browser-solidity)、Visual Studio Codeなどが挙げられます。
Solidityのコード例
Solidityを使用するためには、コンパイラである「solc」をインストールする必要があります。solcでコンパイルされたバイトコードがEVMで実行されます。
下記は、単純なスマートコントラクトの一例である「Hello World」をSolidityで記述したものです。
contract HelloWorld { function get() constant returns (string retVal) { return "Hello World!!"; } }
HelloWorldの例ではget()関数が定義され、その中では文字列Hello Worldを返す処理が定義されています。上記のコードにおけるコントラクトは、get()関数が呼び出されたら固定の”Hello World!!”という固定の文字列を返すというものです。このようにSolidityにおいてcontract句で宣言されるContractが基本の構成要素であり、スマートコントラクトは、このcontract句に処理を記述していくことで実装されます。
一般に、Solidityでは次の構文でContractを定義します。
contract Contract名 { //スマート・コントラクトで行う処理をここに記述 }
ContractはJavaやPythonなどオブジェクト指向言語でのクラスに相当するものであり、クラス変数に相当するような内部状態を保持するストレージ部分やメソッドに相当するような関数、その中で有効なローカル変数などを持ちます。
Solidityの活用事例
Ethereum上で動作するアプリケーションのことをDapp(Decentralized Application) と呼びます。そしてこのDappの多くがSolidityで使って書かれています。もちろん過去に紹介したSwam Cityや、Slock.itもSolidityを使用しています。
また、Solidityを使ったスマートコントラクトの開発に特化したフレームワークとしてOpenZeppelinというものがあります。OpenZeppelinは、安全性の確認された再利用可能なスマートコントラクトのオープンソースライブラリです。こういったスマートコントラクトのライブラリを使用することで、セキュアで安全でしかも短期間でのスマートコントラクトの開発を可能にすることを目標としています。
簡単にスマートコントラクトが記述できる最もポピュラーなブロックチェーンであるEthereumの存在が、ZeppelinがSolidity用のツールを開発したきっかけになっています。他にもブラウザ上で開発し、簡単なテストが行える、Remixという簡易的な開発環境もあります。
また2017年9月には、KDDI総合研究所やクーガーがブロックチェーン技術Enterprise Ethereumを活用したスマートコントラクトの実証実験を開始しています。実証実験ではEnterprise Ethereumの実装としてJPモルガンがOSSとして公開した「Quorum」が使用されていますが、Enterprise EthereumはEthereumと同様にSolidity言語を用いることができます。
ここ数年でEthereumは、開発者主導の実験的な用途だけでなく、非公開性や安定性などが求められる企業での用途にも広がりをみせています。その流れが加速し、企業ユーザーやEthereumスタートアップの間で議論が行われ、Enterprise EthereumはEthereumを用いながらも、非公開ブロックチェーンといった企業用途に最適化しているという特徴があります。
ビジネス用途に特化した企業のためのイーサリアム 「Enterprise Ethereum」 誕生
スマートコントラクトという言葉は徐々に浸透してきており、「過去のデータの実行履歴をすべて記録・公開する技術」としてのインパクトは、契約や登記など社会経済を支えるインフラにまで及ぶ可能性を秘めています。そのスマートコントラクトの裏でSolidityという言語が動いているということを理解しておくと良いかもしれません。