イーサリアムの仕組み(パート3)最終章

イーサリアムの仕組み(パート3)最終章

はじめに: この記事は主に、現在の Ethereum の具体的な動作原理について説明しています。これは、Ethereum の背後にあるさまざまな概念と動作を理解するのに役立ち、初心者が読むのに適しています。 ETH2.0は将来的に非常に大きな変化を遂げるでしょう。詳細は前回の記事『ETH2.0 どうなる?(I)』および『ETH2.0 どうなる?(II)』をご覧ください。 (二)"。

前回の記事「イーサリアムの仕組み(パート 1)」と「イーサリアムの仕組み(パート 2)」の続きです。

契約の作成

要約すると、Ethereum には契約アカウントと外部アカウントの 2 種類のアカウントがあります。トランザクションが「契約の作成」であると言う場合、トランザクションの目的は新しい契約アカウントを作成することであることを意味します。

新しいコントラクト アカウントを作成するには、まず特別な式を使用して新しいアカウント アドレスを宣言し、次に次のように新しいアカウントを初期化します。

  • nonce(乱数)をゼロに設定します。

  • 送信者がトランザクションの価値として一定量の Ether を送信する場合、その価値をアカウント残高として設定します。

  • 新しいアカウントに送信された金額は、送信者の残高から差し引かれます。

  • ストレージを空に設定します。

  • 契約の codeHash を空の文字列のハッシュに設定します。

アカウントを初期化すると、次のトランザクションで送信される初期化コードによって実際にアカウントを作成できます (初期化コードの詳細については、「トランザクションとメッセージ」セクションを参照してください)。この初期化コードを実行すると、さまざまな変更が起こります。コントラクトのコンストラクターに応じて、アカウントのストレージをアップグレードしたり、他のコントラクト アカウントを作成したり、他のメッセージの呼び出しを行ったりする場合があります。

コントラクトを初期化するコードが実行されると、ガスが使用されます。トランザクションでは、残りのガスよりも多くのガスを使用することはできません。これが起こると、実行はガス不足例外に遭遇し、終了します。ガス不足によりトランザクションが終了した場合、状態はトランザクション前の時点に直ちに復元されます。送信者は、前回の実行で使用されたガスの払い戻しを受けられません。

ただし、送信者がトランザクションで Ether 値を送信した場合、契約の作成が失敗しても Ether 値は返されます。

初期化コードが正常に実行された場合、契約を正常に作成するためのコストが支払われます。これはストレージコストであり、支払われる料金は作成されたコントラクトコードのサイズに比例します。ここにはタダ飯はない。最終コストをカバーするのに十分なガスが残っていない場合、トランザクションは再びガス不足例外で失敗し、中止されます。

すべてがうまくいき、異常なくここまで到達できた場合、残りの未使用のガスはトランザクションの元の送信者に返金され、変更された状態が維持されます。

メッセージ通話

メッセージ呼び出しの実行はコントラクト作成の実行と似ていますが、いくつかの違いがあります。

新しいアカウントは作成されないため、メッセージ呼び出しの実行には初期化コードは含まれませんが、トランザクションの送信者によってデータが提供される場合は入力データを含めることができます。実行されると、メッセージ呼び出しには出力データを含む追加のコンポーネントが含まれ、後続の実行でそのデータが必要な場合に使用されます。

契約の作成と同様に、ガス不足または無効なトランザクション (スタック オーバーフロー、無効なジャンプ ターゲット、無効な命令など) が原因でメッセージ呼び出しが終了した場合、使用されたガスは元の呼び出し元に返金されません。代わりに、未使用のガスが消費され、残高転送前の状態に戻ります。

Ethereum の最新のアップグレードまでは、システムが提供したガスをすべて消費することなく、トランザクションの実行を停止または元に戻す方法はありませんでした。たとえば、呼び出し元が何らかのトランザクションを実行する権限を持っていない場合に、承認されたコントラクトがエラーをスローするとします。以前のバージョンの Ethereum では、残りのガスは消費され、送信者にガスは返金されませんでした。しかし、Byzantium のアップグレードには、残りのガスを消費する代わりにコントラクトが実行を停止して状態の変更を元に戻し、トランザクションが失敗した理由を返すことができる新しい「リカバリ」コードが含まれています。トランザクションがリバースにより終了した場合、未使用のガスは送信者に返されます。

