Ethereum Virtual Machineについて。カリフォルニア大学バークレー校 ビットコインと仮想通貨の無料講義超訳|Week6-3

前回までの記事はこちら

ーーーーーーーーーー

こんにちは!クレメア(@cremea_tw)です。

前回に引き続き、カリフォルニア大学バークレー校の無料講義、
「ビットコインと仮想通貨のオンライン講座」で学んだ内容をシェアしていきます。

講義そのものにおいて、

読者対象:ビットコインや仮想通貨について詳しく知りたい全ての人
前提知識:不要

という感じなので、
講義内容を読むだけでもかなり理解が深まるのではないかと思います。

 

文章のスタイルとしては、
翻訳ではなく、個人的解釈バリバリの超訳をしていきます。

荒削りですがスピード重視で、
クレメア的な解釈も交えてお伝えするので、
間違いや意見などあればコメントいただければと思います。

 

また、太字や文字色などの文章の装飾は極力していません。

学びの本質はそこではない、時間がもったいない、あとでできる、
ということで、今回は泣く泣くカットしました。

見辛いかもしれませんが、予めご了承ください。

 

ということで、
講義の内容に沿って進めます。

今回の記事は、
Ethereum Virtual Machineについてお伝えします。

それでは、本題に入っていきましょう。

イントロ:Ethereum Virtual Machine

スマートコントラクトを、
コードで表現する方法を見てきましたが、
それらはイーサリアムネットワーク上でどのように実行されていますか?

スマートコントラクトの分散された実行は、
どのように可能となっているのでしょうか?

このセクションでは、
Ethereum Virtual Machine(Ethereumの中心)を見て、
イーサリアムブロックチェーンをプログラマブルにする方法を見ていきます。

 

Ethereum Virtual Machineの理解

編集とプロセス

イーサリアムスマートコントラクトは、
一般に、高水準プログラミング言語で書かれています。

最も普及しているのはSolidityで、
C ++とJavaScriptの組み合わせのようなものです。

現在開発中の新しい言語であるVyperもあります。

これらの高水準プログラミング言語で書かれたスマートコントラクトは、
Ethereum Virtual Machineコード(EVMコードと略記)にコンパイルする必要があります。

より高水準の人間が読める言語から、
EVMコードにコンパイルします。

EVMコードは、より低水準な言語であり、
マシンが理解して実行するのがずっと簡単です。

 

分散化された認証とコンセンサス

コードがEVMコードにコンパイルされた後、
イーサリアムネットワークのすべてのノードがEVMコードを実行します。

また、EVMソフトウェアの最新バージョンを使用している限り、
すべてのノードが同じ方法でコードを実行します。

すべてのノードがイーサリアムスマートコントラクトを実行するため、
イーサリアムは分散型コンピュータと言います。

ノードは新しいシステム状態についてコンセンサスになります。

これはかなりよく知られているはずです。

ビットコインの大まかな概要であるモジュール1では、
ビットコインのすべてのフルノードが、
それぞれの元帳をどのように保管し、
誰もが銀行になる方法について説明しました。

ビットコインでは、
どのノードがUTXOを所有しているのかについての合意が得られます。

イーサリアムでは、
EVMコードを実行した後、
ノードはネットワークの一般的な状態について、
コンセンサスになります。

ノードは実際にどのようにコンセンサスになるのでしょうか?

それはProof-of-Workです!

 

Proof-of-Work

ビットコインで使用されているものと同じ、
分散型コンセンサスプロトコルがイーサリアムでも使用されています。

もちろん、イーサリアムとビットコインの、
Proof-of-Work実装の違いはありますが、
過去のモジュールで学んだ一般的な概念は確実に適用されます。

 

Proof-of-Work の仕組み

Proof-of-Workは、
マイナーが計算力を消費して、
ブロックをネットワークに提案できる機会を、
増やす必要があることを忘れないでください。

ハッシュパズルを解決するための、
真のスマートな方法はないので、
マイナーは力技を用いなければなりません。

投票力を計算力、
物理的な実世界リソースに結びつけることで、
私たちは素朴なシビル攻撃を防ぐことができます。

 

ビットコインとの比較

ビットコインとイーサリアムの、
Proof-of-Workアルゴリズムの違いはいくつかあります。

イーサリアムでは、
ブロック作成時間は15秒、ビットコインでは10分です。

これにより、スマートコントラクトの実行を、
かなり迅速に完了させることができます。

