チューリング完全性とは何か、イーサリアムがそれを必要としたのはなぜか、そしてビットコインがそれを回避した理由は何か
金融業界で働いている友人が以前、なぜイーサリアムはブロックチェーン上で金融アプリケーション全体を実行できるのに、ビットコインは基本的にあるアドレスから別のアドレスへ送金することしかできないのかと私に尋ねたことがある。「どちらもブロックチェーンなのに、実際の違いは何なんだ?」と彼は言った。
チューリング完全性について説明しようとしたのですが、彼の目がうつろになってしまいました。そこで、たとえ話を使って説明し直しました。ビットコインは自動販売機です。お金を入れてボタンを押すと、特定の商品が出てきます。本来の目的以外には何もできません。イーサリアムはシェフがいるキッチンです。シェフにどんなレシピと十分な材料を与えても、シェフは何でも作ることができます。「とろみがつくまでかき混ぜる」といったループ処理、判断(「塩辛すぎたら水を加える」)、創造性(「残った材料で即興でデザートを作る」)など、シェフはどんな指示にも従うことができます。自動販売機はそうはいきません。
その例えは完璧ではない。コンピュータ科学者なら、私が単純化しすぎた点をいくつか指摘するだろう。しかし、そのおかげで友人は「一体誰が自動販売機になりたいと思うだろうか?」という的確な質問をすることができた。
その問いこそが、暗号通貨におけるチューリング完全性論争の核心である。セキュリティ対柔軟性。予測可能性対パワー。ビットコイン対イーサリアム。そして、厄介なことに、どちらの主張も正しいというのが答えなのだ。
このアイデアの起源と、1936年の数学論文が今なお重要な理由
アラン・チューリングは1936年に「計算可能な数について」という論文を発表した。当時23歳だった。その論文の中で、彼はまるで玩具のようなシンプルな機械について説明した。セルに分割されたテープ。記号を読み書きするヘッド。読み取った内容に基づいてヘッドに何をすべきかを指示するルール。テープ、ヘッド、ルール。それが機械のすべてだ。
今でも鳥肌が立つのは、この部分です。チューリングは、この途方もなくシンプルな機械が、あらゆるコンピュータが計算できるあらゆるものを計算できることを証明しました。一部の計算ではなく、あらゆる計算です。あなたのスマートフォンも今まさにテープヘッド演算を行っています。ChatGPTを実行しているサーバーもそうです。あなたの車のチップもそうです。彼はこれらすべてを、地球上に電子計算機が一つも存在しなかった1936年に証明したのです。この論文は90年近く前のものですが、今でも世界中のコンピュータ科学科で1学期目に教えられています。
誰かがシステムを「チューリング完全」と言うとき、それはチューリングのテープマシンをシミュレートできるという意味です。ループを実行したり、データに基づいて判断を下したり、メモリにデータを保存したり、あらゆるアルゴリズムを実行したりできます。あなたのノートパソコンはチューリング完全です。ポケット電卓はそうではありません。そして、私が人に話すのが好きな面白い事実があります。Minecraftのレッドストーン回路は技術的にはチューリング完全です。人々はゲーム内で実際に動作するコンピュータを構築しました。実用的なコンピュータではありませんが、動作するコンピュータです。

