以下は「The Truth about Smart Contracts – Jimmy Song – Medium」から。引用符を使っているところや、引用があることが括弧等によって明記されている部分以外は、私indivの個人の意見、もしくは私個人の解釈に依存した要約です。
これから「Ethereum批判」というカテゴリーで、Ethereumに対する否定的な意見をまとめていきます。
スマートコントラクトの真実
スマートコントラクトはスマートではない件
スマートコントラクトでできることは以下の通り。
- 自動、トラストレス、公平でのコントラクトの執行
- コントラクトの形成、執行、強制における仲介人の排除
- (おそらく)弁護士の排除
スマートコントラクトは自動執行契約くらいの意味であり、別にスマートではない(例えばAIが内蔵されているとか、一般のコードに比べて特別に堅牢であるとか、そういうわけではない)(これに関しては「AI is law」を標榜するDfinityも同様)。単にエスクローなど第三者が提供するサービスに依存せずに、取引ができるというくらいの意味である。
しかもこのトラストレス性は、「今の所」ブロックチェーン内でしか実現できない。例えば、このトークンを送ったら、代わりに別のトークンがもらえる、とか、一定のガス代を払えばこのプログラムを動かすことができるとか。
「今の所」ブロックチェーン内でしか実現できないのは、ブロックチェーン外の情報をブロックチェーン内に提供するオラクルというシステムが完成していないから。オラクルが部分的に実現できたとしても、そのオラクルは「このオラクルがブロックチェーン内に提供したデータを真実とする」というある種の妥協の上にしか成り立たない(はず)。
ただ、オラクルの実現自体が結構難しい。

