CoinPostで今最も読まれています

スマートコントラクト言語にチューリング完全性は本当に必要か?ーSolidityの課題と代替案

画像はShutterstockのライセンス許諾により使用

チューリング完全性の必要性と現状
スマートコントラクト言語にチューリング完全性は必要なのか、Ethereumの開発言語であり、シェアの大半を握るSolidityと、同じくWaves Platformの新しい開発言語であるRIDEについて議論をしていきます。

※本記事は海外著者からの寄稿記事となります。

スマートコントラクト言語にチューリング完全性は本当に必要か!?ーSolidityの課題と代替案

誰しもに、お気に入りの靴や、好きな食べ物があるのと同じように、誰にでもお気に入りのプログラミング言語があるでしょう。私がこの記事を書いているのは、あなたの好きな言語を諦めて欲しいからではありません。(どうか、私を信じてください、私はそんなことを言おうとは夢にも思いません)。

その代わりに、私は、私たちが一緒に旅をして、その旅が私たちに考える機会をもたらしてくれることを望みます。本稿では、「チューリング完全性」について議論し、スマートコントラクト開発におけるその有用性を評価するとともに、代替案を検討し、結果として同じ結論に到達できる期待を持っています。

※ネタバレ:本稿の結論は、EthereumのSolidityにスマートコントラクト開発言語を独占させるのは、ひどく愚かな考えである、ということです。

それでは始めましょう。

チューリング完全性とは

チューリング完全性についてよくご存知でない方に向けて、とても簡潔な説明をしたいと思います。過去に聞いたことがあるが、詳細を忘れてしまった方にとっては、記憶を呼び戻す手助けになると思います。

アラン・チューリングは数学者で、「チューリングマシン」と呼ばれる仮想マシンを発明しました。この仮想マシンは、無限量のメモリにアクセスし、メモリー内でいつ書き込み、読み取り、移動すべきかを決定するプログラムを実行します。

また、どのような条件下で終了し、次に何をすべきかについてもプログラムが指示します。これらの条件に合ったプログラムを記述できるプログラミング言語はチューリング完全言語と呼ばれています。アルゴリズム(プログラムの実行の結果なんらかの結果が得られる)を記述できることがチューリング完全言語の条件でもあります。

注釈:一般的にチューリング完全なマシンが出来ること/出来ないことを整理すると以下のようになります。

チューリング完全なマシンが出来ること:

・あらゆる種類の計算可能な関数を実装する能力を持つこと。

・自ら強制的に終了しない関数を常に含むこと。

・(理論的に)無限量のメモリーを使用する関数を含むこと。

チューリング完全なマシンが出来ないこと:

・ループ、再帰、自身で強制終了しない他のgoto変数をサポートしないこと。

Tiobe Indexによると、昨今、人気のプログラミング言語のほとんどがチューリング完全(または、必要に応じてチューリング完全になる能力を持つ)です。意図的にチューリング不完全な言語は、BicoinScriptやCoq(機械的に証拠をチェックする相互作用の定理プログラム)のような特定の領域に特化したプログラミング言語です。

これらの言語は、意図的にセキュリティーを向上させる特性を持たせることを目的に、または再帰なしでも機能できるが故に、言語に再帰を備えていません。(これらのチューリング不完全な言語の開発者達は、チューリング完全な環境を作ること自体が過剰だとも考えています。)

基本的に、チューリング不完全な言語は、ある特定の目的に対して専門化されている一方で、チューリング完全な言語は、幅広く様々なケースに対応できる多目的なツールです。最初は「何にでも、便利なチューリング完全な言語を使うべきですよね?」と思うかもしれません。

実際に、とても柔軟性があります。このような多目的なツールは多くの状況で便利であり、必要に応じていつでも使えるよう備え持っておくのは良いことでしょう。しかし、自動車を修理するような(とても特定な)状況では、目的に応じた、専門的で、適切なツール(チューリング不完全な言語)を持っている方が良いでしょう。

