複数の画像による詳細な説明: Ethereum はどのように機能しますか? (二)

複数の画像による詳細な説明: Ethereum はどのように機能しますか? (二)

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

ガスと支払い

Ethereum における非常に重要な概念は手数料の概念です。イーサリアム ネットワーク上のトランザクションによって消費されるすべてのコンピューティングには料金が発生します。諺にあるように、世の中にただ飯はないのです。支払われる手数料は「ガス」で計算されます。

ガスは、特定の計算を実行するコストを測定するために使用される測定単位です。ガス価格とは、ガス 1 単位あたりに費やすことができる Ether の合計量であり、「gwei」で測定されます。 「Wei」は Ether の最小単位で、1^018 Wei が 1 Ether を表します。 1 gwei は 1,000,000,000 wei です。

各トランザクションごとに、送信者(転送者)がガス制限とガス価格を設定します。ガス価格とガス制限は、送信者がトランザクションに対して支払う意思のある Wei の最大額を表します。たとえば、送信者がガス制限を 50,000 に設定し、ガス価格を 20 gwei に設定するとします。これは、トランザクションの送信者がトランザクションを実行するために最大 50,000*20gwei=1,000,000,000,000,000 Wei、つまり 0.001 Ether を支払う意思があることを意味します。

ガス制限は、トランザクションの送信者が支払う意思のある最大手数料を表すことに注意してください。口座残高がこの上限額をカバーできる場合は、問題はありません。取引の終了時に、送信者は未使用のガス資金の払い戻しを受け取り、取引は元の価格で完了します。

トランザクションの送信者がトランザクションを実行するために十分なガスを提供しない場合、トランザクションはガス不足になり、トランザクションは無効になります。この場合、トランザクション プロセスは中止され、発生した状態の変更はすべて元に戻されるため、トランザクションは終了し、トランザクション前の Ethereum の状態に戻ります。さらに、トランザクションの失敗がログに記録され、どのトランザクションが試行され、どこで失敗したかが示されます。同時に、ガスがなくなる前にマシンはすでに計算に労力を費やしているため、論理的に言えば、消費されたガスはトランザクションの送信者に返金されません。

ガス資金はどこへ行ったのでしょうか?トランザクションの送信者が費やしたすべてのガス資金は、「受益者」アドレス(通常はマイナーのアドレス)に送信されます。マイナーはトランザクションの計算と検証に労力を費やすため、報酬としてガス料金を受け取ります。

一般的に、トランザクションの送信者が支払うガス価格が高ければ高いほど、マイナーがトランザクションから得る価値は高くなります。したがって、マイナーも価格の高い取引を選択することになります。このようにして、マイナーは検証するトランザクションを自由に選択できます。トランザクションの送信者がガス価格を設定できるようにするために、マイナーはトランザクションを実行する最小ガス価格を宣伝することを選択できます。

保管にもお金がかかります。

ガスは計算ステップの支払いだけでなく、ストレージコストにも使用されます。ストレージの全体的なコストは、使用される 32 バイトの最小の倍数に比例します。

ストレージのコストには微妙な違いがあります。たとえば、ストレージを増やすと、すべてのノードの Ethereum 状態データベースのサイズが増加するため、保存されるデータの量を小さく保つインセンティブがあります。したがって、トランザクションにストレージ内のエントリをクリアできるステップがある場合、その操作を実行するための手数料は免除され、ストレージスペースを解放するために手数料を払い戻すことができます。

料金の目的は何ですか?

Ethereum の動作の重要な側面は、ネットワークによって実行されるすべてのアクションがすべてのフルノードに同時に影響されることです。ただし、Ethereum 仮想マシンでの計算手順は非常にコストがかかります。

その結果、Ethereum スマート コントラクトは、ネットワークに負荷をかけるファイル ストレージ、電子メール、機械学習などの複雑な用途ではなく、単純なビジネス ロジックの実行や署名やその他の暗号化オブジェクトの検証などの単純なタスクに最適です。料金を課すことで、ユーザーによるネットワークの過剰使用を防ぐことができます。