実行モード

これまで、トランザクションが最初から最後まで実行する必要がある一連の手順を見てきました。ここで、VM 上でトランザクションが実際にどのように実行されるかを見てみましょう。

実際にトランザクションフローを処理するプロトコルの部分は、EVM と呼ばれる Ethereum 独自の仮想マシンです。 EVM はチューリング完全な仮想マシンです。他のチューリング完全なマシンと比較した EVM の唯一の制限は、本質的にガスに縛られていることです。言い換えれば、その計算能力は本質的にガスの量によって制限されます。

出典: CMU

さらに、EVM にはスタックベースのアーキテクチャがあります。スタック マシンは、後入れ先出しスタックを使用して一時的な値を保存します。 EVM 内の各スタック項目のサイズは 256 ビットで、最大スタック サイズは 1024 です。

EVM には、ワード アドレス指定可能なバイト配列として項目が格納されるメモリがあります。メモリは揮発性ではないため、永続的ではありません。

EVM にはストレージスペースもあります。メモリとは異なり、ストレージは安定しており、システム状態の一部として維持されます。 EVM はプログラム コードを仮想 ROM に個別に保存し、特別な命令を通じてのみアクセスできるようにします。このように、EVM は、プログラム コードがメモリまたはストレージに保存される従来のフォン ノイマン アーキテクチャとは異なります。

EVM には独自の言語「EVM バイト コード」もあります。プログラマーが Ethereum スマート コントラクトを作成する場合、通常は Solidity のような高水準言語を使用します。その後、EVM が理解できる EVM バイトコードにコンパイルできます。

それでは、今すぐ実行を始めましょう。

特定の計算を実行する前に、プロセッサは次の情報が利用可能であり有効であることを確認します。

  • システムステータス

  • 計算に残ったガス

  • 実行されているコードを所有するアカウントのアドレス

  • 実行を開始したトランザクションの送信者のアドレス

  • コードの実行を引き起こしたアカウントのアドレス(元の送信者とは異なる場合があります)

  • この実行を生成したトランザクションのガス価格

  • この実行のデータを入力してください

  • 現在の実行の一環として、このアカウントに値(Wei)を送信します

  • 実行するマシンコード

  • 現在のブロックのブロックヘッダー

  • 現在のメッセージ呼び出しまたは契約作成スタックの深さ

  • 実行が開始されると、メモリとスタックは空になり、プログラム カウンターはゼロになります。

PC: 0 スタック: [] メモリ: []、ストレージ: {}

その後、EVM はトランザクションを再帰的に実行し、各サイクルでシステム状態とマシン状態を計算します。システム状態は、単純に Ethereum のグローバル状態です。マシンのステータスには以下が含まれます:

  • 利用可能なガス

  • プログラムカウンタ

  • メモリ内容

  • メモリ内のアクティブな単語の数

  • スタックの内容

シリーズの左端の部分からスタック項目を追加または削除します。

各サイクルでは、残りのガスから適切な量のガスが削減され、プログラム カウンターが増加します。

各ループの終わりには、次の 3 つの可能性があります。

1. マシンが異常な状態(ガス不足、無効な命令、スタック項目不足、1024 を超えたためにスタック項目がオーバーフロー、JUMP/JUMPI の宛先アドレスが無効など)に達したため、マシンを一時停止する必要があり、変更はすべて破棄されます。

2. シーケンスは処理を継続し、次のループに入ります。

3. 機械が制御停止に達する(実行プロセスが終了する)

実行が異常な状態に到達せず、「制御された」停止または通常の停止に到達しないと仮定すると、マシンは結果の状態、実行後の残りのガス、蓄積されたサブ状態、および結果の出力を生成します。

Ethereum の最も複雑な部分の 1 つについて学びました。完全に理解できなくても大丈夫です。非常に深いレベルで作業しているのでなければ、詳細を理解する必要はありません。

ブロックの確定方法

