メインコンテンツまでスキップ

イーサリアムのブロック構造と合意するアルゴリズム

· 約3分

ブロックデータ構造

  • header: ヘッダー部
    • prevhash: 親ブロックのハッシュ値
    • ommers_hash: 競合が出ているブロックの情報を要約するハッシュ値
    • beneficiary: マイナーのアドレス(マイニングの報酬をもらうアドレス)
    • state_root: ステートのルートハッシュ値
    • transactions_root: ブロックに含めているトランザクションに対するルートハッシュ値
    • receipts_root: ???
    • logs_bloom: ???
    • difficulty: ブロックの難易度
    • number: このブロックの番号
    • gas_limit: ガスの制限値
    • gas_used: 実際使ったガス値
    • timestamp: タイムスタンプ
    • extra_data: 関連データ???
    • mixhash: nonce と組み合わせて、十分な量の計算を行ったことの証明
    • nonce: mixhash と組み合わせて、十分な量の計算を行ったことの証明
  • transactions: トランザクションのリスト
  • ommer_block_headers: 競合しているブロックのヘッダーのリスト

チェーンの競合を解決する方法

  • イーサリアムのブロック生成間隔が15秒ので、ビットコインの10分間と比べると、異なるマイナーが同時に新しいブロックを作成する確率が多くなってしまう
  • 同時に複数のチェーンが出てしまう場合は、基本の方針はビットコインと同じく、「最も長いチェーンが正しいとみなす」ですが、この 最も長い の定義は少し異なっている。
  • ビットコインの場合単に、ブロックの数で判定されますが、イーサリアムはそうではなく、最も計算量が蓄積された ほうがメインチェーンとみなす
  • ここでの計算量がそのチェーンだけではなく、そのチェーンから派生したチェーンの計算量も合計している。ここで使うために、競合しているブロックのヘッダーの関連情報を持っているわけ。

疑問

  • transactions_root はデータ部のトランザクションリストから算出されているのは理解できていますが、state_rootreceipts_rootはどのデータから計算するだろう

参考記事