ビットコインではこれがどのように展開されるのか:サトシが制限を選んだ理由
サトシは、意図的に単純なプログラミング言語であるBitcoin Scriptを使ってビットコインを構築しました。署名の検証、マルチシグウォレットの処理、時間条件による資金のロックなど、基本的な機能しかありません。ループ処理も、複雑な分岐処理も、トランザクション間で引き継がれる状態もありません。
なぜこれが重要なのかを初めて理解したのは、イーサリアムのDAOハッキング事件について読んでいた時でした(これについては後ほど触れます)。再帰関数呼び出しによってスマートコントラクトから1億5000万ドルが流出したのは、開発者が想定していなかった無限ループでコードが自身を呼び出すことができたためです。ビットコインでは、このようなハッキングは不可能です。あり得ないというレベルではなく、不可能です。ビットコインスクリプトは自身を呼び出すことも、ループすることも、再帰することもできません。イーサリアムに1億5000万ドルの損失をもたらしたようなバグを表現するには、言語の制約が大きすぎるのです。
その制約こそが特長なのです。すべてのビットコインスクリプトは予測可能な形で終了します。スクリプトを読めば、その動作を正確に把握できます。予期せぬ事態や予期せぬ動作は一切ありません。1兆ドルを超える価値を持つネットワークを保護する場合、「退屈で予測可能」であることは弱点ではなく、設計上の選択なのです。
ヴィタリックが築き上げたもの、そしてそれがすべてを変えた理由
ヴィタリック・ブテリンは、2013年にイーサリアムのホワイトペーパーを発表した当時19歳だった。彼の問いはシンプルかつ斬新だった。「ブロックチェーン自体がどんなプログラムでも実行できたらどうなるだろうか?」単に「AからBへコインを送る」だけでなく、コンピューターができることは何でもできるとしたら?
イーサリアムのホワイトペーパーが公開されたのは、私が大学生の頃でした。ビットコインのフォーラムで誰かが共有していたPDFで読みました。コメントの半分はヴィタリックを天才だと称賛し、残りの半分は彼が構築しているシステムはすぐにハッキングされるだろうと指摘していました。どちらも正しかったのです。
イーサリアムは2015年に、チューリング完全性を実現する2つの要素を備えてリリースされました。Solidityはスマートコントラクトを作成するためのプログラミング言語です。ループ、条件分岐、状態管理、関数呼び出しなど、必要な機能がすべて揃っています。イーサリアム仮想マシン(EVM)は、ネットワーク上のすべてのノードでこれらのコントラクトを同時に実行します。これら2つを組み合わせることで、開発者はあらゆるコードを自由にデプロイできるようになります。
そのたった一つの決定こそが、DeFiが存在する理由であり、NFTが存在する理由であり、DAOが存在する理由であり、単一企業が管理していないプログラムを通じて数十億ドルが流れる理由なのです。UniswapからAave、OpenSeaに至るまで、暗号通貨におけるあらゆる興味深いアプリケーションは、イーサリアムが任意のコードを実行できるからこそ実現可能なのです。
しかし、ヴィタリックは賭けに出た。柔軟性の力が複雑さのリスクを上回ると賭けたのだ。2016年のDAOハッキング事件はその賭けを厳しく試した。毎年数十億ドルもの損失をもたらすDeFiの悪用事件は、今もなおその賭けを試している。そしてビットコインコミュニティは、こうした損失を指摘し、「だからこそ私たちはシンプルさを貫いてきたのだ」と繰り返し主張している。どちらの言い分にも一理ある。
停止問題とガス料金が存在する理由
私が初めてそれを理解したとき、夜も眠れなかったのはまさにこの部分でした。
チューリングは1936年の同じ論文で、ある厄介な事実を証明した。それは、いかなるアルゴリズムも、任意のプログラムを見て、それが実行を終了するか、あるいは無限ループに陥るかを確実に判断することはできない、というものだ。これは、未解決の技術的な問題ではない。数学的に不可能なことなのだ。証明済み。完了。どんなに高度なコンピュータであっても、すべてのプログラムについて停止問題を解決することはできない。
私のノートパソコンでは、無限ループはただの迷惑な現象です。Ctrl+Cを押して、日常に戻ります。しかし、ブロックチェーンでは、無限ループは致命的な事態です。すべてのノードがすべてのスマートコントラクトを実行します。もし1つのコントラクトが停止しなくなると、そのブロックチェーンを実行している地球上のすべてのノードがフリーズしてしまいます。ネットワークは停止してしまうのです。
イーサリアムの解決策は単純明快だが効果的だ。それは「ガス」という概念だ。あらゆる計算にはガスが必要となる。トランザクションにガスを紐付ける。ガスがなくなると、コードは停止する。処理が完了していたとしても、送金途中であっても関係ない。ガスがゼロになれば、実行は終了する。これがETHのガス料金が変動する理由だ。単純な送金なら21,000ガス、複雑なDeFiスワップなら200,000ガス、オンチェーンアートを用いたNFTミントなら50万ガス。各ノードが実行する計算量に応じて料金が発生するのだ。
ビットコインはこの問題を見て「無理だ」と答えた。ループを書くことはできないし、ループに陥ることもない。すべてのスクリプトは必ず終了する。ガスメカニズムも不要だ。言語の制約が大きすぎて「永遠」を表現できない。
2016年6月:理論が現実の1億5000万ドルになった時
暗号におけるチューリング完全性に関するあらゆる議論は、最終的にこの段階にたどり着く。
DAOは、イーサリアム上で運営される1億5000万ドルの投資ファンドだった。スマートコントラクトとコミュニティによるガバナンスで、資金が流入し、投票によって資金の出所が決定される。コードは複雑で、ループ、条件分岐、コントラクト間呼び出し、実行中に変化する状態など、チューリング完全性が許容するあらゆる要素が含まれていた。
誰かが脆弱性を発見した。出金機能は最初にETHを送金し、次に残高を更新する仕組みだった。攻撃者は出金機能を呼び出し、支払いを受け取ったが、残高が更新される前に、その機能が再び自身を呼び出した。そしてまた、また、またと。再入性。開発者が意図していなかったループが発生し、サイクルごとに資金が流出した。
ビットコインでこのようなことが起こるでしょうか?いいえ。ビットコインスクリプトは自身を呼び出すことができません。他のスクリプトを呼び出すこともできません。ループすることもできません。ビットコインを退屈なものにしている要素こそが、この特定の攻撃を不可能にしているのです。
イーサリアムのコミュニティは、チェーンをハードフォークして盗難を覆すことを投票で決定した。この分裂によってイーサリアムクラシックが誕生した。開発者たちはそこから学びを得た。再入防止機能が標準となり、「チェック→効果→相互作用」パターンが絶対的な原則となった。しかし、根本的な真実は変わらなかった。チューリング完全なコードであっても、作成者が予期しなかったバグが必ず含まれる可能性がある。これはイーサリアムの欠陥ではなく、数学的な原理の結果なのである。