最後に、多くのトランザクションを含むブロックがどのように確定されるかを見てみましょう。

「確定」とは、ブロックが新規か既存かによって 2 つの異なる意味を持つ場合があります。新しいブロックの場合は、ブロックをマイニングするために必要なプロセスを指します。既存のブロックの場合は、ブロックを検証するプロセスを指します。どちらの場合でも、ブロックの「ファイナリティ」を達成するには 4 つの要件があります。

1) ommersを検証する(マイニングの場合は確認する)

ブロック ヘッダー内の各 ommer ブロックは、有効なブロック ヘッダーであり、現在のブロックの 6 世代以内である必要があります。

2) トランザクションを検証(マイニングの場合は確認)する

ブロックで使用されるガスの量は、ブロックにリストされているトランザクションによって使用される累積ガスの量と等しくなければなりません。 (トランザクションを実行するときに、ブロックのガス カウンターを追跡し、ブロック内のすべてのトランザクションで使用されたガスの合計を追跡することを思い出してください)。

3) 報酬を申請する(マイニングのみ)

受益者アドレスには、ブロックマイニングに対して 5 Ether が付与されます。 (Ethereum EIP-649 提案によれば、5ETH の報酬はまもなく 3ETH に削減される予定です)。さらに、各オマーごとに、現在のブロックの受益者は、現在のブロック報酬の 1/32 を追加で受け取ります。最後に、オマーブロックの受益者も特定の金額の報酬を受け取ります(これは、ここでは詳しく説明されていない特別な計算式に従って計算されます)。

4) 状態とナンスを検証(または、マイニングの場合は有効な値を計算する)

すべてのトランザクションとその結果の状態変更が適用されていることを確認し、すべてのブロック報酬が最終的なトランザクション結果の状態に適用された後の状態として新しいブロックを定義します。これは、この最終状態をブロック ヘッダーに格納されている状態トライと照合することによって検証されます。

PoWマイニング

「ブロック」セクションでは、ブロックの難易度の概念について簡単に説明します。ブロックの難易度に意味を与えるアルゴリズムは PoW と呼ばれます。 Ethereum の PoW アルゴリズムは「Ethash」(以前は Dagger-Hashimoto と呼ばれていました) と呼ばれます。

アルゴリズムは正式には次のように定義されます。

ここで、m は mixHash、n は nonce (乱数)、Hn は新しいブロック ヘッダー (計算する必要がある nonce および mixHash コンポーネントを除く)、Hn はブロック ヘッダーの nonce、d は大きなデータ セットである DAG です。

「ブロック」セクションでは、ブロック ヘッダーに存在するさまざまな項目について説明しました。これらのコンポーネントのうち 2 つは、mixHash と nonce と呼ばれます。次のことも覚えているかもしれません:

  • mixHash は、nonce と組み合わせることで、ブロックに対して十分な計算が実行されたことを証明するハッシュ値です。

  • nonce は、mixHash と組み合わせることで、ブロックに対して十分な計算が実行されたことを証明するハッシュ値です。

上記2つの項目を評価するためにPoW関数を使用します。

PoW 関数を使用して mixHash と nonce を計算するのは少し複雑なので、別の記事で詳しく説明します。しかし、大まかに言えば、次のように機能します。

「各ブロックに対して「シード」が計算されます。このシードは各「エポック」ごとに異なり、各エポックの長さは 30,000 ブロックです。最初のエポックの場合、シードは 32 バイトのゼロの連続のハッシュです。後続のエポックの場合、シードは前のシード ハッシュのハッシュです。このように、このシードを使用して、ノードは疑似ランダム「キャッシュ」を計算できます。」

このキャッシュは、「ライトノード」の概念を実現可能にするため、非常に便利です。ライトノードの目的は、ブロックチェーンデータセット全体を保存することなく、特定のノードがトランザクションを検証できるようにすることです。キャッシュは検証している特定のブロックを再生成できるため、ライトノードはこのキャッシュのみに基づいてトランザクションの有効性を検証できます。

