スマートコントラクトとは?
ホーム
記事
スマートコントラクトとは?

スマートコントラクトとは?

中級者
公開済 Sep 16, 2019更新済 Jun 9, 2023
9m

はじめに

Nick Szabo氏が初めてスマートコントラクトについて説明したのは1990年代のことです。当時、彼はスマートコントラクトを「プロトコルとユーザーインターフェースを組み合わせることで、コンピュータネットワークを形式化し、安全性を確保するツール」と定義していました。

Szabo氏は、クレジットシステム、決済処理、コンテンツ権利管理など、契約を伴うさまざまな分野でスマートコントラクトが活用される可能性について述べました。

仮想通貨の世界では、ブロックチェーン上で動作するアプリケーションやプログラムを、スマートコントラクトと定義することがあります。一般的には、特定のルールによって実施されるデジタルコントラクトとして機能します。これらのルールはコンピュータコードによって事前に定義され、すべてのネットワークノードにより複製され実行されます。

ブロックチェーンスマートコントラクトを使用すると、トラストレスプロトコルの作成が可能になります。つまり、双方の当事者が互いを知らなくても、あるいは信頼していなくても、ブロックチェーンを通じてコミットメントを行うことができるのです。条件が満たされなければ、契約は履行されません。その他、スマートコントラクトを利用することで、仲介者が不要になり、運用コストを大幅に削減することができます。

Bitcoinプロトコルは長年スマートコントラクトをサポートしてきましたが、Ethereumの生みの親でもあり、共同創設者のVitalik Buterin氏によって普及が進みました。ただし、ブロックチェーンごとにスマートコントラクトの実装方法が異なる可能性があるため、注意が必要です。 

この記事では、Ethereumブロックチェーンの必須の要素である、Ethereum仮想マシン上で稼働するスマートコントラクトについて説明します。


スマートコントラクトの機能

簡単に言えば、スマートコントラクトは決定論的なプログラムとして機能します。そして、ある一定の条件が満たされたら、特定のタスクを実行します。このように、スマートコントラクトシステムは「if…then…」ステートメントに従います。しかし、使われている単語と違って、スマートコントラクトは法律上の契約でも、スマートでもないです。スマートコントラクトは分散型システム (ブロックチェーン) 上で稼働するコードにすぎません。

Ethereumネットワーク上では、スマートコントラクトはユーザー (アドレス) 間でなんらかの取引を行う際の実行と管理の役割を果たしています。スマートコントラクトではないアドレスは外部所有アカウント (EOA) と呼ばれます。つまり、スマートコントラクトはコンピュータコードによって、EOAはユーザーによってコントロールされています。

基本的に、Ethereumのスマートコントラクトはコントラクトコードと2つの公開鍵からできています。1つ目の公開鍵はコントラクトの作成者によって提供されています。もう1つの公開鍵はコントラクト自体を表し、それぞれのスマートコントラクト独自のデジタルIDとして機能します。

あらゆるスマートコントラクトのデプロイはブロックチェーントランザクションを通じて行われ、EOA (もしくは、他のスマートコントラクト) によって呼び出されたときにのみアクティベートされます。しかしながら、最初のトリガーは必ずEOA (ユーザー) によるものとなります。


主な機能

Ethereumスマートコントラクトには以下のような特徴があります。

分散性: スマートコントラクトはEthereumネットワーク内のすべてのノードで複製され、分散化されます。これは中央集権型サーバベースの他のソリューションとの主要な違いです。

決定論: スマートコントラクトは与えられた要件を満たされた時に、設計された行動だけを行います。また、その結果は何が起きようと、常に同一です。

自動化: スマートコントラクトはあらゆる作業を自動化し、自動執行プログラムのように機能します。そして、条件が満たされない限りは何も行いません。

改ざん耐性: デプロイされた後、スマートコントラクトを変更することはできません。事前にある特定の機能が実装されている場合のみスマートコントラクトを削除することができます。それゆえ、スマートコントラクトは改ざん耐性のあるコードと言われています。

カスタマイズ可能: デプロイする前に、スマートコントラクトはさまざまな方法でコード化することができます。そのため、多種類の分散型アプリケーション (DApps) を作成するために利用することができます。これは、Ethereumがチューリング完全なブロックチェーンであることと関係しています。

トラストレス: 2つ以上もしくはそれ以上の数の当事者が含まれるトランザクションにおいても、スマートコントラクトを使用することで、互いに知らなくてもやり取りすることができます。さらに、ブロックチェーン技術はデータが正確であることを保証します。

透明性: スマートコントラクトはパブリックブロックチェーンに基づいているため、そのソースコードは改ざん不可能なだけでなく、公開されています。


スマートコントラクトの変更や削除

デプロイ後のEthereumスマートコントラクトに新たな機能を追加することは不可能です。しかし、作成者が SELFDESTRUCT と呼ばれる関数をコードに含めると、将来的にスマートコントラクトを「削除」し、新しいものに置き換えることができるようになります。これに対して、関数が事前にコードに含まれていない場合、削除することはできません。

特に、いわゆるアップグレード可能なスマートコントラクトにより、開発者は不変性のあるコントラクトでも、より柔軟に対応することができます。複雑性の程度はさまざまですが、アップグレード可能なスマートコントラクトを作成する方法は多数あります。

単純化した例として、複数のスマートコントラクトに分割されたスマートコントラクトを考えてみましょう。それらの中の一部は変えられないように設計されますが、他のでは「Delete」機能が有効になっています。つまり、他の機能に変更を加えることなく、スマートコントラクトのコードの一部を削除したり、変更したりすることができるようになります。


