【イーサリアム】 チューリング完全性について調べてみた。

仮想通貨の1つであるイーサリアムについて調べていると、チューリング完全性(Turing complete)という言葉が出てきました。

チューリング完全性について全然知らなかったので、今回はイーサリアムにおけるチューリング完全性について調べてみました。

チューリング完全性とは?

チューリング完全性とは、イギリスの数学者の「アラン・チューリング」により定義されました。

同じ仮想通貨でも、ビットコインはチューリング完全性ではなく、イーサリアムはチューリング完全性だといわれます。

ではチューリング完全性とはどういうことなのでしょうか?

簡単にいうと、チューリング完全性とは、「どのような複雑なプログラムであっても計算(シュミレート)できる状態のこと」をいいます。

アラン・チューリングによると、「チューリングマシンをシュミレートするために使うことができるシステム」をチューリング完全と定義しました。このようなシステムを「万能チューリングマシン(UTM:Universal Turing machine)」といいます。

なので、Python や C言語などのプログラミング言語はチューリング完全であるといえます。

さらに、チューリングは、「あるプログラムが最終的に停止するかどうかは実行してみないと分からない」ということを証明しました。これを「停止性問題」といいます。

例えば、プログラムで「無限ループ」を実行すれば、そのプログラムは永久に停止しません。しかし、プログラムを実行しなければ、そのプログラムが「無限ループ」に陥ることは分からないということです。

プログラム実行前に本当に停止するか予測することはできないということです。

イーサリアムにおけるチューリング完全

イーサリアムでは、「イーサリアム仮想マシン(EVM)」と呼ばれる状態マシーンにより、プログラムを実行できるため、チューリング完全であるといえます。

イーサリアムでは、ブロックチェーン上でどのようなアルゴリズムのプログラムも実行できてしまいます。

一方、ビットコインでは、ブロックチェーン上で通貨の所有権の移動しか実行することができません。

イーサリアムは自由度が高く、契約やゲーム(スマートコントラクト)をブロックチェーン上で実行することができます。イーサリアムが革新的だといわれる理由がここにあります。

イーサリアムでは、EVM 上でスマートコントラクトを実行するのですが、上で書いた「停止性問題」が問題になってきます。

イーサリアムは、スマートコントラクトを実行してみないと、どれくらいメモリなどのリソースを使うかわかりません。

なので、もし、スマートコントラクトを実行して「無限ループ」などの状態が発生し、それがブロックチェーン上で起きてしまうと、かなりのリソースの無駄が出てしまいます。

それを防止するために、イーサリアムでは、ガス(gas)というものを使っています。

EVM がスマートコントラクトを実行するためにガスが必要で、処理コストに応じてガス量が多く使われる仕組みになります。

なので、無限ループに陥った場合、処理コストが増え、ガス量が足りなくなり EVM がスマートコントラクトの実行を停止するように設計されています。

参考文献

関連記事

【仮想通貨】新しいトランザクション(取引)の追加方法【ブロックチェーン】

仮想通貨で用いられているブロックチェーン技術において、新しいトランザクション(取引)をどのよ

記事を読む

【ビットコイン】 アドレス生成方法について調べてみた。

仮想通貨の1つであるビットコインを送金するときは、送付側と受け手側のそれぞれのアドレスが必要

記事を読む

【イーサリアム】 公開鍵暗号について調べてみた。

仮想通貨の1つであるイーサリアムでは、公開鍵暗号という技術が使われています。 公開鍵暗

記事を読む

【ビットコイン】承認されたブロックを見てみる【ブロックチェーン】

ビットコイン(BitCoin)の公開台帳であるブロックチェーンについて、新たに承認されたブロ

記事を読む

【仮想通貨】トランザクションについて調べてみた【ブロックチェーン】

ビットコインなどの仮想通貨では、取引をトランザクションで記述されます。 そのトランザク

記事を読む

【Solidity】 イーサリアムでコントラクトを生成してみた。

スマートコントラクトプログラミングの高級言語の1つである Solidity を使って、イーサ

記事を読む

【イーサリアム】 ハッシュ関数(Keccak-256)について調べてみた。

仮想通貨の1つであるイーサリアムで用いられているハッシュ関数「Keccak-256」について

記事を読む

【ビットコイン】ハッシュ関数(SHA-256・RIPEMD-160)について調べてみた。

ビットコインなどの仮想通貨で使用されているハッシュ関数(hash function)という技

記事を読む

【仮想通貨】デジタル署名と公開鍵暗号の違いは!?

ビットコインなどの仮想通貨のブロックチェーン技術で用いられている「デジタル署名」「公開鍵暗号

記事を読む

【イーサリアム】日本円のチャートで比較する方法【イーサリアム・クラシック】

イーサリアム(Ethereum)は、2020年時点で、時価総額がビットコインに次ぐ第2位の仮

記事を読む

【Cubase】特定のトラックを無効にする方法。

今回は、Cubaseで特定のトラックのみを無効にする方法について紹介し

【転移学習】学習済みVGG16 による転移学習を行う方法【PyTorch】

今回は、PyTorch を使って、学習済みのモデル VGG16 を用い

【PyTorch】畳込みニューラルネットワークを構築する方法【CNN】

今回は、PyTorch を使って畳込みニューラルネットワーク(CNN)

【PyTorch】ニューラルネットワークを構築する方法【NN】

今回は、PyTorch を使って、ニューラルネットワーク(NN)を構築

【OpenCV】検出した顔画像部分を切り出す方法【Python】

OpenCV を使って、Python で画像の中から顔部分を切り出した

→もっと見る

PAGE TOP ↑