簡潔に述べると、「チューリング完全な言語はより広く応用できるが、チューリング不完全な言語は特定の用途に適している」ということです。皆さんが、どのように考えるかは分かりませんが、個人的にはスマートコントラクトは専門化された特定の用途の一つだと考えています。

あなたは今、「でもなぁ・・・」と思っているかもしれません。そして、「スマートコントラクトには非常に多くの種類があり、現時点では、その大部分はSolidityで書かれていて、今のところ特に問題がないからなぁ・・・」と考えていることでしょう。

とても素晴らしい指摘ですね!

私は、あなたがその点を持ち出してくれて、とてもうれしいです。

スマートコントラクトとSolidityとチューリング完全性

このような複雑な問題は、常に専門家に頼るのが最善ですよね?そこで、ドイツのUniversity of Applied Science Ruhr West(ルール・ウェスト応用科学大学)のComputer Science Institute(コンピューターサイエンス学会)の論文を用いて解説します。

「スマートコントラクト言語はチューリング完全である必要があるか?」と題されたこの論文は、本稿の議題について、とても興味深い統計結果を数多く提供しています。

しかし、これらの統計を深く掘り下げる前に、一般的に認知されているSolidityがチューリング完全な言語であるが故に存在する欠陥のいくつかを簡単に確認しましょう。

EthereumのSolidityは欠点として、The DAOのハッキング(※当時の時価で150億円ものETHが盗難被害に)を可能にしたセキュリティ上の欠陥(再帰呼出の悪用)や、低品質なスマートコントラクトへの攻撃可能性(リエントランシ(再入)攻撃)、そしてコントラクトを実行するための手数料が事前に正確に予測できず、コントラクトの実行が途中で停止してしまうという課題(停止問題)を抱えています。

これらの問題が存在する理由は、Solidityがチューリング完全な言語であることに帰結しますが、それでも、SolidityとEthereumは、そのチューリング完全性から、多くの利点を得ることができているので、これらの問題点を許容するだけの価値はあるのではないでしょうか。

本当にそうでしょうか!?

残念ながら、ドイツのルール・ウェスト応用科学大学のメンバーは異なる結論を導き出しました。彼らは、53,575ものスマートコントラクトをダウンロードし、それぞれのコーディングタイプを分析しました。彼らは論文の中で、「研究で提議された問(チューリング完全性は必要か?)に答えることを目的に分析を実施しました。

この分析では、抽出(ダウンロード)されたスマートコントラクトで使用されているフロー制御のメカニズムを識別し、それぞれのスマートコントラクトを対応する計算可能クラスに割り当て、チューリング完全性がコントラクトを実装する上で、本当に必要とされる割合をチェックしました。」と説明しています。

その結果は以下の通りです

35.3% – forループとプリミティブ再帰関数を使用。前述の停止問題に関連するトラブルはこのタイプの関数と関係性あり

この35.3%の詳細は以下の通りです

・24.8%:forループを使用する認証済みコントラクト

・3.6%:再帰関数を使用するコントラクト

・6.9%:チューリング完全なプログラミング言語を必要とするフロー制御のメカニズムを使用するスマートコントラクト

このデータの観察方法には2つの方法があります。厳密に言えば、全体の6.9%(53,575中、約3,697)だけが、スマートコントラクトとして機能するために、技術的にチューリング完全な言語を必要とします。

もう少し寛容に捉え、全体の35%がチューリング完全な言語を必要としていると仮定しても、まだ少ないと感じるでしょう。私は、仮に全体の半数がチューリング完全性を要求したとしても、依然としてセキュリティ問題とのトレードオフを考える価値ががない、とまで言い切ります。それでは、なぜSolidityはチューリング完全なのでしょうか?

Solidityの開発はJavascript、C++、Python、PowerShellといった他のチューリング完全な言語の影響を強く受けています。実際のところ、Solidityがチューリング完全な言語になる意図を持って開発されたと言い切るのは、少し無理があるかもしれません。

