管理者のいない自動販売機が、ブロックチェーンの上にある
お金を入れればボタンひとつで商品が出てくる自動販売機。それを、デジタル取引の世界に持ち込んだようなものがスマートコントラクトです。
普通のプログラムとの違い
「自動で動くプログラム」なら、アプリやウェブサービスにもあります。何が違うのでしょうか。答えは「どこで動いているか」にあります。
普通のプログラムは、特定の会社のサーバーで動いています。その会社がサービスを止めれば、プログラムも止まります。コードを変えることもできます。
スマートコントラクトは、代表的にはイーサリアムのようなブロックチェーン上で動くプログラムです。ブロックチェーンは多くのコンピューターで共有されているため、特定の1社だけで止めたり書き換えたりしにくい仕組みです。公開されたコードは、一般にそのまま残り続けます。一方で、設計によってはアップグレード機能を持つものもあります。
本物の自動販売機には管理会社があります。故障すれば直され、売り切れれば補充され、ルールも変えられます。スマートコントラクトの「自動販売機」は、そうした運用上の裁量をできるだけ減らして、先に書いた条件どおりに処理する仕組みに近いです。コードや取引記録を確認しやすいことも特徴です。
これが「信頼を必要としない」と表現される理由です。より正確には、「相手が約束を守るか」を人に頼る部分を減らし、コードとネットワークのルールに寄せる、という発想です。
フライト遅延保険の例で考える
フライト遅延保険を想像してください。今の仕組みでは、遅延が起きたときに申請や確認の手続きが必要になることがあります。
スマートコントラクトを使うと、たとえばこんな設計が考えられます。「フライトXXXが2時間以上遅延したら、指定されたアドレスに保険金を送る」というコードをブロックチェーンに書いておきます。実際には、フライト情報のような外部データはオラクルと呼ばれる仕組みを通じて取り込みます。条件が確認されれば、支払いを自動で実行することもできます。
条件と結果があらかじめ決まっていて、途中の手作業を減らせる。そこにスマートコントラクトの使い道の一つがあります。
「変えられない」ことの諸刃の剣
ただ、「変えにくい」という性質は諸刃の剣でもあります。一般に、デプロイ後のコードは書き換えづらく、バグがあっても修正は簡単ではありません。
しかもスマートコントラクトの実行は公開環境で行われ、ソースコードも公開されることがあります。悪意のある人が欠陥を見つけた場合、それを突いて資金を抜き取ろうとすることもあります。
じつは、これまでにスマートコントラクトの脆弱性を突いた大きな事件は複数起きています。コードは正確にルール通りに動いていても、作った人が意図した通りとは限らない、ということです。「正確に動く」ことと「意図通りに動く」ことは、同じではありません。
スマートコントラクトの面白さは、「人や組織の裁量」を一部コードで置き換えようとする発想にあります。契約書を作って、誰かが確認して、銀行を通じて代金を送る。今の社会には、取引を成り立たせるための仲介役がたくさんいます。スマートコントラクトは、その一部をコードで置き換えようとする試みです。
仲介役がすべて不要になるわけではありませんし、コード自体をどう信頼するか、外部データを誰がどう届けるか、という課題も残ります。それでも「誰かの裁量」から「公開されたルール」へ比重を移す、という考え方には新しさがあります。自動販売機は管理する人がいるから安心して使えます。スマートコントラクトは、管理者の裁量を減らすことで別の安心をつくろうとする。その発想の転換が、この仕組みの根っこにあります。