キャッシュを使用すると、ノードは、データセット内の各項目がキャッシュから疑似ランダムに選択された項目の小さなセットに依存する DAG「データセット」を生成できます。マイナーになるには、この完全なデータセットを生成する必要があります。すべてのフルデータ クライアントとマイナーはこのデータセットを保存し、このデータセットは時間の経過とともに直線的に増加します。

マイナーはデータセットのランダムなスライスを取得し、「mixHash」と呼ばれる数学関数を使用してそれらをハッシュすることができます。マイナーは、出力が目的のターゲット nonce を下回るまで、mixHash を繰り返し生成します。出力が要件を満たすと、ナンスは有効であるとみなされ、ブロックがチェーンに追加されます。

マイニングはセキュリティメカニズムである

一般的に、PoW の目的は、特定の出力 (つまり、ナンス) を生成するために一定量の計算が費やされたことを暗号的に安全な方法で証明することです。これは、必要なしきい値を下回る乱数を見つけるには、すべての可能性を列挙するよりも良い方法がないためです。ハッシュ関数を繰り返し適用した場合の出力は均一に分布するため、平均すると、このような乱数を見つけるのに必要な時間は難易度のしきい値に依存することがわかります。難易度が高いほど、ナンスを見つけるのに時間がかかります。このように、PoW アルゴリズムは、ブロックチェーンのセキュリティを確保するために使用される難易度の概念に意味を与えます。

ブロックチェーンのセキュリティとは何を意味しますか?理由はシンプルです。私たちは誰もが信頼できるブロックチェーンを作りたいのです。前にも述べたように、複数のチェーンが存在する場合、どのチェーンが「有効な」ブロックチェーンであるかをユーザーが合理的に確信できないため、ユーザーの信頼が失われます。ユーザーグループがブロックチェーンに保存されている基礎状態を受け入れるためには、全員が信頼する単一の正規のブロックチェーンが必要です。

これが PoW アルゴリズムの機能です。特定のブロックチェーンが正規のままであることを保証し、攻撃者がトランザクションの履歴を書き換える (つまり、トランザクションを消去したり、異なるトランザクションを作成したり) またはフォークを維持する新しいブロックを作成することが非常に困難になります。ブロックが最初に検証されるためには、攻撃者はネットワーク内の他の誰よりも速く乱数を継続的に計算し、ネットワークが自分のチェーンが最も長いチェーンであると信じるようにする必要があります (GHOST プロトコルの原則に基づく)。これは、攻撃者がハッシュパワーの半分以上を持っていない限り、いわゆる 51% 攻撃シナリオでは不可能です。

富の分配メカニズムとしての鉱業

PoW は、安全なブロックチェーンを提供することに加えて、セキュリティを提供するために計算能力を費やす人々に富を分配する方法も提供します。要約すると、マイナーはマイニングから次のような報酬を受け取ります。

  • 勝利したブロックには、静的ブロック報酬として 5 Ether(まもなく 3 Ether になる予定)が付与されます。

  • ブロック内のトランザクションのガスコスト

  • ブロックの一部としてオマーを含めることによる追加報酬

PoW アルゴリズムは、セキュリティと富の分配の方法です。長期的に持続可能であることを保証するために、Ethereum は次の 2 つの特性を導入するよう努めています。

できるだけ多くの人がアクセスできるようにします。言い換えれば、アルゴリズムを実行するために特殊なハードウェアや珍しいハードウェアは必要ありません。その目的は、富の分配モデルを可能な限りオープンにして、一定量の計算能力を提供することで誰もがイーサリアムの報酬を得ることができるようにすることです。

単一のノードが不均衡な利益を得る可能性を減らします。いずれかのノードが不均衡な利益を得ることができる場合、そのノードがブロックチェーンの規範の決定に大きな影響力を持つことになります。これはネットワークのセキュリティを低下させるため問題です。

ビットコイン ブロックチェーン ネットワークでは、上記の 2 つの特性に関連する 1 つの問題は、PoW アルゴリズムが SHA256 ハッシュ関数であることです。このタイプの機能の弱点は、ASIC と呼ばれる特殊なハードウェアを使用すると効率が上がることです。