しかしながら、
そのような高速ブロック時間を有することは、
自然フォーク及び孤立ブロックの割合を増加させますが、
これはイーサリアムのプロトコルで説明されます。

これまでのモジュールでは、
ビットコインのProof-of-Workアルゴリズムと、
それが計算によって束縛され、
sha-256をどのように使用するかを研究しました。

イーサリアムでは、
Proof-of-WorkアルゴリズムはEthashと呼ばれます。

Ethashはメモリに拘束され、
ASICに耐性があると主張しています。

イーサリアムのネットワークハッシュレートは、
ビットコインのハッシュレートよりもはるかに低いです。

イーサリアムは2018年5月23日現在、
約275,000 GH / sで、
Bitcoinは31,000,000 TH / sです。

 

Quick Check 1

EVMは何を表しますか?

  • Exploitable Vulnerability Mechanisms
  • Ethereum Visual Machine
  • Ethereum Virtual Machine
  • Edible Vending Machine

 

Ethereum Virtual Machine の概観

分散化された認証とコンセンサス

イーサリアムのマイナーは、
EVMコードを実行し、
マイニングパズルの解決策を探して、
競争力のあるブロックを作成します。

かつてのように、
Proof-of-Workは競争であり、
1人のマイナーだけが、
ブロックをイーサリアムブロックチェーンに追加し、
関連する報酬を請求することができます。

Proof-of-Workは本質的に、
ハッシュ・パワーの割合に基づいて、
ランダムに選択する方法です。

1つのノードの実行結果を、
ブロックチェーンに追加する正しいものとして選択します。

 

大まかな概観

すべてのイーサリアムノードは、
ブロック検証手順の一環としてEthereum Virtual Machineを実行します。

以前のように、ネットワークコンセンサスは、
信頼できる第三者の必要性を排除します。

スマートコントラクトに違反するためには、
ネットワーク全体を破壊する必要があります。

これにより、
ブロックチェーンに永続的に存在する、
ピアツーピアコントラクトが可能になります。

前に述べたように、
契約コードはEthereum Virtual Machine、
すなわちEVMによって実行されます。

契約コードはコンパイルされ、
実際に各ノードで実行されるコードはEVMコードです。

EVMコードは、
低レベルのスタックベースのバイトコード言語です。

あなたがJVMに精通しているなら、
Java、Scala、GroovyはすべてJVMバイトコードにコンパイルします。

複雑なスマートコントラクトコードを、
ネットワーク内のすべてのノードが、
同じ決定論的な方法で実行できる、
EVMコードの形式で単純な機械理解可能な命令に、
コンパイルすることができるため、
イーサリアムのコンセンサスの基礎が得られます。

 

EVMのガスと料金

大まかな概観

イーサリアムネットワーク内のすべてのノードが、
スマートコントラクトを実行しているため、
直面する問題は次のとおりです。

コントラクトに無限ループがある場合は、
どうなりますか?

突然、コントラクトが、
イーサリアムネットワークにプッシュされ、
誰かがfooという関数を呼び出すとします。

関数fooには無限ループがあり、
すべてのノードがこのトランザクションを参照して永遠に実行を開始します。

したがって、
ネットワーク上のすべてのノードが、
この無限ループを実行していることになります。

また、計算問題のよく知られた問題である停止問題によって、
コントラクトが終了するかどうかを、
事前に判断することは不可能であることがわかります。

これにより、
攻撃者がサービス拒否攻撃を開始する、
非常に簡単な方法がもたらされます。

世界中のコンピュータを、
無限ループに閉じ込めることで、
他のより意味のあるコントラクトを実行できなくなります。

 

幸いなことに、イーサリアムの開発者はこれを考えて、
ガスとして知られている形で解決策を実装しました。

ガスは、与えられたコントラクトの実行に、
燃料を供給するものです。

すべてのEVMオペコードでは、
実行するためにガスが必要です。

これにより、
前述の無限ループのDoS攻撃が防止されます。

すべてのトランザクションは、
2つのパラメータを指定します。

「startgas」、
トランザクションが消費するガスの最大量。

「gasprice」、
コントラクトで単位ガス当たりに支払うことになっているetherの料金。

 

トランザクションの開始時に、
「startgas * gasprice」、
これは計算のために支払われたetherの数を表しますが、
これが送信者のアカウントから差し引かれます。

送信者はトランザクションを送信して、
コントラクトを呼び出します。

