分かりやすくスマートコントラクトを解説します
最近、ブロックチェーンとともに耳にするようになった「スマートコントラクト」。
インターネットによって巻き起こされた情報革命以来のエポックメイキングな発明になるとも言われています。
ではいったい、「スマート(賢い/高性能な/素早い)」「コントラクト(契約)」とは何なのでしょうか?
今回はスマートコントラクトが生まれた背景や技術的な仕組みのお話を深ぼりしながら、スマートコントラクトの全体像と革新性についてお伝えしていきます。
スマートコントラクトとは
スマートコントラクトとは、法学者・暗号学者のニック・サボ(Nick Szabo)氏が1997年に「The Idea of Smart Contracts」という論文のなかで"プログラムできる契約”という概念で提唱したことが始まりで、「契約の自動化」を意味します。
サボ氏は、その概念を自動販売機に例えて説明しています。自動販売機は、「決められた購入金額の入金」と「商品選択」という契約条件が買い手と売り手(飲料メーカー)とで合意されるとジュースが出てくるシステムです。
仲介者を介さずに自動で取引が実行される自動販売機の仕組みを、生活やビジネスの場面に転用させようという発想で生み出されたのがスマートコントラクトです。これは、人類史における農業、産業、情報革命に匹敵すると言う人もいます。
イーサリアムとスマートコントラクト
サボ氏のアイデアを基に、当時大学生であったヴィタリック・ブテリン(Vitalik Buterin)氏が2014年に初めてスマートコントラクトをブロックチェーン上で開発・提供したのがイーサリアムです。
イーサリアムは暗号資産ですが、ビットコインとは性質が大きく異なります。ビットコインは送金を目的にした経済活動に特化している一方で、イーサリアムはスマートコントラクトを搭載することで、契約履行やさまざまなアプリ開発まで汎用的に使えるように開発されました。
またブテリン氏はイーサリアムを「ワールドコンピュータ」と呼びます。それは、世界中のコンピュータ(ノード)と国境を超えてつながり合うことで国やさまざまな制限にも縛られず、24時間365日自律的に稼働し続けられる汎用性をもった「一つのコンピュータ」を目指しているからです。スマートコントラクトは、ワールドコンピュータを実装するためのコア装置の一つと言えます。
スマートコントラクトは電子契約と何が違うのか?
スマートコントラクトのもっとも大きな特徴は、仲介者を介さずに取引や手続きをデジタル上でできるということです。似ているものに「電子契約」がありますが、契約成立までの手続きや、契約書をデジタル化して合意内容を保存するといった書面の契約を単純にデジタル化するにとどまっています。
一方でスマートコントラクトは、契約成立後の「実行」や「内容確認」までを全自動で執り行います。自動販売機の例で見たように、事前にプログラムで決められた契約条件と起きた事象とを照合し、内容が合致していれば契約をブロックチェーン上で履行します。そして最後に、契約の履行が正しく行われたかのチェックまで一気通貫で行います。
ブロックチェーン上で実行することで、改ざんされることなく取引の記録が残り、契約と取引の正当性をデジタル情報として誰でも確認することができます。
例えば、IoT(Internet of Things)でインターネットとスマートコントラクトを搭載したブロックチェーンネットワークにつながっている冷蔵庫や洗濯機、テレビなどが故障した場合、故障の原因となった部品を特定し、スマートコントラクトで契約された保証内容に応じて部品メーカーに新たな部品の発注や修理依頼、修理完了のお知らせなどを自動で行うことができます。
このようにスマートコントラクトは、これまで人の手によって行われていた契約を毎回参照して承認・実行するといったプロセスが省かれた、自己締結型の契約履行システムです。そのため、業務管理コストの大幅な削減が大きく期待されています。
スマートコントラクトで拡張するDApps
ブロックチェーンやスマートコントラクトといった技術はあくまで裏側でシステムを動かすバックエンドの技術です。サービスを実際に利用するためには、ユーザーが操作できるアプリケーションサービスが不可欠です。そのため、ブロックチェーンを活用した多くの「分散型アプリケーション(Decentralized Applications:DApps)」が開発されています。
従来のアプリケーションであるEメールやウェブアプリ、SNSなどは、「TCP/IP」を基本としたインターネットの世界標準のプロトコルを通じて特定の企業がサービス提供していた「中央集権型アプリケーション(Centralized Applications:CApps)」でした。
しかし、特定の組織や企業がデータを独占して巨大な力を持つようになりました。そこで、分散的なP2Pネットワークで中央管理者なしで動くサービスとして志向されたのがDAppsです。
CAppsとDAppsは、それぞれ次のような特徴があります。
DAppsはブロックチェーンネットワークを基盤にしていますが、ユーザーが使うフロントエンド部分はこれまでと同等の仕組みのウェブサイトやウェブアプリで操作されます。そのため、表面は既存のインターネットプロトコル、裏面はブロックチェーンプロトコルといった二刀流で実行されています。
ビットコインとイーサリアムはともに、「独自のブロックチェーンを搭載しているアプリケーション」に分類されるDAppsの一種です。しかし、イーサリアムに搭載されているスマートコントラクトがより汎用的な機能提供を可能にしたことがDAppsの幅を大きく広げました。そういった意味で、スマートコントラクトがDAppsの一つの形態を成す根幹技術であるとも言えます。
スマートコントラクトの作成
スマートコントラクトを作成するには、トランザクション(取引)の中にサービスを実行するプログラムを記述してブロックチェーンのノード(マイナー/クライアント)に送信します。
トランザクションを受け取ったノードは実際にスマートコントラクトを実行・処理する「イーサリアム仮想マシン(EVM:Ethereum Virtual Machine)」にアクセスし、プログラムをブロックチェーンにデプロイ(保存)していきます。
しかし、EVMは人間には非常に理解しにくい言語を使用しています。そのため、Solidityなど人間にとって理解しやすい言葉で書かれたプログラムコードから翻訳する必要があります。この翻訳作業をコンパイルと言い、solc(ソルク)などのコンパイラを通してEVMバイトコードという専門の言語に変換します。
EVMでプログラムの読み込みができるようになってようやく、実行したいコントラクトをブロックチェーンにデプロイできるようになります。そのトランザクションが承認されると、自動実行を受け付けるための専用口座であるコントラクト専用のアドレス(CA)が生成されます。
DAppsのアーキテクチャ
DAppsの裏側はブロックチェーンで駆動していますが、ユーザーが直接扱う部分は既存のウェブブラウザのシステムのUI(ユーザーインターフェース)を踏襲しており、HTMLやCSS、JavaScript、最近ではAngularやReactといったJavaScriptのフレームワークやライブラリを使用しています。
しかし、そのままではバックエンドのイーサリアムネットワークに接続することはできません。インターネットプロトコルからイーサリアムネットワークに直接やり取りするには、相互互換性を備えたJSON-PRCやJavaScriptライブラリで読み込む必要があります。
ただ、この段階では読み取り専用の状態で、書き込みができません。書き込みを行うためには、秘密鍵を使った暗号化やデジタル署名をトランザクションと一緒に送信しなければいけません。
暗号化やデジタル署名は、ウェブブラウザの拡張機能であるMetaMaskに代表されるウォレットでやり取りします。ブロックチェーンネットワークにおけるウォレットは単なるデジタル資産を蓄えておく入れ物ではなく、トランザクションの内容を保護し、情報や送付先の真正性を検証・承認・移行する技術が備え付けられてられています。
デジタル署名と暗号化されたトランザクションがEVMで受け付けられ、マイナーによって承認されるとイーサリアムブロックチェーンにデプロイされます。その後、事前に決められたロジックに応じてスマートコントラクトが実行・処理され、その状態の変化がブロックチェーンに保存されます。
また、一連の取引においては、ブロックチェーンは膨大なデータを保存することに向いていないとされています。そのため、ブロックチェーンに収まらない情報は、IPFSやFilecoinなどの分散型ファイルシステムを使用してデータを分割し、全ノードに分散保存することでデータベースの効率化を図っています。
実世界の情報をスマートコントラクトに提供するオラクル
スマートコントラクトでは、「〇〇したら☓☓する」といったような条件設定を最初に行います。しかし、この「〇〇したら」の条件部分に当たる情報はブロックチェーン上で行われているやり取りだけではありません。例えば、金融商品の値動きに基づいて取引する場合や気象情報、スポーツ試合の結果などに合わせて何かを実行させる場合は、外部情報をブロックチェーンに取り込む必要があります。
そこで、「オラクル」と呼ばれる実世界のデータをAPI経由で取得するシステムを活用します。例えば「価格参照オラクル」は、DeFi(分散型金融)で取引を行うためにアセットやトークン価格の情報を指定のデータ提供元から取得します。
情報の取得方法には「中央集権型」と「分散型」の2種類あり、前者は単独の主体が取得するため効率的で迅速な一方、単一障害点が生まれます。実際に、あるDeFiのオラクルが狙われ、資金が流出した事件が過去に起きました。
分散型オラクルは、リスク回避のため複数のデータソースを利用してブロックチェーン上で分散管理されています。しかし、中央集権型のように速やかな判断ができないため、外部情報の検証と合意の形成に時間を要します。
分散型では外部情報の真正性を確認するのが難しかったため中央管理型のオラクルが選ばれる傾向がありましたが、現在は分散型の「Chainlink」が多くのプロジェクトに採用されています。
スマートコントラクトの課題と展望
スマートコントラクトは仲介コストの簡素化が可能であること、改ざんの困難さや透明性の高さ、事務作業の手軽さなどが大きな利点ということでした。
一方で、トランザクションの数が増えると処理が間に合わなくなる「スケーラビリティ」の課題があります。これはブロックチェーンの特徴である「セキュリティ」と「分散性」を担保しようとするとスケーラビリティが劣ってしまうというジレンマがこれまでの課題として残っているためです。
また「契約」は実社会での法律と密接に関わっています。世界ではスマートコントラクトが法的にも認められる動きも出てきていますが、日本でも議論や実装に向けた法整備が必要になってきます。
これらの課題を乗り越えて、スマートコントラクトが本当に人類史の第4次革命を起こせるのでしょうか?次の社会づくりを担うスマートコントラクトのサービスや動向にますます目が離せません。