この問題を緩和するために、Ethereum が選択した PoW アルゴリズムは Ethhash であり、これによりシーケンスの記憶が困難になります。つまり、Ethereum のアルゴリズム設計では、乱数の計算に大量のメモリと帯域幅が必要になります。コンピュータの場合、メモリ要件が大きいと、並列計算にメモリを使用して複数の乱数を同時に見つけることが困難になり、帯域幅要件が高いと、超高速コンピュータであっても、複数の乱数を同時に見つけることが困難になります。これにより、集中化のリスクが軽減され、バリデーターにとってより公平な競争の場が生まれます。

注目すべき点の 1 つは、Ethereum が PoW コンセンサス メカニズムから「Proof of Stake」と呼ばれるものに移行していることです。これは興味深いトピックなので、将来的には別の記事が必要になるかもしれません。

結論

この記事には理解すべきことがたくさんあります。理解するまでに数回読む必要がある場合でも、問題ありません。上記の説明がお役に立てば幸いです。

<<:  エバン・インターナショナルは2019年に40万台のビットコインマイニングマシンを生産する予定

>>:  コンスタンティノープルの戦い、イーサリアムのブレイクアウト

推薦する

stETH のデペッグ?アナリストらは、価格下落はパニックやレバレッジなどによる可能性があると指摘している。

stETH のデペッグ事件は最近激化しています。データによると、stETH はデペッグされ、その価...

独占:Huobi最高投資責任者のシャーリン・ウーがDeFiの探求を続けるために退社

ウー・サイード著者 |コリン・ウーこの号の編集者 |ウー氏がブロックチェーンについて語る先週以来、H...

ベトナム財務省、仮想通貨マイニングハードウェアの輸入を一時的に禁止することを提案

コインテレグラフが引用したVNエクスプレスによると、ベトナム財務省は仮想通貨マイニング用ハードウェア...

素人でも数秒で BTC マイニングを理解できるようにするにはどうすればよいでしょうか?市場を拡大しましょう!

ある分野を長い間研究してきた人や、ある業界で非常にプロフェッショナルな人の場合、多くの人が悪循環に陥...

ビットコインの優位性がここ数年で最低レベルに落ち込む、市場で何が起こったのか?

価格が大幅に下落した場合、トレーダーは取引所からビットコインを売却します。これは人間の本性であり、ビ...

データ: 94,000以上のビットコインアドレスが100万ドル以上のビットコインを保有

BlockBeatsによると、2月18日現在、Glassnodeのデータによると、少なくとも100万...

投機を超えて、ビットコインの実世界での使用はアフリカで急増している

批評家たちは長い間、ビットコインの唯一の用途は投機のためだと主張してきた。それにもかかわらず、データ...

Wired: ブロックチェーンはどのようにして相乗りを可能にし、電力の販売方法を変えるのでしょうか?

クレイジーな解説: 調査や調整のコストを削減できるインターネットと比較すると、ブロックチェーンでは価...

ビットコインマイニングPOWはコストがかかり無駄が多いが、公平である

ビットコインマイニングのプルーフ・オブ・ワーク(POW)は公平ですか?ロンドン大学ユニバーシティ・カ...

マイクロソフト、ニューヨークのスタートアップ企業と提携しブロックチェーン技術クラウドプラットフォームを立ち上げ

ロイター通信によると、11月11日、マイクロソフトは火曜日にニューヨークの新興企業コンセンサスと提携...

ブロックチェーンと法の再構築:コードは法である

編集者注: この記事は、「ブロックチェーン: デジタル通貨から信用社会へ」(CITIC Press)...

MicroStrategy のビットコイン債務ループ: 天才的な動きか、それとも危険な賭けか?

マイクロストラテジーの共同創業者マイケル・セイラー氏は、積極的なビットコイン取得戦略を採用したが、傍...

ブロックストリーム開発者ラスティ・ラッセルが新しいビットコインアドレスシステムを提案

Blockstream のビットコイン開発者 Rusty Russell 氏は最近、Segwit と...

StarLink X の株式公開が開始され、EOS が SX エコシステムの構築を支援

公募にいち早く参加する方法! TPウォレットBinanceチェーン、Binanceウォレットに入り、...