スマートコントラクトとは?出来ること出来ないこと

カルダノ の スマートコントラクト が注目され始めてから4年、
いよいよメインネットにての稼働開始も目前にせまりました。

ここで改めてスマートコントラクトとは何なのか?
を振り返ってみましょう。

スマートコントラクトは「仲介者の排除」をしたい

サトシさんが遠く離れたナカモトさんにお金を送りたいとします。

お金を安全に、他の金融商品に形を変えずに送るには
今までは銀行を介する必要がありました。

銀行を利用するためには銀行口座を保有してないといけなく、
銀行口座を開くためにはそもそもその地域に銀行がないといけません。

サトシさんがナカモトさんに送金する


「当人同士が納得しているのに、口座を持たないとお金を送れないなんて。」

そんな想いを解決したのが、ビットコインを始めとするブロックチェーンです。

手数料を払えば送金でき、しかも銀行と違って世界中どこにいても
送金にかかる時間は変わりません。
「営業時間外だから処理が遅くなる」こともないです。

これでサトシさんは、仮想通貨という形であれば銀行口座を持たなくても
送金できるようになりました。

サトシさんとナカモトさんがビットコインを送る

そこで次の問題。

もしナカモトさんがコインを送った場合にのみ、サトシさんがコインを送る。
サトシさんがコインを送った場合のみナカモトさんがコインを送る。

こんな「条件付き」の送金の場合はどうすればいいでしょう?

サトシさんとナカモトさんがコインを送り合いたい

サトシさんがコインを先に送ってもナカモトさんが送らない事態はさけたい。
逆も同じです。

もし債務不履行となった場合は、法的措置が取れるように
通常は「第3者」が仲介して「契約」を見届けます。

サトシさんとナカモトさんが契約

しかしそれにはいくつか懸念点がつきまといます。

  • 仲介者が「信頼」できなくてはならない
  • 仲介者のスケジュールに依存する
  • 仲介サービスの付加価値の低さに比べて仲介手数料が高い

これでは効率が悪すぎます。

もし仲介者がいなくても、債務の履行を強制できて、
不履行だった時の措置も契約内容に従い自動でとれるとしたら?

スマートコントラクトはこのように「仲介者を排除」して
契約をもっと効率よく進めよう」、という理想のもと生まれました。

デジタルコントラクトの進化の歴史

最初に従来の契約を変えたのは「電子契約」の登場です。

Webアプリケーションの会員登録やアプリインストール時などに出てくる
あの誰も読まない同意書もその一つです。


「同意する」ボタンを押す、または署名欄に「名前を入力する」だけで
契約が成立するため、ペーパーレスでとても効率がよくなりました。

しかし、電子契約書が保証するのは契約の「入り口」だけで、
契約条件が満たされた時、または満たされなかった時は
依然と人の手を必要としました。


そこで次に登場したのが「Data-Oriented Contract (データ指向型契約)
または「Computable Contract (計算できる契約)」です。

契約書をあるフォーマットに則った形で入力してもらい、コンピュータが理解できる形に変えて、
契約条件の自動コード化と内容の分析に挑んだプロジェクトです。

「契約の入り口」の電子化に続き、「契約条件のコード化」まで進みましたが、
条件に応じた債務の強制にまではいたりませんでした。

そこで登場したのが「スマートコントラクト」です。

そもそも何がスマートなの?

スマートコントラクトという言葉自体は新しくなく、
1994年に弁護士/暗号学者の Nick Szabo(ニック・ザボ)によって初めて使われました。

Smart contracts combine protocols with user interfaces to formalize and secure relationships over computer networks. 

Formalizing and Securing Relationships on Public Networks(1997)

スマートコントラクトはインターネットとUIを通じてユーザー同士に機密性のある関係を構築する。

今の仮想通貨で言われているスマートコントラクトの特徴を
一言でいうとこうなります。

契約内容の交渉と同意はすべてデジタルで完結し、
ひとたび成立すれば誰も改ざん出来なくて、
債務の履行や不履行の時の措置もオートメーション化される。


ビットコインが国や銀行の管理なしで通貨を扱えるのが注目されたように、
スマートコントラクトは国の法体系の管理なしでも契約を完遂できることで期待されています。

スマートコントラクトの仕組み