コントラクトが正常に実行されると、
残りのガスは送付者に払い戻されます。

一方、コントラクトの実行が終了する前にガスがなくなると、
実行が元に戻ります。

しかし、
消費されたetherの量は払い戻されません。

ここでの考え方は、
契約履行が元に戻ったにもかかわらず、
ネットワーク上の誰かがEVMコードを実行するために、
計算能力を投入しなければならない、
また一旦ガスが使い果たされると、
誰かがプログラムを実行したという証拠になるので、
etheは払い戻されませんでした。

これは、プログラムが終了するか、
ガスがなくなるという2つの終了状態を与えます。

 

イーサリアムは、
まだ誰かがスマートコントラクトで、
無限ループを書くことを許しています。

しかし、
ネットワークをDoSしようとする攻撃者は、
DoSを調達するのに十分な量のetherを支払わなければなりません。

ある意味では、購入したガスは、
この分散型でトラストレスな計算能力を使用するために、
支払わなければならない価格と考えることができます。

これにより、ユーザーは、
十分な資金を使わずに高価な計算を実行することを阻止します。

各計算にはガスが必要であるため、
ネットワークにDoS攻撃を行う攻撃者は、
不当に大量のetherを必要とします。

攻撃は非常にコストがかかるため、
この種の攻撃はほとんど除外されます。

 

状態遷移関数

ノードがネットワーク状態でコンセンサスになり、
EVMでコードが実行されると状態が変わると述べました。

ある意味では、EVMを基にした、
状態遷移メカニズムと考えることができます。

トランザクションを実行すると、
以前の状態から新しい状態に移行します。

当初、空白のGenesis状態があり、
多くの取引が行われました。

また、任意の時点で、
最終状態はイーサリアムネットワークの現在の状態を表します。

したがって、現在のブロック状態、
必要なガス、現在のメモリ、
コントラクトを呼び出すトランザクション、
基本的にトランザクションメタデータ、
コントラクトコード、
スタックとプログラムカウンタを含む、
メッセージから始めます。

基本的には、
トランザクションを正しく実行するために必要なすべてのものです。

これをEVMに入力して、
更新された勘定残高と内部状態、
および払い戻される新しいガス価格を使用して、
新しいブロック状態を取得します。

 

Quick Check 1

イーサリアムネットワーク上で計算を実行するトークンまたはアセットの名前は何ですか?

  • Gas
  • Ether
  • Solidity
  • Bitcoin

 

イーサリアムの結論

イーサリアムの高水準アーキテクチャに関して、
いくつかの結論があります。

イーサリアムの主な目標は、
計算効率を最適化することではなく、
分散およびトラストレスな計算を可能にすることです。

ネットワーク上のすべてのノードは、
同じ計算を実行する必要があるため、
イーサリアムは重複して並列化されています。

そして、これは、
信頼できる第三者を必要とせずに、
システム状態に関する合意に効率的に到達することです。

契約の実行は、
すべてのノードで重複して複製されるため、
実行にはコストがかかります。

たとえば、機械学習モデルを訓練したり、
スマートコントラクトで直接計算的に、
高価なものを実行したりしないでください。

だからうまくいけば、
チェーンから外すことができる計算のために、
ブロックチェーンを使用しないというインセンティブが生まれます。

 

あとがき

ということで、
いかがでしたでしょうか?

 

今回は、
Ethereum Virtual Machineについてでしたね。

イーサリアムネットワークが、
どのような仕組みでワークしているのか、
理解できたと思います。

ホント2年前くらいに、
この講座を学びたかった。

 

ってことで、
今回はこの辺で失礼します。

このブログを書く僕の目的は、
「ファンを作ること・仲間を増やすこと」です。

趣味が合う、気が合う、考え方が合う。
なんかええなーと思ったら、気軽にメッセージください。喜びます。

終わり。

 

次の記事
イーサリアムの活用事例、ブロックチェーンの一般化。カリフォルニア大学バークレー校 ビットコインと仮想通貨の無料講義超訳|Week6-4

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

ABOUTこの記事をかいた人

物語の引き金を引く男 / 「てめえの人生に火をつける」 / プロ火付け役 / 腐れニートからの再始動 / 見知らぬ人にMacBook Proを買った人 / 32日で100記事達成 / ただの足跡を伝説に変えていく男 / Youtubeで #クレメアラジオ 不定期配信 / サロン「裏世界」オーナー 参加希望者はDMまで