Ethereum はチューリング完全な言語です。簡単に言えば、チューリング マシンは、あらゆるコンピューター アルゴリズムをシミュレートできるマシンです。これによりループが発生し、Ethereum は停止問題、つまりプログラムが無期限に実行されるかどうかがわからない問題の影響を受けやすくなります。手数料がなければ、悪意のある人物はコストを気にせずにトランザクションの無限ループを実行し、簡単にネットワークを混乱させようとすることができます。したがって、手数料はネットワークを悪意のある攻撃から保護します。 「なぜストレージに料金を支払う必要があるのか​​」と思うかもしれません。そうですね、計算と同じように、Ethereum ネットワーク上のストレージにもコストがかかり、ネットワーク全体がその負担を負わなければなりません。

取引とメッセージ

Ethereum はトランザクションベースのステートマシンであることに注意してください。言い換えれば、異なるアカウント間のトランザクションによって、Ethereum のグローバル状態が 1 つの状態から別の状態へと変化します。

最も基本的な意味では、トランザクションは、外部アカウントによって生成され、シリアル化されてブロックチェーンに送信される、暗号化された署名付きの命令です。トランザクションには、メッセージ呼び出しとコントラクト作成(新しい Ethereum コントラクトを作成するトランザクション)の 2 種類があります。

すべてのトランザクションには、そのタイプに関係なく、次のコンポーネントが含まれます。

  • Nonce: トランザクション送信者が送信したトランザクションの数。 (Blue Fox 注記: Bitcoin の Nonce の概念とは異なります。)

  • Gasprice: トランザクション送信者が、トランザクションの実行に必要なガス単位ごとに支払う Wei の数。

  • Gaslimit: トランザクションの送信者がトランザクションを実行するために支払うガスの最大量。数量は計算が完了する前に決定され、設定され前払いされます。

  • 宛先: 受信者のアドレス。コントラクトを作成するトランザクションの場合、コントラクトアカウントアドレスはまだ存在しないため、null値が使用されます。

  • 値: 送信者から受信者に転送された Wei の合計金額。契約を作成するトランザクションでは、この値は新しく作成された契約アカウントの初期残高として使用されます。

  • V、r、s: トランザクションの送信者を識別する署名を生成するために使用されます。

  • Init: 契約を作成するためだけに使われるトランザクション。これは、新しい契約アカウントを初期化するために使用できる EVM コードのスニペットです。 Init は 1 回だけ許可され、その後は破棄されます。 init が初めて実行されると、契約アカウントに永続的に関連付けられているアカウント コードの本体が返されます。

  • データ: メッセージ呼び出し専用のオプション フィールド。これは、メッセージ呼び出しの入力データ (つまり、パラメータ) を参照します。たとえば、スマート コントラクトがドメイン名登録サービスとして機能する場合、コントラクトの呼び出しにはドメイン名や IP アドレスなどの入力フィールドが必要になることがあります。

アカウントの章では、メッセージ呼び出しや契約作成トランザクションなどのトランザクションは常に外部アカウントによって開始され、ブロックチェーンに送信されることを学びました。別の考え方としては、これらのトランザクションが外の世界と Ethereum の内部をつなぐ橋渡しの役割を果たしていると言えます。

しかし、これはこれらの契約が他の契約と通信できないことを意味するものではありません。 Ethereum 状態の範囲内に存在するコントラクトは、同じ範囲内に存在する他のコントラクトと通信できます。通信方法は「メッセージ」または「内部トランザクション」を介して行われます。メッセージや内部トランザクションはトランザクションに似ていると考えることができますが、主な違いは、外部アカウントによって生成されないことです。代わりに、それらは契約によって生成されます。これらは仮想オブジェクトであり、トランザクションとは異なりシリアル化されておらず、Ethereum 実行環境にのみ存在します。

コントラクトが別のコントラクトに内部トランザクションを送信すると、受信側のコントラクト アカウントに関連付けられたコードが実行されます。

内部トランザクションまたはメッセージにはガス制限が含まれていないことに注意することが重要です。ガス制限は、元の契約の外部作成者、つまり外部アカウントによって決定されるためです。外部アカウントによって設定されたガス制限は、トランザクションによって引き起こされるサブ実行を含め、トランザクションを実行するのに十分な高さである必要があります。たとえば、契約間のメッセージなどです。

トランザクションとメッセージのチェーンで、特定のメッセージ実行のガスが不足した場合、そのメッセージの実行は、その実行によってトリガーされた後続のメッセージとともに元に戻されます。ただし、親の実行を復元する必要はありません。