アドバンテージとユースケース

プログラミングできるコードとして、スマートコントラクトは高度にカスタマイズでき、様々な方法で設計することができ、そして多くの種類のサービスやソリューションを提供します。

分散型かつ自動執行プログラムとして、スマートコントラクトはさらなる透明性と運営コストの削減を実現するかもしれません。スマートコントラクトの実装によっては、効率性を向上させ、行政のコストを削減することもできます。

特に、スマートコントラクトは2つ以上もしくはそれ以上の当事者間での資金の移転、もしくは交換が含まれるシチュエーションにおいて便利です。

つまり、スマートコントラクトは、さまざまなユースケースを想定して設計することができるのです。例えば、トークン化された資産、投票システム、仮想通貨ウォレット、分散型取引所、ゲーム、モバイルアプリケーションなどの作成が挙げられます。また、ヘルスケアチャリティサプライチェーンガバナンス分散型金融 (DeFi) の分野に取り組む他のブロックチェーンソリューションと一緒にデプロイすることもできます。


ERC-20

Ethereumブロックチェーン上で発行されるトークンは、ERC-20と呼ばれる規格に準拠しています。この規格は、すべてのEthereumベーストークンのコア機能を記述しています。そのため、これらのデジタル資産はしばしばERC-20トークンと呼ばれ、既存の仮想通貨の大部分を占めています。
多くのブロックチェーン企業やスタートアップ企業は、Ethereumネットワーク上でデジタルトークンを発行するためにスマートコントラクトを導入しています。発行後、これらの企業の大半はイニシャル・コイン・オファリング (ICO)  イベントを通じてERC-20トークンを配布しています。多くの場合、スマートコントラクトを使用することで、トラストレスかつ効率的な方法で、資金のやり取りやトークンの配布が可能になりました。


課題

スマートコントラクトは人が書いたプログラミングコードによって動きます。そのためコードには脆弱性とバグがあるため、多くのリスクをもたらします。理想的には、機密情報や多額の資産を扱うシステムを含むコードを書いたことあるような、経験豊富なプログラマーがコードを書き、デプロイする必要があります。

それ以外にも、スマートコントラクトが提供するソリューションや機能の大半を中央集権型システムが提供できるとする意見もあります。主な相違点は、スマートコントラクトが中央集権型のサーバーではなく、分散型のP2Pネットワーク上で実行されることです。また、ブロックチェーンシステムに基づいているため、不変または変更が非常に困難な傾向があります。

不変であることは、ある状況においては素晴らしいことですが、他の状況においては非常に悪いことです。例えば、2016年に「The DAO」という分散型自律組織 (DAO) がハッキングされたとき、そのスマートコントラクトコードの欠陥により、数百万Ether (ETH) が盗難されました。

そのスマートコントラクトは不変であったため、開発者はコードを修正することが不可能でした。これがやがてハードフォークへとつながり、第2のEthereumチェーンを誕生させることになりました。ようするに、あるチェーンがハッキングを「取り消し」、資金を正当な所有者に資金を返還したのです (これは現在のEthereumブロックチェーンの一部です) 。もう一方のチェーンは、ブロックチェーン上で発生したことは決して変更すべきではないとして、ハッキングに干渉しないことを決定しました (このチェーンは現在、Ethereum Classicと呼ばれています) 。

ただし、重要なこととして、この問題はEthereumブロックチェーンによるものではなかったということです。Ethereumブロックチェーンの欠陥ではなく、スマートコントラクトの実装によって引き起こされました。

スマートコントラクトのもう1つの限界は法的な位置づけがまだ不明瞭であることです。スマートコントラクトが多くの国ではまだグレーゾーンであるだけでなく、既存の法的枠組みに適していないこともその理由です。

例えば、多くの国では契約を行う当事者は互いに18歳以上であることが必要です。ブロックチェーン技術だと仮名で取引ができ、仲介者がいないことと合わせると、こういった要件が満たされない可能性があります。確かに、こういった問題に対するソリューションも考えられてはいますが、スマートコントラクトの法的強制力は、特にボーダーレス、分散型ネットワークにおいては、大きな課題となります。


批判

ブロックチェーンの専門家の中にはスマートコントラクトは現在の商業、そして行政システムの大半を置き換え、自動化させるソリューションと考えている人もいます。確かに、それも可能ですが、実現するのは遥か先のことになるでしょう。

間違いなく、スマートコントラクトは面白い技術です。しかし、分散型で、決定論的で、透明性があり、ある程度不変でことは状況によっては不利となる可能性もあります。

本質的に、スマートコントラクトへの批判は多くの現実の問題にを解決するのに適したソリューションではないことを主張しています。実際、一部の組織は、従来のサーバーベースの代替手段を使用したほうがよいでしょう。

スマートコントラクトと比べた時、中央集権型のサーバーは保守、運用がより簡単かつ、安価で、スピードとクロスネットワーク・コミュニケーション (相互運用性) という観点でははるかに効率的な傾向になります。


まとめ

スマートコントラクトが仮想通貨の分野に大きな影響を与え、さらにこの技術がブロックチェーン業界に革新をもたらしていることは疑いがありません。しかし、エンドユーザーは直接スマートコントラクトで直接やり取りすることはできないかもしれませんが、これらは将来、金融サービスからサプライチェーン管理に至るまで、幅広いアプリケーションに活用される可能性があります。

スマートコントラクトとブロックチェーンの組み合わせは、私たちの社会のほぼすべての領域を破壊する可能性を秘めています。しかし、これらの画期的な技術が、大規模な普及を阻む多くの障害を乗り越えられるかどうかは、時間が経ってみなければわかりません。