⛓️

スマートコントラクトとアカウント(EOA / CA)について

2022/05/21に公開

私は現在ブロックチェーン技術について勉強をしており、その中で気になったことを、記事として整理していければと思います。
※ 投機目的ではなく、あくまで純粋に技術を勉強しています。

今回は、ブロックチェーンのスマートコントラクトについて整理していきます。

スマートコントラクトの概要

スマートコントラクト自体は、ブロックチェーンの誕生よりも前に提唱されていたコンピュータプロトコルとなるのですが、ここではブロックチェーン上で利用する前提で整理をしていきます。

ブロックチェーンでのスマートコントラクトとは、ブロックチェーン上で契約を自動的に実行する仕組みのことです。
事前定義から決済に至るまで、一連の契約のスムーズな検証、執行、実行、交渉を狙いとしています。

身近なスマートコントラクトの例でいうと、ブロックチェーンを利用したものではないですが、自動販売機が挙げられます。
(例)「お金を投入→購入可能なドリンクのボタンが光る→ボタンを押下→対象のドリンクを1つ渡す」

ブロックチェーンの中での歴史を見ると、
ブロックチェーンはビットコインの中核技術として誕生したのですが、スマートコントラクトに関しては、まだ汎用的に使えるものではない状態でした。
その後、ビットコインのブロックチェーンを拡張することで、汎用性の高いスマートコントラクトを備えたものが、イーサリアムとして誕生しました。
通貨のやり取りに限らず、トークン発行やアプリ開発、ゲームアプリのように幅広く活用できるものとなっています。

ここからはイーサリアムを例にして、スマートコントラクトについて整理していきます。

イーサリアムのアカウント

スマートコントラクトを理解する上で、イーサリアムのアカウントについてもお話します。

イーサリアムには2種類のアカウントが存在します。

  1. EOA(Externally Owned Account: 外部所有アカウント)
  2. コントラクトアカウント(CA)

1. EOA(外部所有アカウント)

EOAは、人が所有するアカウントで、ブロックチェーンの外にあるため、外部所有アカウントと呼ばれています。
私達は普段、ウォレットを使って他者へEtherを送金していますが、このウォレットに紐づくアカウントがEOAです。

私がアカウントを理解する上で混乱したポイントですが、、
アカウントとウォレットはイコールではありません。アカウントを理解する上で、3つのキーワードを整理しておきます。

  1. アカウント
    1. イーサリアムアカウントはトランザクションを送り、残高があるエンティティです。
  2. アドレス
    1. 受信トレイにメールアドレスがあるように、イーサリアムアカウントにはイーサリアムアドレスがあります。このアドレスを使用してアカウントに資金を送金します。
    2. アドレスは「0x」で始まるものとなります
  3. ウォレット
    1. アカウント残高の確認、トランザクションの送信等、イーサリアムアカウントを管理できる製品です。MetaMaskなどのことです。

アカウントはウォレットの実態のような認識だとイメージしやすいかもしれません。

2. コントラクトアカウント

EOAと違い、対応する秘密鍵を有しておらず、スマートコントラクトによって制御されています。コントラクトアカウントを用いることで、ブロックチェーンにデプロイされたコントラクトを、EOAや他のコントラクトアカウントから呼び出して、実行することができます。

ただし、秘密鍵が存在しないため、トランザクションを開始することができません。そのため、コントラクトアカウントを起点とするEtherの送金はできません。EOAを起点に、コントラクトアカウントを経由して別のEOAへEtherを送金することは可能です。

スマートコントラクトでは、このコントラクトアカウントが肝になっています。

コントラクトは、オブジェクト指向言語でいうところの、「クラス」に似たものと考えるとイメージが付きやすいかもしれません。それぞれのコントラクトは、各自にクラス変数に相当するような、内部状態を保持するストレージ部分と、メソッドに相当するような、実行コードである「コントラクト・コード」を持っています。

コントラクト・コードに任意の動作をプログラムすることで、独自通貨の発行や投票システムなどの様々なアプリケーションが実現できます。コントラクト・コードの実行は採掘者(マイナー)によって行われ、実行結果はブロックチェーンに書き込まれていき、特定の中央機関なくアプリケーションが動作していきます。

参考情報

Discussion