ブロック

すべてのトランザクションはブロックにグループ化されます。ブロックチェーンは、相互にリンクされた一連のブロックで構成されています。 Ethereum では、ブロックには次のものが含まれます。

  • ブロックヘッダー

  • ブロックに含まれるトランザクションのセットに関する情報

  • 現在のブロックのオマーの他のブロックヘッダーのセット

オマーズについて

ommer とは何でしょうか? Ommer は、親ブロックが現在のブロックの親ブロックの親ブロックと同等であるブロックです。 ommer が何に使用されているか、またブロックのヘッダーに ommer が含まれているのはなぜかを簡単に説明します。

イーサリアムの構築方法により、ブロック時間は他のブロックチェーンよりも短くなっています。たとえば、ビットコインのブロック時間は 1 ブロックあたり 10 分であるのに対し、イーサリアムでは約 15 秒/ブロックです。これにより、より高速な取引が可能になります。ただし、ブロック時間が短くなると、マイナーが競合するブロックが増えるという欠点があります。これらの競合ブロックは「孤立ブロック」とも呼ばれます (つまり、マイニングされたブロックはメイン チェーンに入らなかった)。

ommers の目的は、これらの孤立ブロックを含めるマイナーに報酬を与えることです。マイナーによって組み込まれるオマーは「有効」である必要があります。つまり、現在のブロックから 6 世代以内である必要があります。 6 世代後、古いトランザクションを含めると状況が複雑になるため、古い孤立ブロックは参照されなくなります。

オマー ブロックは、フル ブロックよりも少ない報酬を受け取ります。それにもかかわらず、マイナーにとってこれらの孤立ブロックを含めて報酬を得るインセンティブはまだあります。

ブロックヘッダー

ブロックに戻りましょう。前に述べたように、各ブロックにはブロック ヘッダーがあります。それは正確には何ですか?

ブロック ヘッダーはブロックの一部であり、次のものが含まれます。

  • parentHash: 親ブロック ヘッダーのハッシュ値 (ブロックをチェーンに接続するのにも使用されます)

  • ommersHash: 現在のブロックのommersリストのハッシュ値

  • 受取人: マイニング手数料を受け取るアカウントアドレス

  • stateRoot: 状態トライのルートノードのハッシュ (状態トライはブロック ヘッダーに格納され、軽量クライアントが状態に関する情報を確認するのに便利です)

  • トランザクションルート: ブロックにリストされているすべてのトランザクションを含むトライのルートノードハッシュ値

  • 受領書ルート: ブロックにリストされているすべてのトランザクション受領書を含むトライのルートノードハッシュ

  • logsBloom: ログ情報を含むブルームフィルタ(データ構造)

  • 難易度: ブロックの難易度

  • 番号: 現在のブロックの数 (ジェネシス ブロックのブロック番号は 0 で、その後の各ブロックは順番に増加します)

  • gasLimit: ブロックあたりの現在のガス制限

  • タイムスタンプ: ブロックの開始の Unix タイムスタンプ

  • extraData: ブロックに関連する追加データ

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

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

各ブロック ヘッダーに 3 つのトライ構造が含まれていることに注目してください。

  • 状態 (stateRoot)

  • トランザクション (transactionRoot)

  • 領収書 (receiptsRoot)

これらのトライ構造は、前述の Merkle Patricia トライと同じです。さらに、上記の説明の一部の用語は明確にする必要があります。

ログ

Ethereum では、さまざまなトランザクションやメッセージの追跡を容易にするためにログを使用できます。契約では、「イベント」を定義することでログを明確に生成できます。ここで、「イベント」とはログに記録するものです。

ログエントリには次の内容が含まれます。

  • ロガーのアカウントアドレス

  • このトランザクションの実行におけるさまざまなイベントを表す一連のトピック

  • これらのイベントに関連するデータ

ログは、無限のログ データを効率的に保存するブルーム フィルターに保存されます。

取引受領書

ブロック ヘッダーに保存されるログは、トランザクション レシートに含まれるログ情報から派生します。お店で何かを購入したときにレシートを受け取るのと同じように、Ethereum はすべての取引に対してレシートを生成します。ご想像のとおり、各領収書には取引に関する情報が含まれています。領収書には次の内容が記載されています。

  • ブロック番号

  • ブロックハッシュ

  • トランザクションハッシュ

  • 現在のトランザクションで使用されたガス

  • 現在のトランザクションが実行された後に現在のブロックによって使用された累積ガス

  • 現在のトランザクションの実行時に作成されたログ

  • ......等