スマートコントラクトのコアとなる部分はブロックチェーン上で自動的に実行されるプログラムで、

あらかじめ設定された条件が満たされれば実行されるようになっています。

if(もし)
when(○○○なら)
then(XXXする)

例えば


もし送金されればチケットを発行する
もし期日5日前までにキャンセル申請すれば返金する
もし期日1日前までにキャンセル申請しなければキャンセル料を徴収する

などなど、ユースケースによってコントラクトの内容も多種多様です。

よくスマートコントラクトは 「deterministic(決定論的)である」と言われています。

耳慣れない言葉ですが、これは要約すると

「インプットによってのみアウトプットが決まる」概念だと思ってください。

例えば自動販売機は決定論的です。

110円のドリンクを100円だけいれても買えません。
何回やっても同じです。

200円入れた時は、あらかじめ組み込まれたアルゴリズムで検証し、
もし問題ないなら「購入可能状態」に遷移します。

そして自動販売機に入ってる残りの硬貨の枚数分布とそれぞれの使用頻度から
渡すおつりの組み合わせが決定します。

スマートコントラクトを自動販売機で例える

投入金額・硬貨の検証方法・残りの硬貨分布というインプットが同じであれば、
何回やってもドリンクが出てくることと、釣り銭の組み合わせというアウトプットが
変わらないことからとても決定論的です。

50円硬貨が欲しくても、50円が少なかったら10円5枚を容赦なく渡します。

そしてスマートコントラクトも自動販売機と同じで、それ自体が資金を保有できます。
これは今までのデジタルコントラクトでは有りえませんでした。

以下はスマートコントラクトの強みです。

凄いとこ凄い理由
早い・効率的・正確条件が満たされれば即座に実行される
ペーパーワークや仲介者を必要としない
決定論的
安全性許可された一部のユーザーだけが見ることができる
暗号化されている
ブロックチェーン上にあるため、一つの契約を変えるのに51%を変える必要がある
透明性暗号化された情報は参加者に公開されるため、
片方の利益のために契約内容が勝手に更新されたか気にする必要はない
節約第三者の介入を必要としないため、余計な費用や時間はすべて排除できる
仲介者のスケジュールのせいで進行が遅れることもない
再現性プログラムであるため、同じスマートコントラクトを使えば誰でも同じ契約を
結ぶことができ、カスタマイズも自由にできる
似たような契約のたびに契約書を1から作る必要がない

どの仮想通貨がスマートコントラクトを導入しているの?

代表的なのがイーサリウムで、世界で初めてスマートコントラクトを実用化したと言われています。

他には、EOS、TRON、Teasors、Cardanoなどがスマートコントラクトを導入していますが
中でもカルダノのスマートコントラクトは最も注目されています。

以下のサイトではスマートコントラクトを導入している全ての仮想通貨一覧ですが、
時価総額順に並べた時に1位はイーサリウムで2位はカルダノです。

スマートコントラクトを導入している仮想通貨

カルダノのスマートコントラクトが凄い理由

セキュリティ面

スマートコントラクトといえばイーサリウムですが、
スマートコントラクトの可能性よりも、脆弱性をついた攻撃で、多大な損失を被ったという
ニュースの方が目立っていた気がします。

こちらはイーサリウムのスマートコントラクトで発覚したバグとETH損失のレポートです。
※ タップでサイトへ飛びます

イーサリウムのハッキング事故

タイマーで設定したみたいに数ヶ月に1回は数千以上のETHが攻撃だったりバグで失われてますね。
半年に1回は3億円事件みたいな規模です。

このような事態にならないためにも、カルダノは特に機密性の観点から入念な準備を進めてきました。

  1. 開発に入る前に設計を科学論文形式で発表し、専門家による査読を元に修正・再発表を繰り返す
  2. 開発言語には、Haskellを選定。C言語が早さで定評なように、Haskellは安全性が定評
  3. メインネットのリリース初日から堅牢な品質を提供できるように、テストネットでの検証は様々なケースを想定

統一のプログラム言語で書かれている

イーサリウムのスマートコントラクトにはSolidityと呼ばれる専用言語でコーディングされていますが、
これはブロックチェーン側でしか動きません。
オフチェーンでSolidityと対話するためには、Javascriptなど別の言語でコーディングする必要があります。

