メインコンテンツへスキップ

このページの翻訳を行う

🌏

このページの新しいバージョンがありますが、現在は英語のみです。最新バージョンの翻訳にご協力ください。

ページを翻訳する
英語を見る

ここにバグはありません!🐛

このページは翻訳されていないため、このページは英語で表示されています。

イーサリアム仮想マシン(EVM)

最終編集者: , Invalid DateTime
ページ編集

イーサリアム仮想マシン(EVM)の物理的なインスタンス化は、雲や海の波を指し示すようには説明できませんが、イーサリアムクライアントを実行する数千の接続されたコンピュータによって維持される 1 つのエンティティとして存在します。

イーサリアムのプロトコル自体、この特別な状態マシンの継続的、無中断かつ変更不可能である動作を維持することが唯一の目的です。 すべてのイーサリアムアカウントとスマートコントラクトが存続する環境です。 チェーン内のすべてブロックにおいて、イーサリアムは単一の「正規」の状態のみを持ち、EVM はブロックごとに新たな有効状態を計算するためのルールを定義します。

前提知識

EVM を理解するためには、バイトメモリスタックなど、コンピュータサイエンスの一般的な用語に関する基本知識が必要です。 また、暗号学やブロックチェーンの概念であるハッシュ関数マークルツリーなどを知っていると理解の手助けになります。

台帳から状態マシンへ

「分散台帳」の例えは、ビットコインのようなブロックチェーンを説明する際によく使用され、暗号技術の基本的なツールを使用して分散型通貨を可能にするものです。 台帳はアクティビティの記録を維持し、アクティビティは台帳を変更する上で、誰かができること・できないことを定める一連の規則に従います。 例えば、あるビットコインアドレスで、以前に受け取ったビットコインよりも多くのビットコインを使用できません。 このルールは、ビットコインをはじめとする多くのブロックチェーンのすべてのトランザクションを支えるものです。

イーサリアムには、ほぼ同様の直観的なルールに従うイーサリアムのネイティブ暗号通貨(イーサ)に加えて、スマートコントラクトというさらに強力な機能があります。 この機能は複雑なため、説明にはより詳しい例が必要になります。 イーサリアムは分散台帳ではなく、分散型の状態マシンです。 イーサリアムの状態とは、全アカウントとその残高を保持するだけでなく、予め定義されたルールに従ってブロックごとに変化し、任意のマシンコードを実行できるマシンの状態を保持する、巨大なデータ構造です。 ブロックごとの状態変化の具体的なルールは、EVM によって定義されています。

EVMの構成図 イーサリアム EVMからの図解

イーサリアムの状態遷移関数

EVM は数学の関数のように動作し、入力に対して決定論的な出力が得られます。 そのため、イーサリアムを状態遷移関数を持つと正式に表現することもできます。

1Y(S, T)= S'
2

古い有効な状態 (S)と新しい有効なトランザクションのセット(T) により、イーサリアムの状態遷移関数Y(S, T)は新しい有効な出力状態 S' を生成します。

状態

イーサリアムにおける「状態」とは、修正マークルパトリシアツリーと呼ばれる巨大なデータ構造であり、ハッシュでリンクされたすべてのアカウントを保持し、ブロックチェーンに保存されている単一のルートハッシュにまとめることができます。

トランザクション

イーサリアムにおける「トランザクション」とは、アカウントから暗号的に署名された一連の指示です。 トランザクションには、メッセージの呼び出しが発生するものと、コントラクトの作成が発生するものの 2 種類があります。

スマートコントラクトを作成すると、コンパイルされたスマートコントラクトバイトコードを含む、新規コントラクトアカウントが作られます。 他のアカウントがスマートコントラクトへメッセージの呼び出しを行うたびに、そのバイトコードが実行されます。

EVM 指示

EVM は 1024 項目を含むスタックマシンとして実行されます。 各項目は 256 ビットの単語で、これは 256 ビットの暗号(Keccak-256 ハッシュや secp256k1 シグネチャなど)を使いやすいように選択されています。

実行中、EVM は一時的なメモリ(ワードアドレスによるバイト配列として)を持ちますが、これはトランザクション間には継続されません。

しかし、スマートコントラクトにはマークルパトリシアストレージのツリーが(ワードアドレス可能なワードアレイとして)含まれており、当該アカウントに関連付けられ、グローバルな状態の一部となっています。

コンパイルされたスマートコントラクトのバイトコードは、XORANDADDSUBのような標準的なスタック操作を行う多数の EVMオペコードとして実行されます。 また、EVM はADDRESSBALANCEBLOCKHASHなど、ブロックチェーン固有のスタック操作を多数実装しています。

EVMを実行にガスが必要な箇所を示す図 イーサリアム EVMからの図解

EVM の実装

EVM のすべての実装は、イーサリアムイエローペーパーに記載されている仕様を遵守する必要があります。

イーサリアムの 7 年間の歴史の中で、EVM は何度も改訂されており、また、様々なプログラミング言語により EVM の実装がされてきました。

すべてのイーサリアムクライアントは EVM 実装を含みます。 さらに、次のような複数のスタンドアローンの実装があります。

参考文献

use-Nexus

  • find-nexus
  • レイヤー2

デベロッパー

エンタープライズ

nexus.orgについて

  • 私たちについて
  • 採用情報
  • 貢献
  • 言語サポート
  • プライバシーポリシー
  • 利用規約
  • クッキーポリシー
  • お問い合わせ