ブロック難易度

ブロックの「難易度」は一貫性を実現するために使用され、これによりブロックの検証にかかる時間がほぼ一定になります。ジェネシスブロックの難易度は131,072で、その後の各ブロックのマイニング難易度を計算するために特別な計算式が使用されます。ブロックが前のブロックよりも早く検証された場合、Ethereum プロトコルはブロックの難易度を上げます。

ブロックの難易度は、ブロックをマイニングするときにマイナーが PoW アルゴリズムを使用して計算する必要があるハッシュ値である nonce に影響します。ブロックの難易度と nonce の関係は、次のように数学的に形式化できます。

ここで、Hd は難易度です。

難易度しきい値を満たす nonce を見つける唯一の方法は、PoW アルゴリズムを使用してすべての可能性を尽くすことです。解決策を見つけるのに予想される時間は難易度に比例します。難易度が高いほど、ナンスを見つけるのが難しくなり、ブロックを検証するのが難しくなり、新しいブロックの検証にかかる時間が長くなります。したがって、ブロックの難易度を調整することで、プロトコルはブロックの検証にかかる時間を制御できます。

一方、検証時間が長くなると、プロトコルは難易度を下げます。このようにして、検証時間は一定速度(平均して 15 秒ごとに 1 ブロック)を維持するように調整されます。

取引執行

ここで、Ethereum プロトコルの最も複雑な部分の一つであるトランザクションの実行について説明します。処理のためにトランザクションを Ethereum ネットワークに送信するとします。 Ethereum の状態が変換されてトランザクションが含まれるようになると何が起こりますか?

まず、すべての取引は、実行される前に、一連の初期設定要件を満たす必要があります。これらには以下が含まれます:

  • トランザクションは適切に形成された RLP である必要があります。 「RLP」は「Recursive Length Prefix」の略で、バイナリ データのネストされた配列をエンコードするために使用されるデータ形式です。 RLP は、Ethereum がオブジェクトをシリアル化するために使用する形式です。

  • 有効なトランザクション署名

  • 有効なトランザクション nonce。アカウントの nonce は、そのアカウントから送信されたトランザクションの数であることを思い出してください。有効にするには、トランザクション nonce が送信者のアカウントの nonce と等しくなければなりません。

  • トランザクションのガス制限は、トランザクションで使用される固有のガスと同等かそれ以上である必要があります。内在ガスには以下が含まれます。

1. トランザクションを実行するための21,000ガスの事前定義されたコスト

2. トランザクションで送信されたデータのガス料金(ゼロのデータまたはコード1バイトあたり4ガス、ゼロ以外のデータまたはコード1バイトあたり68ガス)

3. 取引が契約作成取引である場合、さらに32,000ガスが追加されます。

  • 送信者のアカウント残高には、送信者が支払わなければならない「事前に決められた」ガスコストをカバーするのに十分なイーサがなければなりません。 「事前に決定された」ガス コストの計算は簡単です。まず、トランザクションのガス制限にトランザクションのガス価格を掛けて、最大ガス コストを算出します。次に、送信者から受信者に転送される合計値である合計値に最大コストが追加されます。

取引が上記の有効性要件をすべて満たしている場合は、次のステップに進みます。

まず、送信者の残高から所定の実行コストを差し引き、現在のトランザクションを考慮して送信者のアカウント nonce を 1 増やします。この時点で、残りのガスを計算できます。残りのガスは、トランザクションの合計ガス制限から使用された固有のガスを差し引いたものです。

次に、トランザクションの実行が開始されます。トランザクションの実行中、Ethereum は「サブ状態」を追跡します。このサブステートは、トランザクションが完了した直後に必要となる、トランザクション中に生成された情報を記録する方法です。具体的には、次のものが含まれます。

  • 自己破壊セット: 取引が完了した後に放棄されるアカウントのセット (存在する場合)

  • ログ シリーズ: 仮想マシン コード実行のアーカイブおよびインデックス可能なチェックポイント。

  • 返金残高: 取引後に送金者の口座に返金される金額。 Ethereum のストレージには費用がかかり、送信者はストレージをクリアすると返金されると述べたことを覚えていますか? Ethereum は払い戻しカウンターを使用してこれを追跡します。払い戻しカウンターはゼロから始まり、契約がストレージをクリアするたびに増加します。