カルダノのスマートコントラクトもPlutusと呼ばれる専用言語でコーディングされていますが、
こちらはHaskellで書かれた言語です。
少し書き方を変えるだけで、オンチェーン側もオフチェーン側もPlutusだけで完結します。

オンチェーン側とオフチェーン側の言語を統一することで、メンテナンスが楽になります。
片方をアップデートした際にもう片方との互換性は問題はないか?と気にすることはありません。

次に数式の量を比較してみましょう。

SolidityはEVMと呼ばれる仮想マシーン上で実行しますが、EVMの仕様に関する論文
「Ethereum a secure decentralised generalised transaction ledger」では何十ページにも及ぶ
数式が載っています。

イーサリウムのスマートコントラクトに関する論文



PlutusにもPlutus Core machineと呼ばれるEVMと似たものがありますが、
ナプキン一枚の上に同等の数式が書けるそうです。

EVMを数式をHaskellでナプキン1枚に書く

簡潔に書けるという点でも障害ポイントの早期発見にも繋がりますし、保守しやすくていいですね。

手数料が安い

1トランザクションで発生する平均手数料は、現在(2021/8/24)の時点で

イーサリウムは218円でカルダノは40円です。
(イーサリウムはこちらのサイトから、カルダノはネットワークから取得したデータを元に計算しました)

イーサリウムの手数料で使われる「ガス」という単位はETHの価格に影響されないため、ETHの価値があがっても
現実の法定通貨に換算した時の手数料は変わりません。
(価値が上がるとネットワークアクティビティが活発になった結果、ガスが高くなることはあります)

カルダノの手数料はADAをベースとして計算されているため、
ADA/JPYが1363円になればカルダノの手数料も218円になります。

もちろん平均手数料を考える上で、イーサリウムは既にスマートコントラクトを使った
活発なエコシステムを形成しているため、負荷の高いトランザクションが平均手数料をあげているとも言えます。

しかしカルダノも手数料の計算にADAではなく、ADAの価値変動に影響しない「ステーブルフィー」を
使う計画があり、公平で安定していてかつ予測しやすい手数料になると注目されています。

スマートコントラクトで出来ないユースケース

スマートコントラクトは万能ではありません。

導入したからといって、どんな時でも仲介者を排除でき、
サプライヤーは利益率をあげれてバイヤーは低価格で購入できて
魔法のように契約が進み、皆がハッピー

というわけにはいかないんです。

「AI」が世間で認知されはじめた時に

「それってAIでなんとかなりませんか?」

とエンジニアなら顧客に言われたことあるかもしれませんが、
それと似ている気がします。

「スマートコントラクトでなんとかなりませんか?」

と言われても対応できるように、こちらではスマートコントラクトで
解決できないユースケースをまとめます。

1. スマートコントラクトは曖昧な契約条件にはむいていない

ネットワークがブロックチェーンの外の情報を知るためには、
後述するオラクルなどを通して、データを渡す必要があります

しかしこのデータを契約の条件に使おうと考えた時、

「送金されたら(1か0)」
「日経平均株がXX万円を上回ったら」

みたいに数字で表現できる時は決定論的なのですが、

「賃貸物件で床の張替えが必要なら」
「レンタカーのバンパーに傷がついたなら」

みたいに数で表現できない時は、判断が曖昧になりやすく
その結果も色んなパターンが生まれてしまいます。

例えば不動産契約の場合、「部屋が汚れていたらクリーニング代を特約として敷金から徴収する」
これを強制するには、部屋のダメージをお互いが納得できる形でデータで表現し、
ブロックチェーンに渡さなくてはなりません。

同じく、レンタカー契約においても、現実世界で起こった事故は
ブロックチェーンはそれが自己負担の対象なのか保険の範囲内なのかは知りえません。

スマートコントラクトは現実の事はわからない
  • IOT化の進歩
  • プライバシーが侵害されない範囲でブロックチェーンにデータを提供
  • データ提供会社の信頼の担保
  • 試験を積み重ねて、決定論的であることの保証

こちらの課題をクリアした時にはスマートコントラクトに組み込めるかもしれませんが、
今の時点で質的データを扱う契約のスマート化は難しいかもしれません。

それと同じで、契約内容に「最善を尽くす」など曖昧な記述がある場合も、
行動を分類する信頼のおける第3者を必要とするため、スマートコントラクト向きではありません。

