ブロックチェーン技術に関心がある人や仮想通貨に投資をしている人ならどこかで必ずスマートコントラクト(Smart Contracts)という言葉を耳にしたことがあるでしょう。

スマートコントラクト(通称スマコン)はブロックチェーン関連の言葉であるということはわかりますが、正確な定義や機能というのは実はとても奥深く、理解が難しいものになっています。

スマートコントラクトはいったいどのような役割を果たす技術で、ブロックチェーンや分散型台帳などといった言葉とどのような違いがあるのでしょうか?このページでは、こういった疑問をわかりやすく解説します。

スマコンは意外と古い?生まれたのは1994年

スマートコントラクトはイーサリアムの登場を期に注目度が飛躍したため、一見新しい言葉のように思えます。

しかし、この言葉はアメリカの暗号学者Nick Szabo氏が1994年に生み出したものです。Szabo氏は「Bit Gold」と呼ばれるビットコインのアイデアの基となったデジタル通貨を提案した人物です。

Szabo氏が定義したスマートコントラクトは、契約(コントラクト)をデジタル上で自動的に生成、承認、そして(強制的に)実行するコンピュータープログラムのことを指します。

スマートコントラクトを利用するメリットは?

例えば、AさんがBさんに送金を行うとしましょう。従来であれば、AさんとBさんの間には銀行が仲介役として存在し、「Aからお金と仲介手数料を受け取り、Bに送る」という作業を行います。

このプロセスを、以下のようなスマートコントラクトで自動的に行ったらどうなるでしょうか?

  • AからBへ10コイン送金するリクエストを受け取ったら以下を実行する
  • Aが10コイン以上持っているか確認する
  • 確認が取れたら、Aのアカウントから10コイン引く
  • Aのアカウントの処理ができたら、Bのアカウントに10コイン足す

こうすることで、仲介役を省き、従来よりも安い手数料で、しかも速く送金を済ませることができます。つまり、スマートコントラクトには第三者不要契約を自動実行できるメリットがあるのです。

このような性質から、スマートコントラクトは国際間送金や、投票システム資産所有権の管理サプライチェーンヘルスケアなど様々な分野での活用が期待されています。

スマートコントラクトとブロックチェーン

先ほどのAさんからBさんへの送金の例に戻りましょう。

プログラムが実行されるのは良いですが、ここで実際にAさんとBさんのアカウント間の処理をする(コンピューターパワー・電気代を提供する)のは誰なのでしょうか?

また、この契約が正当に行われた事を証明するにはどうしたら良いのでしょうか?

ここで活躍するのがブロックチェーンです。スマートコントラクトの実行や記録は不特定多数のネットワーク参加者(ノード)によって行われます。

また、ブロックチェーン上に記録された取引履歴は誰でも閲覧・検証できるため、コントラクトの公平性セキュリティも保たれます。

つまり、スマートコントラクトはブロックチェーンありきであるということです。

「ブロックチェーン」や「分散型台帳」との違いは?

上記でも少し解説しましたが、ここでスマートコントラクトブロックチェーン分散型台帳の違いを確認しておきましょう。

分散型台帳(DLT)

まず、分散型台帳とは、ひとつの台帳(取引を記録する書類)を銀行や政府が集権的に管理するのではなく、台帳のコピーを全員に配って管理を行う、というシステムです。

ネットワークの参加者全員が台帳のコピーを保有するため、誰か一人が改ざんを行ってもすぐに不正を特定できるというメリットがあります。

ブロックチェーン

この分散型台帳の一種であるのが、ブロックチェーンです。上記の分散型台帳の特性に加え、ブロックチェーンでは、データ(取引の記録)がブロックと呼ばれるグループにまとめられ、暗号化されます。

この暗号化されたブロックを解読するには、前に作られたブロックのデータが必要になります。しかし、このブロックのデータを入手するには更にその前のブロックのデータが必要になります。

このように、ブロックチェーンでは、暗号化されたブロックのチェーンを作ることでデータの改ざんを不可能にできるメリットがあります。

スマートコントラクト

最後に、スマートコントラクトは、契約を自動的に生成・承認・実行できるプログラムです。