次に、トランザクションに必要なさまざまな計算が処理されます。

トランザクションに必要なすべてのステップが処理されると、無効な状態がないと仮定して、送信者に払い戻される未使用のガスの量を決定することによって最終状態が達成されます。未使用ガスに加えて、送信者は上記の「払い戻し残高」からいくらかの手当を受け取ることもできます。

送信者が払い戻しを受けたら:

  • ガスのイーサはマイナーに与えられている

  • トランザクションで使用されたガスは、ブロック ガス カウンターに追加されます (ブロック内のすべてのトランザクションで使用されたガスの合計を追跡し、ブロックを検証するときに役立ちます)

  • 自己破壊セット内のすべてのアカウントが削除されます(存在する場合)

最後に、新しい状態とトランザクションによって作成されたログのセットが残ります。トランザクション実行の基本について説明したので、次はトランザクションと、契約を作成するメッセージ呼び出しの違いについて見ていきましょう。

- つづく - -

この記事の著者は、medium.com の Preethi Kasireddy 氏で、Blue Fox Notes コミュニティの「Leo」氏が翻訳しました。

<<:  1.3兆ドル!ビットコインの年間取引量が再びPayPalを上回る

>>:  Innosilicon Grin ASIC マイナーの先行販売開始

推薦する

アナリスト:今回のビットコイン暴落は「3月の弱気相場」に過ぎず、今後も上昇を続けるだろう

ビットコインは昨日、45,000ドルを下回り、新たな安値を記録しました。ビットコインは過去2日間で2...

ブロックチェーン:銀行家、警察、規制当局が共有する夢?

2016年1月、大手銀行やテクノロジー企業が、ブロックチェーン関連技術を活用してビジネスモデルを革...

観察 |なぜマイナーは Uniswap で非常に低いガス料金でトランザクションをパッケージ化するのでしょうか?

著者: テイラー W DeFiの普及により、イーサリアムは非常に混雑していますが、興味深いのは、ガス...

ビットコイン取引所Cointraderがハッカー攻撃を受けて閉鎖

カナダを拠点とするビットコイン取引所Cointraderは、ハッカー攻撃を理由に今週初めに閉鎖を発表...

ドバイの「ビットコインマンション」50棟が完売、誰かが一気に10棟購入

ドバイのスカイライン。昨年9月、英国の億万長者ダグラス・バロウマン氏と恋人の「ランジェリーの女王」ミ...

カナンテクノロジーはウォール街で弱気:関連当事者取引、訴訟、大規模な商業詐欺に関与した顧客

原作者: マルクス・アウレリウス編集者注:証券市場に参入した最初のビットコインマイニングマシンメーカ...

複数のBCHノード開発者は、今年11月に新しいアルゴリズムを実装すると発表した。

Blockbeatsによると、8月7日、複数のBCHノード開発者が共同声明を発表し、2020年11...

Xindong採掘機T3の実測データは50Tです。これは一体何の魔法の採掘機なのでしょうか?

Innosilicon T3 ビットコイン マイナーは 43T を標準として設計されています。実際...

世界で唯一の量産型イーサリアム ASIC モデル - Innosilicon A11 初レビュー

世界で唯一の量産型イーサリアムASICモデル - Innosilicon A11初レビュー世界で唯一...

弁護士がEUの仮想通貨の重要な定義を説明する

著者の Jacek Czarnecki 氏は、Wardynski & Partners の弁...

ビットコインは価値のアンカーになりつつあるか?

なぜテラはビットコインを買うために数十億ドルを費やしているのでしょうか?ここ数週間でビットコインを最...

イーサリアム開発会社ビーコンチェーンがASICチップを模索

イーサリアムの開発者は最近、3000万ドルの予算で、信じられないほど高速なプロセッサを実現する何百万...

イーサリアム(フォーク)eスポーツプラットフォーム「First Blood」がわずか数分でクラウドファンディングを完了し、550万ドルを調達

暗号通貨分野におけるクラウドファンディングの取り組みは、今のところ目新しいものではありません。有望な...