ただ、機械学習を使えば二値分類できるので、様々な情報から分類モデルを作り

95%の確率で不履行か判断できる

のような形であれば、将来的に実現できるかもしれませんね。

2. スマートコントラクトは一度デプロイされれば変更はできない

こちらは外部の改ざんを防ぐメリットでもありますが、デメリットもあります。

現実での契約においては、双方の利益のために契約内容があとから修正されることは度々あります。

例えば追加発注したい場合や、それに応じて見積もりを変更したい時は契約内容を変えなくてはなりませんが、
現時点では、一度ブロックチェーンにデプロイしたスマートコントラクトを無効にするためには、
少し面倒な手続きが必要な上、その分の手数料が無駄になります。

スマートコントラクトは変更できない

契約内容が頻繁に変わる取引には向いてないと考えられます。

3. スマートコントラクトは最初に支払いをする必要がある

債務履行を自動化するために、参加者は契約成立時にスマートコントラクトに対して支払いを済ます必要があります。

スマートコントラクトは先払いシステム

契約内容に応じて、取引金額が決まりますが、
契約成立時に全ての取引において支払いを済ますとは限りません。

  • 買掛金や売掛金で成り立つ信用取引をしている場合
  • 慣習的に、後から支払われる他の売上から割り当てる場合
  • 売上は来年度分として計上したいが、作業はすぐ取り掛かりたいため契約は先に行いたい
  • そもそも小切手や手形で取引している

こちらも、もしかしたらスマートコントラクトの進化とともに柔軟に対応できるようになるかもしれませんが、
今の時点では現実的なユースケースではありません。

まとめると、今の段階でスマートコントラクトに移行できる取引の特徴は以下になります。

  • 付加価値が低い仲介者がいる(いなくても困らないし、いない方が双方の利得が大きい)
  • 契約成立時に支払いを済ませられる
  • 契約条件をプログラムコードにおこせる

スマートコントラクトで出来るユースケース

スマートコントラクトは、ブロックチェーンで扱えるデータの変化をトリガーとして決済するため、
現状のスマートコントラクトのユースケースはDeFi(分散型金融)が主流です。

以下にいくつかのユースケースを紹介します。

DEX(分散販売所)

仮想通貨を交換するために、実在する仮想通貨の取引所や販売所を介す代わりに、
「ADA/ETHやADA/BTCがXXXになったら交換する」という板取引をスマートコントラクトで作成できます。
また一部のDEXでは、プールにトークンを預けると、流動性の維持に協力した対価として
コインが報酬で支払われる流動性マイニングというプロトコルもあります。

DEX例:
Orion Protocol
Ray Wallet
Minswap

フラッシュローン

通貨を担保なしで借り受けし、その返済までをシングルトランザクションで実行するプロトコルです。

1分でも1秒でも担保なしで借りられる上に、
あらかじめ設定した条件に満たなければ処理は無効になり、手数料だけが発生します。

複数トランザクションを同時進行することで、

借り手は担保なしで高速でアービトラージ取引でき、
貸し手も貸し付けから返済までが一つのトランザクション内で保証されているため、
低いリスクで利子や手数料から利益を得られます。

フラッシュローン例:
dYdX
Aave

ブロックチェーンにデータ提供するオラクルサービスを利用

ChainLinkのように、現実世界のデータをブロックチェーンに持ち込むことで
スマートコントラクトの裁定条件として使用できます。例えばGoogleのBigQueryを
統合すれば、SP&500の価格を基準にコントラクトの裁定とすることも可能です。


オラクル例:
Charli3
Wolfarm alpha
Ergo

NFTの送信・売買・トークン化代行

NFTとはNon-Fungible Tokenの略で、非代替性トークンと訳されます。
トークン化されたデータは唯一無二であるため、
クリエイターは「この作品のオーナーは自分」と宣言することができます。
データ化出来るものであれば、文章でも音楽でもNFTを作れます。

NFTプラットフォーム例:
NFT-Maker
THEOS
ARTANO

スマートコントラクトの決済にはステーブルコイン

秒単位で価格が大幅に変わる値動きの激しい仮想通貨で支払ってしまうと、
契約成立時とトランザクション終了時で公平な取引が成立しにくいです。