結局のところ、メリットが活用されていないのに、なぜわざわざプログラミング言語に欠陥を持ち込むのでしょうか。コーネル大学の博士課程(PHD)の学生であるPhilip Daian氏は、The DAOのハッキングの後、ブログ記事(この記事はとても興味深く素晴らしい)において「技術的にはEVMは意図した通りに動作していたのですが、Solidityがセキュリティ上の欠陥をコントラクトに持ち込んでしまいました。コミュニティだけでなく、言語の設計者自身がこのSolidityの欠陥を見落としていました。」と書きました。

代替案としてどのようなオプションが考えられるのか

独占状態は市場にとって悪く、その成長を妨げます。私たちは日頃、独占に反対し、その状態を解消しようとする政府の行動を支持していますが、なぜかスマートコントラクトに関しては、独占を受け入れようとしているフシがあります。このことを念頭に置いて、私たちの目の前にある2つの未来の可能性について言及します。

1つ目の可能性は、私たちがこれまでのSolidityに関する経験を活用し、そこから成長していくことです。私たちはSolidityを拡張し、Vyper(Solidityの次に使用されることを目的に設計されたチューリング不完全な言語)のような他の言語を拡張し、チューリング完全な言語がスマートコントラクトの世界にもたらす明らかな欠陥を無視し続けるのです。

2つ目の可能性は、ポートフォリオの分散化です。私は冒頭で、「好きなプログラミング言語を諦めるように説得する気はない」と言いましたが、私は嘘をつきました。現在のスマートコントラクトコミュニティにおける問題は、誰もがSolidityを使用するようにしつこく主張していることです。本質的に、私は必要性によって主張されるべきであり、ただ望むから主張されるべきではないと考えます。

ここで、スマートコントラクトの世界で使用されるプログラミング言語に関して、Solidityと真剣に競争しようとする代替候補について話をしましょう。その1つはWavesのRIDEです。

Wavesがこの戦いで重要な競争相手だと思う理由はいくつかあります。主要な理由の一つは、Wavesは2016年に登場し、機能するシステムを構築し、本日まで運用を続けているという事実です。この業界では頻繁に「新会社や新プロジェクトに関する憶測記事」を目にし、それらが「業界に革命を起こす」と誇張されます。Wavesは、誇張ではなく、実際に戦えるだけのプロダクトラインナップを有しています。

Wavesは独自のブロックチェーン、マルチプラットフォーム対応のウォレット、カスタムトークンの発行システムと分散型の取引プラットフォーム、そしてdAppsとの接続や署名を管理するためのセキュアなブラウザ拡張機能、そしてdAppsを構築する為に設計された専用プログラミング言語RIDEと洗練された開発ツールを有しています。競合としてWavesを挙げたのは、Wavesが競争力があり、真剣に取り組んでいる会社であること、そして、WavesのRIDEが、Solidityの代替手段として競争力のある選択肢であるからです。

RIDEは意図的にチューリング不完全な言語であり、開発者が(メリットが少ないのにリスクが高い)ナンセンスな環境でスマートコントラクトを構築することがなくなるように設計されています。

RIDEはこれを実現するために、2つのアプローチを採用しています。まず、RIDE言語はdAppsの開発に必要な基本的なスクリプト関数を提供します(同時にセキュリティ関連のエラーを減らすことが可能です)。次に、RIDEは再帰や複雑なループをサポートしていないため、セキュリティーの欠陥を簡単にテストすることが可能です。

また、再帰をサポートしないということは、セキュリティ上の欠陥をテストすることに役立つだけでなく、Wavesのブロックチェーン上でスマートコントラクトの実行に必要な手数料を計算する際にも重要です。再帰がないことで、プログラムの実行にかかる時間や複雑性を事前に計算できるため、実行前にコストを見積もることが可能です。そして、Ethereumとは異なり、実行されなかったスマートコントラクトの呼び出しに手数料が徴収されることがないのです。

あなたは今、「RIDEは意図的にチューリング不完全であるため、EVM向けに作成されたスマートコントラクトの大部分を処理できない」と考えているかもしれませんが、ドイツのコンピュータ科学者が以前に行った調査結果を振り返りましょう。検証された多数のスマートコントラクトのうち、実行の為にループを使用し、チューリング完全性を必要としたのは僅か7%未満でした。