スマートコントラクトは融通が聞かず、二次的考察や法の精神を考慮することもできない。コントラクトをトラストレスで行うということは、情状酌量の余地や、曖昧さを一切許さないということだ。
スマートコントラクトはEthereumの専売特許というわけでもない。ビットコインにもScriptと呼ばれるスマートコントラクト言語が存在する。ただ、Etheruemの場合、より複雑なコントラクトを表現することができる。ただし、複雑性は分析可能性とのトレードオフによって実現するので、たとえ複雑なものを実現できるとしても、そのためのコストが非常に高かったり、セキュリティの脆弱性を回避しきれないのだとすれば、利益とコストを天秤にかける必要がある。
スマートコントラクトの難しさ
チューリング完全のスマートコントラクトをセキュアにするというのは、プログラムからバグを無くすことに等しい。しかし、このように細心の注意を払って記述されなければならない言語を、初心者が書いているというのが現状。これはスマートコントラクトに限らず、アルゴリズムも同様で、暗号学の世界では仕様が公開されている暗号が最もセキュアであるが(公開されているにも関わらず破られない)、暗号通貨の世界ではなんちゃってアルゴリズムが持て囃されたりする。
世の関心が宙を待っていて、それでもまだ利益が見込める状態なので、地に足つけた地道なプロセスを踏もうとする人口が少ない。
ビットコインの場合、チューリング完全性を捨てることでこの問題を解決した。取り得る状態の数を減らし、列挙と調査をより簡単にした。
Ethereumの場合、スマートコントラクトの記述者に負担を押し付けた。コントラクトが意図したとおりに動くか否かはコントラクトの記述者次第だ。
ビットコインに寄った書き方ではあるが、間違ってはいない。個人的にはスマートコントラクト(に預けられる資金)の管理責任は、スマートコントラクトの記述者が追いきれるものではないので、Ethereumとスマートコントラクトのシステムが良くないというよりも、「技術的に未熟なものに対して資金が集まりすぎる現状」のせいだと思う。これは暗号通貨に限らない話で、とにかく現状、金は余っているところでは余りまくっているので、個人も機関もリターンのありそうなところに打ち込んでいるわけで、スマートコントラクトの場合、それが顕著な形で現れるだけのこと。
スマートコントラクトはコントラクトではない
Code is lawの精神はEthereum上のコントラクトこそが最終的に判断を下す主体なのであって、コントラクトに優越してステートを変更できる物は存在しない、というもの。
これは当然ながら、コントラクトの挙動はコントラクトの記述者に依存してしまい、下手なコードを書いてしまうとThe DAO事件のようなことが起こる。
ここは判断が分かれるところだろうが、The DAOのクラッカーは、記述されたコントラクトを「記述者が意図しない形で使った」ことには変わりないとしても、コントラクトに従って資金を奪っていったわけで、広義の意味ではクラッカーではないと言える。
しかしEthereumは資金を取り戻すためにハードフォークを行った。これによりEtheruem Classicが生まれた(厳密にはEthereum Classicこそが本流のEthereumとも言える)。
おそらくEthereum foundationの人間の資金も入っていたであろうThe DAO救済のためにハードフォークを行ったせいで(これを救済しないとEthereumそのものの存続が危ぶまれる状況であったとはいえ)、EthereumからImmutabilityとCode is lawの性質は事実上失われた。
開発者はチューリング完全の特性を使うのを止めた。セキュアに開発するのが難しいからだ。現在広く使われているERC20、ERC721トークンは、チューリング完全性がなくても実現できる。
情報の守備範囲のスケーリング問題
中央集権化された主体によって執行されるスマートコントラクトはトラストレスではない。スマートコントラクトを実際にトラストレスにするには分散化されたプラットフォームが必要になる。
ここで問題になるのは、デジタルとフィジカルをどうリンクさせるか、ということ。デジタル上で所有権の移転が行われた場合、どのようにすればフィジカルの所有権も移転できるのか?しかもトラストレスでシームレスな形で。
これはかなり難しい。結局、どこかしらの機関が法的拘束力を持って認定する必要がある。このあたりは暗号通貨を用いた送金におけるファーストワンマイル、ラストワンマイルの問題と同じ。個人的に注目しているイスラーム金融によるトークンの包摂も同じ課題がある。
となると、結局デジタル(厳密にはブロックチェーン)内で完結するものがユースケースとしては圧倒的に有利な立場にいることになる。ビットコインの場合、法定通貨との交換時にはオフチェーンの処理が必要とはいえ、BTCそのものに価値を見出す人々が一定数いる以上、整数値の羅列(=プライベートキー)に価値が生じ、その生じた価値の移転をブロックチェーン内部で完結する形で行うことができる。
一方で、ブロックチェーンの内外を繋ぐためには、オラクルや中央集権的な機関が必要になる。例えば証券トークンは、証券とトークンを法的に厳密に結びつける機関が必要。個人的には「取扱情報量のスケーリング」と呼んだりするが、情報のスケーリングはデータ処理のスケーリング以上にハードルが高い。
ちなみに、これはDAppsと呼ばれるゲームでも同じ話で、トークンで表現されていれば、プラットフォーム間を移動できたり、アイテム自体がなくならないと言っても、プラットフォーム間で何らかの中央集権的な取り決めがないと意味がないし、アイテム自体も、データがアイテムとして現れる場がなければ意味がない。プラットフォーム自体はパブリックチェーンであるEthereum上で誰でも作ることができるけど、ここでも中央集権的な(というよりも恣意的な)思惑に基づいてゲームが設計されてしまうと、多くの人にとって受け入れられるプラットフォームにはならない。このあたりはDEXにとっての0x Protocolが登場して、ゲームプラットフォーム用のプロトコルが発明され、ユーザーと開発者の合意がある部分において既に達成された形で、プラットフォームの構築が行われ、全プラットフォーム共通アイテムと各プラットフォーム固有アイテムが峻別されて扱われるようになると面白いかもしれない。
トークンの射程範囲
ブロックチェーン内外をつなぐブリッジがない限り、トークンはただのデータにすぎず、トークンが所有権や証券を表現していることを保証する強力な主体なしには機能しない。
Ethereum上で発行されたトークンが影響を及ぼせるのは、あくまでもEtheruem上で記述されたコントラクトのなかで、そのトークンによる干渉(状態の変化)を受け入れたものに限られるわけで、ブロックチェーン外の資産に対してトークンが有する影響はゼロ。もちろんSECなり金融庁なりが、トークンと実資産のリンクを許可し、証券会社等がトークンと実資産の繋がりを保証し、トークンの効力を認めさせることは可能だが、それは別にトラストレスでも何でもない(だからといって意味がないわけではない)。
このあたりの理想→現実のフェーズを牽引していくのは(残念ながら?)証券トークンと法定通貨担保のステーブルトークンだと思う。
ついでに言うと、現実的な解を採用するのは敗北でも悲劇でもなくて、国家や法という人類の叡智を積極的に取り入れるのは別に悪いことではない。そのこととビットコインのような分散的な通貨を支持するのは矛盾ではない。
まとめ
ここで参照している記事の筆者であり、ビットコイン開発者のJimmy Song氏は、「結局、Turing completenessではなくTuring-vulnerableだ。チューリング完全はすぐに手に負えなくなるし、セキュアにするのがとても難しい」とまで言っている。
Ethereum開発者もこんなことは百も承知でそのうえでやれることをやろうとしているのはEthresearchやRedditを読んでいると分かるし、チューリング完全万歳という態度でもないと思うので、そのへんはスケーリングも含めて柔軟に変わっていくと思われる。