ビットコインの制約が緩和されつつある:TaprootとBitVM
ビットコインの場合、チューリング完全とチューリング不完全の境界線は、以前ほど明確ではなくなっている。
Taprootは2021年11月にリリースされ、Bitcoin Scriptの機能を拡張しました。より複雑な条件付き支出、シュノール署名によるプライバシーの向上、トランザクションの条件が実行されるまで隠蔽されるメルケル化抽象構文木などが追加されました。チューリング完全性にはまだ達していませんが、以前よりも表現力が向上しています。
2023年に提案されたBitVMはさらに一歩進んだものです。これは、任意の計算をオフチェーンで実行し、その結果をビットコイン上で検証するシステムを説明しています。つまり、実際の計算は別の場所で行われ、ビットコインは誰かが結果に異議を唱えた場合にのみ介入する、という仕組みです。理論的には、これにより、スクリプト言語自体を変更することなく、特定のユースケースにおいてビットコインを実質的にチューリング完全なものにすることができます。
BitVMについてビットコイン開発者と話をしたところ、興味深い反応が得られました。彼らはその機能に興奮している一方で、リスクを恐れているのです。ある開発者はこう言いました。「私たちはこれを急ぐつもりはありません。人々はこのシステムに1兆ドルもの資金を預けているのです。もし私たちがもっと高度な機能を持たせようとしてシステムを壊してしまったら、誰も私たちを許してくれないでしょう。」ビットコインDeFiを明日にも実現したい人にとっては、この慎重さは苛立たしいものです。しかし、あなたがこのシステムに1兆ドルもの資金を預けている人間であれば、安心できるでしょう。
いずれにせよ、方向性としては表現力の向上を目指している。Taprootは既に可能性を広げており、BitVMはそれをさらに拡大するだろう。しかし、ビットコインがイーサリアムのようになることを期待してはいけない。両者の文化はあまりにも異なっているからだ。
そもそもなぜ全ての新しいブロックチェーンはチューリング完全性を採用したのか?
実際に議論に決着をつけたのは、チューリング不完全なブロックチェーンはもはや誰も構築しないということだ。Solana、Cardano、Polkadot、Avalanche、BNB Chain。すべてチューリング完全であり、任意のプログラムを実行できる。市場はプログラマビリティが勝利すると判断し、今や唯一の課題は、チューリング完全なシステムをいかに高速化、低コスト化、そして安全にするかということだけになっている。
各チェーンはそれぞれ異なるトレードオフを採用しました。イーサリアムはEVMとSolidityを採用(最大のエコシステム、L1の手数料が最高)。ソラナはRustを使用して並列実行のためのSealevelを構築(高速だが開発が難しい)。カルダノはHaskellと形式検証を選択(数学的に厳密だが普及が遅い)。しかし、スマートコントラクト、DeFi、NFT、DAO、その他カスタムロジックを必要とするあらゆるものを実行したいという理由から、いずれもチューリング完全性には賛成しました。
セキュリティ上の問題は深刻だ。DeFiの悪用による被害額は毎年数十億ドルに上る。DAOのハッキング事件はほんの始まりに過ぎない。しかし、業界はプログラマビリティの利点がリスクを上回ると結論づけた。当初は意図的に制限されたチェーンであったビットコインでさえ、TaprootやBitVMの登場により、より表現力豊かな方向へと移行しつつある。
私は暗号通貨の世界に長く身を置いており、両方のタイプのブロックチェーンを幅広く利用してきました。ビットコインのトランザクションは毎回期待通りに承認され、イーサリアムのスマートコントラクトもデプロイしましたが、Solidityは自分でも驚くような複雑なコードを書けるため、予想外の動作をすることもありました。これらの経験が私の考え方を形成しました。
議論の焦点は、チューリング完全性が良いか悪いかという点ではなく、何が必要かという点にある。最大限のセキュリティと予測可能性を備えたデジタル決済システムを求めるなら、ビットコインの設計は理にかなっている。金融アプリケーション、ゲーム、IDシステムなど、独自のロジックを必要とするものを構築したいのであれば、チューリング完全性が必要となる。現在、暗号通貨が魅力的な理由のほとんどは、19歳の若者がリスクを冒す価値があると判断したからこそ実現したのだ。
UniswapやAave、その他のDeFiプロトコルを使うたびに、私はこのことを考えます。私が行うすべてのスワップは、チューリング完全な仮想マシン上で実行されるコードです。すべてのトランザクションには、誰も予期していなかったバグによって契約全体が空になるという理論的なリスクが伴います。それでも私はこれらのプロトコルを使います。なぜなら、私にとってその有用性はリスクに見合うものだからです。しかし、リスクが存在することを決して忘れません。そして、ビットコインが別の道を選んだこと、そしてその道には独自の知恵があることも決して忘れません。自動販売機はあなたのお金を盗むことはありません。シェフはキッチンを燃やすことはできます。