そのため、スマートコントラクトではステーブルコインによる支払いがよく使われます。
ステーブルコインとは、現実世界の金融商品の価値と連動している仮想通貨です。
たとえばUSDと連動しているAgeUSDを使えば、実質米ドル建てでスマートコントラクトを
結んでいることにもなります。
(もしAgeUSD連動のタイムラグより早くオラクルからドル相場を引っ張ってこれれば、
それを狙った売買も出てきそう)

Automated Liquify Provisioning (自動流動性提供サービス)を使っても
契約成立時と終了時の支払い額を固定できます。

ステーブルコイン例:
Ardana
STASIS
AgeUSD
※ アプリケーションではないためリンクなし

オンラインカジノ

データを必要とせず、単純な計算処理のみで完結するため、
ギャンブルとスマートコントラクトの相性はいいです。

ギャンブル例:
RIDOTTO

他にも色んなユースケースがありますが、ここでは以上を代表として紹介しました。

エコシステムに他にどんなプロジェクトが参入しているか気になる方は
以下の画像から飛んだ先に詳細があります。

カルダノエコシステム

個人的には円と連動するステーブルコインが流通したら面白そうです。

課金システムを決済代行サービスからスマートコントラクトに移行すれば、

月額固定費 → スマートコントラクト管理サーバーの維持費に割り当て
決済手数料 → 決済額に比例しないため節約
個人情報 → ブロックチェーンなので自動でマスキング

エンドユーザーも仮想通貨を取引するプラットフォームがあるのが前提のため
まだまだ先になりそうですが、未来のカタチの一つかなと思いました。

誰がスマートコントラクトを作るの?

スマートコントラクトの導入が可能なユースケースであることが分かり、契約内容も決まり、
「さぁ、作ろう!」と思っても誰に依頼すればよいのか迷うと思います。

カルダノのスマートコントラクトのコア部分はPlutusで書かれていますが、
こちらはライブラリとして提供しているため、実行環境さえあればほとんどのエンジニアは書けます。

そのため、スマートコントラクトを書く層の幅は時間とともに広がっていくと思います。

  1. 初期段階はHaskellエンジニアがつくる
  2. ドキュメントやハウツーページが増えたら他の言語に知見のあるエンジニアがつくる
  3. UIがあるツールが充実してきたらエンジニア以外もつくる

UI付きのスマートコントラクト作成ツールとして、カルダノはMarloweを提供しています。
Marloweはスマートコントラクトを作るためだけに作られたHaskellをベースとした固有言語で、
画面上の操作でプログラミングの知識がなくても感覚的にスマートコントラクトを
作れるようになっています。

Marloweがどのように機能するか知りたい方は、「Marlowe Playground」で動きが
確認できるので遊んでみてください。

今は、ビジネスアナリストがいて、アナリストが設計した内容をエンジニアがコード化して、
テスターが動きを検証する流れが主流ですが、

今後はDeon Digitalが提唱した「ビジネスエンジニア」が活躍するかもしれません。

いわく、純粋なエンジニアでなくても、
トレーニングを受けたビジネスアナリスト(企画・法務部・管理部門)がいれば
スマートコントラクトを結べるそうです。

ビジネスアナリスト・エンジニア・テスター・ビジネスエンジニア

もしかしたらEXCELのように、授業で習ったり、専門学校も設立されるかもしれません。

テンプレートさえあれば使いまわしが出来るため、
ユースケースに応じたスマートコントラクト代行作成サービス、または契約作成アプリケーションを提供して
ノウハウを別途トレーニングするサービスも増えてくるかもしれません。

会計・給与・販売管理ツールの「勘定奉行」のように。

そのような事業活動をしているベンチャー企業があれば先行投資するのもアリかもしれませんね。

さいごにスマートコントラクトの懸念点を少し

スマートコントラクトを導入する上で懸念点もあります。

  • バグはないのか?
  • The DAO事件のような事はもう起こらないのか?
  • プロトコルがアップデートするたびに予期せぬ挙動はしないか?
  • 課税方法はどうなる?
  • スマートコントラクトで契約違反というものは発生するのか?

確かなことは、これらは全て解決できる課題で、

エンジニア、税理士、弁護士はこれから忙しくなりそう」ですね!

最後までご高覧いただきまして有難うございました。