スマートコントラクトとは何か?

どうも、ブロックチェーンエンジニアになりたいともろうです。
今回はイーサリアムにおけるスマートコントラクトについて書いていきたいと思います。
「スマートコントラクト」という言葉自体は前々から知っていたものの、その仕組みをはっきりと説明できる自信がなかったので、今回改めてまとめてみようという次第です。

スマートコントラクトをざっくり理解する

「スマートコントラクト」を直訳すると「賢い契約」となりますが、「賢い契約」ってじゃあつまり何?って感じです。なのでスマートコントラクトを日訳する際にはよく、「自動執行契約」なんて言葉が使われたりします。プログラムに基づいて自動で実行される契約という意味です。

身近な例をあげると、普段使っている自動販売機なんかもスマートコントラクトといえます。自動販売機にお金を入れてボタンを押せば、特に何か契約を交わさなくても自動で飲み物が出てきますよね。これも「自動執行契約」のひとつなんです。

ここで注意したいのが、「スマートコントラクト」と「ブロックチェーン」自体は、別々の概念ということです。スマートコントラクトという人を介さない契約の安全性を、ブロックチェーンと組み合わせることで担保しているといえます。

自動販売機って、ボタン押してもたまに違う飲み物が出てきたり、おつり返ってこなかったりしますよね。こういう不完全性をブロックチェーンのシステムが排除してくれるみたいなイメージです。

イーサリアムの特徴的な概念

ブロックチェーン技術をベースにすることで、中央管理者のいないスマートコントラクトを安全に執行することを可能にしたのが、イーサリアムの画期的なところです。

ここからは、イーサリアムネットワーク上でどのようにしてスマートコントラクトが行われるのかまとめていきたいと思います。

まず、イーサリアムにおけるスマートコントラクトを理解するのに必要な概念である、「アカウント」と「EVM」について紹介します。

外部所有アカウントとコントラクトアカウント

イーサリアムのアカウントには、外部所有アカウントコントラクトアカウントという2つのアカウントがあります。それぞれのアカウントは、以下のような役割を持っています。

外部所有アカウント
・ビットコインのアカウントのように、コイン(Ether)を送信するためのアカウント。秘密鍵を使って署名することで、自らトランザクション(取引)を作り、他の外部所有アカウントやコントラクトアカウントにメッセージを送ることができます。

コントラクトアカウント
・スマートコントラクトで実行されるコードを持っているアカウント。外部所有アカウントからの働きかけがない限り、自らコードを実行することはありません。このコード(コントラクトコード)はいわゆるsolidityというJavaScriptに似たプログラミング言語で記述されています。

EVM(Ethereum Virtual Machine)

EVMとは、スマートコントラクトを実行するイーサリアム独自の仮想マシンです。
うーん、、ちょっとよくわからないので、もう少し調べます。

スマートコントラクトで実行されるコントラクトコードは、solidityという可読性の高い言語で記述されると先ほど書きました。しかし実際のトランザクションの処理は、EVMバイトコードという可読性の低い機械言語で行われています。

EVMはsolidityをEVMバイトコードに翻訳するための翻訳機のようなものです。EVMを使うことで記述を簡単にして、開発の生産性を高めているんですね。

イーサリアムにおけるスマートコントラクトとは

ここまでイーサリアムの特徴的な概念をみてきました。ここから、イーサリアムにおけるスマートコントラクトの仕組みをまとめていきたいと思います。

上述したようにイーサリアムには、外部所有アカウントとコントラクトアカウントの2つのアカウントがあります。

外部所有アカウントは自らトランザクション(取引)を作り、他の外部所有アカウントやコントラクトアカウントにメッセージを送ることができます。外部所有アカウントから他の外部所有アカウントへのメッセージは、ビットコインで言うところの送金みたいなものです。

そして、外部所有アカウントからコントラクトアカウントへのメッセージの送信では、コントラクトアカウントがもっているコードを実行することができます。これがつまりイーサリアムにおけるスマートコントラクトということになります。


今回はイーサリアムのスマートコントラクトについて調べたことをまとめてみました。
今後もっと勉強していきながら、この記事の内容もアップデートしていきたいと思います!