この記事のメイントピックに対する、私の真剣な疑問は、「全体の7%にも満たない数のスマートコントラクトがSolidityにおけるチューリング完全な機能を利用しているに過ぎない状況で、なぜ私たちは(問題点が多い)チューリング完全な言語であるSolidityを使っているのだろうか!?」というものです。

論文:「Self-Reproducing Coins as Universal Turing Machine」によると、これらのチューリング完全なスマートコントラクトを必要とするdAppsの7%は、(理論的には)チューリング完全な機能を、多数の異なるトランザクションに亘って実装することで対応できるとしてます。彼らの研究では、UTXO(未使用のトランザクションアウトプット)モデルを利用した、小さく特定のセットの言語機能を使用し、シンプルなチューチング完全なマシンを構築することができました。

これらのトランザクションは、安全のためにインプットとアウトプットの両方のトランザクション状態によって厳しく制限され、無制限ループは意図的に実行不可能にされていました。同じ方法で、チューリング不完全なプログラミング言語としてのWavesのRIDEは、チューリング完全が根源的に内包する問題を引き起こすことなく、チューリング完全なスマートコントラクトを記述することが可能です。

Ethereumで確認できるこれらの問題は、何か大きな変更が行われない限り、悪化するのみです。既に今後数年間のロードマップは示されているため、この点において重要な変更を行う為の取り組みが行われていないことは既に分かっています。最終的にはPoWではなくPoSに移行する予定で、セキュリティを強化したければVyperを使って書き込むことも可能です。

しかし肝心なのは、チューリング完全性がEthereumのセールスポイントだったということです。Ethereumの創設者である、Vitalik Buterin氏はEthereumのホワイトペーパーで次のように認めています

チューリング不完全性はそれほど大きな制限ではありません。私たちが内部で検討したすべてのスマートコントラクトの例の中で、ループを必要としたものはこれまでに1つだけであり、そのループさえも1行のコードを26回繰り返すことで取り除くことができました。

チューリング完全性の深刻な影響と限られた利点を考えると、なぜ、チューリング不完全な言語をEthereumは持たないのでしょうか。しかし、実際には、チューリング不完全性は、この問題に対する適切な解決策とは言えません。」

読者の皆さん、私たちは一緒に1つの長い旅を終えたところですが、開発者にとって、より重要なことは何でしょうか。それは、「ハッキングや悪意のある行動に自動的に対抗でき、明確で簡潔なコードを書くことが出来ること、あるいは、より品質の高いチューリング完全な言語で、コードを書くことが出来ること」ではないでしょうか?

EthereumとSolidityがスマートコントラクトとdAppsの領域で、新しい世界への扉を開いたことは否定できませんが、私たちがプログラミング技術を多様化し、現在の独占状態を打破するのにあまりにも長い時間を掛けてしまいました。

開発者にとって、代替手段としてチューリング不完全な言語へ切り替えることはそれほど大事ではありません。今後の記事で、コードサンプルや全体のプロセスを紹介して説明を行う予定です!是非、ご注目を!

※本稿の原文はHackernoonで公開されたもので、寄稿記事として筆者の許諾を得て、日本向けに再編集を行っていとなります。

Should Smart Contracts be Non-Turing Complete?

