はじめに
Nick Szabo氏が初めてスマートコントラクトについて説明したのは1990年代のことです。当時、彼はスマートコントラクトを「プロトコルとユーザーインターフェースを組み合わせることで、コンピュータネットワークを形式化し、安全性を確保するツール」と定義していました。
Szabo氏は、クレジットシステム、決済処理、コンテンツ権利管理など、契約を伴うさまざまな分野でスマートコントラクトが活用される可能性について述べました。
ブロックチェーンスマートコントラクトを使用すると、トラストレスプロトコルの作成が可能になります。つまり、双方の当事者が互いを知らなくても、あるいは信頼していなくても、ブロックチェーンを通じてコミットメントを行うことができるのです。条件が満たされなければ、契約は履行されません。その他、スマートコントラクトを利用することで、仲介者が不要になり、運用コストを大幅に削減することができます。
この記事では、Ethereumブロックチェーンの必須の要素である、Ethereum仮想マシン上で稼働するスマートコントラクトについて説明します。
スマートコントラクトの機能
簡単に言えば、スマートコントラクトは決定論的なプログラムとして機能します。そして、ある一定の条件が満たされたら、特定のタスクを実行します。このように、スマートコントラクトシステムは「if…then…」ステートメントに従います。しかし、使われている単語と違って、スマートコントラクトは法律上の契約でも、スマートでもないです。スマートコントラクトは分散型システム (ブロックチェーン) 上で稼働するコードにすぎません。
Ethereumネットワーク上では、スマートコントラクトはユーザー (アドレス) 間でなんらかの取引を行う際の実行と管理の役割を果たしています。スマートコントラクトではないアドレスは外部所有アカウント (EOA) と呼ばれます。つまり、スマートコントラクトはコンピュータコードによって、EOAはユーザーによってコントロールされています。
基本的に、Ethereumのスマートコントラクトはコントラクトコードと2つの公開鍵からできています。1つ目の公開鍵はコントラクトの作成者によって提供されています。もう1つの公開鍵はコントラクト自体を表し、それぞれのスマートコントラクト独自のデジタルIDとして機能します。
あらゆるスマートコントラクトのデプロイはブロックチェーントランザクションを通じて行われ、EOA (もしくは、他のスマートコントラクト) によって呼び出されたときにのみアクティベートされます。しかしながら、最初のトリガーは必ずEOA (ユーザー) によるものとなります。
主な機能
Ethereumスマートコントラクトには以下のような特徴があります。
分散性: スマートコントラクトはEthereumネットワーク内のすべてのノードで複製され、分散化されます。これは中央集権型サーバベースの他のソリューションとの主要な違いです。
決定論: スマートコントラクトは与えられた要件を満たされた時に、設計された行動だけを行います。また、その結果は何が起きようと、常に同一です。
自動化: スマートコントラクトはあらゆる作業を自動化し、自動執行プログラムのように機能します。そして、条件が満たされない限りは何も行いません。
改ざん耐性: デプロイされた後、スマートコントラクトを変更することはできません。事前にある特定の機能が実装されている場合のみスマートコントラクトを削除することができます。それゆえ、スマートコントラクトは改ざん耐性のあるコードと言われています。
トラストレス: 2つ以上もしくはそれ以上の数の当事者が含まれるトランザクションにおいても、スマートコントラクトを使用することで、互いに知らなくてもやり取りすることができます。さらに、ブロックチェーン技術はデータが正確であることを保証します。
透明性: スマートコントラクトはパブリックブロックチェーンに基づいているため、そのソースコードは改ざん不可能なだけでなく、公開されています。
スマートコントラクトの変更や削除
デプロイ後のEthereumスマートコントラクトに新たな機能を追加することは不可能です。しかし、作成者が SELFDESTRUCT と呼ばれる関数をコードに含めると、将来的にスマートコントラクトを「削除」し、新しいものに置き換えることができるようになります。これに対して、関数が事前にコードに含まれていない場合、削除することはできません。
特に、いわゆるアップグレード可能なスマートコントラクトにより、開発者は不変性のあるコントラクトでも、より柔軟に対応することができます。複雑性の程度はさまざまですが、アップグレード可能なスマートコントラクトを作成する方法は多数あります。
単純化した例として、複数のスマートコントラクトに分割されたスマートコントラクトを考えてみましょう。それらの中の一部は変えられないように設計されますが、他のでは「Delete」機能が有効になっています。つまり、他の機能に変更を加えることなく、スマートコントラクトのコードの一部を削除したり、変更したりすることができるようになります。
アドバンテージとユースケース
プログラミングできるコードとして、スマートコントラクトは高度にカスタマイズでき、様々な方法で設計することができ、そして多くの種類のサービスやソリューションを提供します。
分散型かつ自動執行プログラムとして、スマートコントラクトはさらなる透明性と運営コストの削減を実現するかもしれません。スマートコントラクトの実装によっては、効率性を向上させ、行政のコストを削減することもできます。
特に、スマートコントラクトは2つ以上もしくはそれ以上の当事者間での資金の移転、もしくは交換が含まれるシチュエーションにおいて便利です。
ERC-20
課題
スマートコントラクトは人が書いたプログラミングコードによって動きます。そのためコードには脆弱性とバグがあるため、多くのリスクをもたらします。理想的には、機密情報や多額の資産を扱うシステムを含むコードを書いたことあるような、経験豊富なプログラマーがコードを書き、デプロイする必要があります。
それ以外にも、スマートコントラクトが提供するソリューションや機能の大半を中央集権型システムが提供できるとする意見もあります。主な相違点は、スマートコントラクトが中央集権型のサーバーではなく、分散型のP2Pネットワーク上で実行されることです。また、ブロックチェーンシステムに基づいているため、不変または変更が非常に困難な傾向があります。
不変であることは、ある状況においては素晴らしいことですが、他の状況においては非常に悪いことです。例えば、2016年に「The DAO」という分散型自律組織 (DAO) がハッキングされたとき、そのスマートコントラクトコードの欠陥により、数百万Ether (ETH) が盗難されました。
ただし、重要なこととして、この問題はEthereumブロックチェーンによるものではなかったということです。Ethereumブロックチェーンの欠陥ではなく、スマートコントラクトの実装によって引き起こされました。
スマートコントラクトのもう1つの限界は法的な位置づけがまだ不明瞭であることです。スマートコントラクトが多くの国ではまだグレーゾーンであるだけでなく、既存の法的枠組みに適していないこともその理由です。
例えば、多くの国では契約を行う当事者は互いに18歳以上であることが必要です。ブロックチェーン技術だと仮名で取引ができ、仲介者がいないことと合わせると、こういった要件が満たされない可能性があります。確かに、こういった問題に対するソリューションも考えられてはいますが、スマートコントラクトの法的強制力は、特にボーダーレス、分散型ネットワークにおいては、大きな課題となります。
批判
ブロックチェーンの専門家の中にはスマートコントラクトは現在の商業、そして行政システムの大半を置き換え、自動化させるソリューションと考えている人もいます。確かに、それも可能ですが、実現するのは遥か先のことになるでしょう。
間違いなく、スマートコントラクトは面白い技術です。しかし、分散型で、決定論的で、透明性があり、ある程度不変でことは状況によっては不利となる可能性もあります。
本質的に、スマートコントラクトへの批判は多くの現実の問題にを解決するのに適したソリューションではないことを主張しています。実際、一部の組織は、従来のサーバーベースの代替手段を使用したほうがよいでしょう。
スマートコントラクトと比べた時、中央集権型のサーバーは保守、運用がより簡単かつ、安価で、スピードとクロスネットワーク・コミュニケーション (相互運用性) という観点でははるかに効率的な傾向になります。
まとめ
スマートコントラクトが仮想通貨の分野に大きな影響を与え、さらにこの技術がブロックチェーン業界に革新をもたらしていることは疑いがありません。しかし、エンドユーザーは直接スマートコントラクトで直接やり取りすることはできないかもしれませんが、これらは将来、金融サービスからサプライチェーン管理に至るまで、幅広いアプリケーションに活用される可能性があります。
スマートコントラクトとブロックチェーンの組み合わせは、私たちの社会のほぼすべての領域を破壊する可能性を秘めています。しかし、これらの画期的な技術が、大規模な普及を阻む多くの障害を乗り越えられるかどうかは、時間が経ってみなければわかりません。