このプログラムは無人で自動的に実行されるため、第三者の介入が不要になります。

しかし、スマートコントラクトの実行・記録をする計算能力(電気)は誰かが提供しなくてはなりません

ここで、ブロックチェーンを利用することで、不特定多数のノードがこういった仕事を代行できるわけです。

スマートコントラクトの定義は曖昧?

ここまででは、スマートコントラクトは契約を自動的に生成・承認・実行できるプログラムであるとしました。

しかし、スマートコントラクトの定義や用語の使い方には少し曖昧な部分もあります。

スマートコントラクトにはただの送金プログラムのような簡単なものもあれば、複数のスマコンが集結してトークンに拡張機能をつけるような複雑なプログラムもあります。

このような単一のものも、正確には複数のスマコンが集結したものも、総じてスマートコントラクトと呼ばれる傾向があります。

スマートコントラクト開発言語

スマートコントラクトはプログラムであると解説しましたが、一体どのようなプログラミング言語で書かれているのでしょうか?

この項では、ビットコインとイーサリアムで使われているスマートコントラクト開発言語を紹介します。

ビットコイン

認知度はあまり高くないものの、ビットコインでもスマートコントラクトを開発することは可能です。

よく知られているもので、「ライトニングネットワーク」や「アトミック・クロスチェーン」などといったものがあります。

ライトニングネットワークとは、「チャンネル」という空間でトランザクションを行うことで、ペイメントの円滑化を試みる技術です。

アトミック・クロスチェーンとは、異なるブロックチェーン(通貨)同士でトランザクションを行うための技術です。

これらの技術はスマートコントラクトを利用したプログラムです。

しかし、ビットコインのスマートコントラクト開発言語は「チューリング不完全」といい、どのようなプログラムでも組めるという訳ではありません。

正確には、この開発言語は上記の例のような貨幣としてのビットコイン(BTC)の拡張機能を開発する目的に限られています。

イーサリアム

イーサリアムのスマートコントラクトはSoliditySerpentLLLMutanVyper(試験段階)という5つの言語で書かれています。中でもSolidityはとても有名なスマートコントラクト開発言語です。

イーサリアムの開発言語は「チューリング完全」であり、ビットコインのものよりも開発の幅が広いものとなっています。

ビットコインが通貨のやり取りに関するスマコンのみ可能であったのに対し、Solidityなどでは多種に渡る資産の所有権も扱える、と考えるとわかりやすいでしょう。

言い換えれば、イーサリアムは様々な産業分野でブロックチェーンとスマートコントラクトを活用できるようにしたプラットフォームなのです。

このコントラクトの実行やネットワークの維持の際、ノードに手数料として支払われるものがETHです。ですから、ETHは正確には仮想通貨ではなくノードを動かすための仮想「燃料」なのです。

スマートコントラクトが抱える問題

ブロックチェーンにも様々な問題があるのと同様、スマートコントラクトにもたくさんの課題が存在します。

例えば、従来の契約は法を基に執行されるものであるのに対し、スマートコントラクトはコードを基に執行されますが、各国の政府はスマートコントラクトにも法的な規制を課すべきなのでしょうか?

契約が自動的に実行されるのは良いですが、返金や返品などを行いたい場合はどうなってしまうのでしょうか?

また、スマートコントラクトの実行履歴というのは全ノード間で共有されると解説しましたが、履歴を特定の個人や団体に見られたくない場合(金融機関など)はどうすれば良いのでしょうか?

このように、スマートコントラクトには改善・議論の余地が未だ大きく存在します。

まとめ

スマートコントラクトは、分散型ネットワーク上で「こうなったら、こうする」という自動実行プログラムのことを指すという事でした。

スマートコントラクトには第三者不要で取引を自動的に行えるというメリットがあり、ブロックチェーンと組み合わせることによってコントラクトの正当性を確保できるということでした。

スマートコントラクトの定義は割と曖昧で、ひとつのプログラムに限らず、複数のコントラクトを集めたものプログラムもスマートコントラクトと呼ぶこともあるということでした。

当記事を読んで、ぜひスマートコントラクトについてもっと詳しく勉強したい!と思った方は、イーサリアムRSKなどのオンライン講座に目を通してみることもオススメします。