オリジナル記事はこちらから
CoinPost App DL
注目・速報 相場分析 動画解説 新着一覧
07/27 土曜日
09:45
3兆円運用の米ミシガン州の退職年金基金、10億円以上のビットコイン現物ETF保有
仮想通貨ビットコインの現物ETFに対する米国の年金基金からの需要は増加傾向にある。運用資産総額3兆円に相当するミシガン州の退職年金はウィスコンシン州とニュージャージー州のジャージー市の年金基金に続き、ビットコインETFの株を保有していることを報告した。
08:10
マスク氏のX(旧ツイッター)、ビットコインなどの仮想通貨絵文字表示を削除か
イーロン・マスク氏がオーナーのX(旧ツイッター)は、ビットコインなどの仮想通貨絵文字表示を削除した。ドージコイン擁護のためか。
07:35
BitwiseのETH現物ETFの横断幕、NYSEに掲揚
仮想通貨運用企業Bitwiseのイーサリアム現物ETFの横断幕が、ニューヨーク証券取引所に掲げられた。同社は、取引終了のベルを鳴らすことも報告している。
07:05
野村傘下のレーザーデジタル、利回り提供のイーサリアムファンド販売予定か
野村ホールディングスの仮想通貨資産子会社であるLaser Digital(レーザーデジタル)は、イーサリアム現物ETFの代替商品の導入を計画しているようだ。
06:40
米SEC、グレースケールのミニ版ビットコインETFを承認
仮想通貨投資企業グレースケールが提供するGBTCは手数料(1.5%)が最も高く資金流出は続いていたが、新商品を導入し0.15%という業界最安の手数料設定で競争力を高める狙いだ。
06:20
ビットコイン価格が21年後に最大で75億円に到達か、マイケル・セイラー氏の強気予想
ビットコインを最も保有する米上場企業マイクロストラテジーのマイケル・セイラー氏はカンファレンス「ビットコイン2024」で、BTCの今後の強気予想のプレゼンテーションを行った。
07/26 金曜日
17:10
「米大統領選で価格変動 トランプやハリス由来のミームコインの買い方
トランプトークンの概要 ドナルド・トランプ前米大統領とその「Make America Great Again」(アメリカを再び偉大に)というスローガンからインスピレーションを得…
17:10
ヤマハ発動機が初のVTuberコラボNFTを発行、Yamaha E-Ride Baseを訪れて進化可能
ヤマハ発動機が初のNFTデジタルステッカーを発行。横浜のYamaha E-Ride Baseで進化するダイナミックNFTを体験し、限定グッズをゲットできる。
15:13
ビットフライヤーがFTX Japan買収完了、カストディ事業展開へ
株式会社bitFlyer HoldingsはFTX Japanの株式100%を取得し、完全子会社化を発表。8月26日までに社名を変更し、クリプトカストディ事業を展開予定。法制度整備後の暗号資産現物ETF関連サービス提供も視野に入れている。
14:43
Neo Xメインネットが正式稼働 EVM互換でネオのエコシステムを拡張
Neoは高性能EVMベースのサイドチェーン「Neo X」のメインネット正式稼働を発表。クロスチェーンブリッジで流動性と互換性が向上し、エコシステムの可能性が広がる。
14:15
カマラ・ハリス氏のミームコインが過去最高値を記録、大統領候補指名の期待受け
PolitiFiと呼ばれる政治パロディのミームコインが、仮想通貨領域で独自のジャンルを形成しており、カマラ・ハリス副大統領のパロディコイン「 Kamala Horris(KAMA)」が急騰し話題となっている。
12:55
アルトコインETFの未来、ブラックロックが語る現実と可能性
ブラックロックのデジタル資産責任者は、イーサリアム現物ETFが承認されていても他のアルトコインETF誕生には困難があると話した。
12:14
仮想通貨相場反発、ビットコイン・カンファレンスのトランプ登壇に関心集まる
昨日までの大幅下落とは打って変わり暗号資産(仮想通貨)相場は反発した。強気シグナルのハッシュリボンが点灯しているほか、今週末にはビットコインカンファレンスに米国のトランプ前大統領が登壇予定であり、投資家の関心が集まる。
11:00
トランプ前大統領の陣営、4〜6月期で仮想通貨で6億円の寄付金調達
トランプ前大統領は、ビットコインなど仮想通貨で6億円以上の選挙資金を調達。「ビットコイン2024」でもさらに資金を集める予定だ。
10:30
BTCが290万ドルに到達するシナリオ、VanEckが公開
仮想通貨ビットコインが2050年までに290万ドルに到達するシナリオをVanEckのアナリストが公開。このシナリオを実現するための条件を説明している。

通貨データ

グローバル情報
一覧
プロジェクト
アナウンス
上場/ペア