スマートコントラクトとアカウント(EOA / CA)について
私は現在ブロックチェーン技術について勉強をしており、その中で気になったことを、記事として整理していければと思います。
※ 投機目的ではなく、あくまで純粋に技術を勉強しています。
今回は、ブロックチェーンのスマートコントラクトについて整理していきます。
スマートコントラクトの概要
スマートコントラクト自体は、ブロックチェーンの誕生よりも前に提唱されていたコンピュータプロトコルとなるのですが、ここではブロックチェーン上で利用する前提で整理をしていきます。
ブロックチェーンでのスマートコントラクトとは、ブロックチェーン上で契約を自動的に実行する仕組みのことです。
事前定義から決済に至るまで、一連の契約のスムーズな検証、執行、実行、交渉を狙いとしています。
身近なスマートコントラクトの例でいうと、ブロックチェーンを利用したものではないですが、自動販売機が挙げられます。
(例)「お金を投入→購入可能なドリンクのボタンが光る→ボタンを押下→対象のドリンクを1つ渡す」
ブロックチェーンの中での歴史を見ると、
ブロックチェーンはビットコインの中核技術として誕生したのですが、スマートコントラクトに関しては、まだ汎用的に使えるものではない状態でした。
その後、ビットコインのブロックチェーンを拡張することで、汎用性の高いスマートコントラクトを備えたものが、イーサリアムとして誕生しました。
通貨のやり取りに限らず、トークン発行やアプリ開発、ゲームアプリのように幅広く活用できるものとなっています。
ここからはイーサリアムを例にして、スマートコントラクトについて整理していきます。
イーサリアムのアカウント
スマートコントラクトを理解する上で、イーサリアムのアカウントについてもお話します。
イーサリアムには2種類のアカウントが存在します。
- EOA(Externally Owned Account: 外部所有アカウント)
- コントラクトアカウント(CA)
1. EOA(外部所有アカウント)
EOAは、人が所有するアカウントで、ブロックチェーンの外にあるため、外部所有アカウントと呼ばれています。
私達は普段、ウォレットを使って他者へEtherを送金していますが、このウォレットに紐づくアカウントがEOAです。
私がアカウントを理解する上で混乱したポイントですが、、
アカウントとウォレットはイコールではありません。アカウントを理解する上で、3つのキーワードを整理しておきます。
- アカウント
- イーサリアムアカウントはトランザクションを送り、残高があるエンティティです。
- アドレス
- 受信トレイにメールアドレスがあるように、イーサリアムアカウントにはイーサリアムアドレスがあります。このアドレスを使用してアカウントに資金を送金します。
- アドレスは「0x」で始まるものとなります
- ウォレット
- アカウント残高の確認、トランザクションの送信等、イーサリアムアカウントを管理できる製品です。MetaMaskなどのことです。
アカウントはウォレットの実態のような認識だとイメージしやすいかもしれません。
2. コントラクトアカウント
EOAと違い、対応する秘密鍵を有しておらず、スマートコントラクトによって制御されています。コントラクトアカウントを用いることで、ブロックチェーンにデプロイされたコントラクトを、EOAや他のコントラクトアカウントから呼び出して、実行することができます。
ただし、秘密鍵が存在しないため、トランザクションを開始することができません。そのため、コントラクトアカウントを起点とするEtherの送金はできません。EOAを起点に、コントラクトアカウントを経由して別のEOAへEtherを送金することは可能です。
スマートコントラクトでは、このコントラクトアカウントが肝になっています。
コントラクトは、オブジェクト指向言語でいうところの、「クラス」に似たものと考えるとイメージが付きやすいかもしれません。それぞれのコントラクトは、各自にクラス変数に相当するような、内部状態を保持するストレージ部分と、メソッドに相当するような、実行コードである「コントラクト・コード」を持っています。
コントラクト・コードに任意の動作をプログラムすることで、独自通貨の発行や投票システムなどの様々なアプリケーションが実現できます。コントラクト・コードの実行は採掘者(マイナー)によって行われ、実行結果はブロックチェーンに書き込まれていき、特定の中央機関なくアプリケーションが動作していきます。
参考情報
Discussion