Skip to content

Ethereum


Ethereumの仕組み

① P2Pネットワークプロトコル

Ethereumは分散型のP2P(Peer-to-Peer)ネットワークを基盤としています。このネットワークはDevP2Pと呼ばれるプロトコルスタックを使用しています。

graph TD
    A[Ethereum ノード] -- DevP2P --> B[Ethereum ノード]
    A -- DevP2P --> C[Ethereum ノード]
    B -- DevP2P --> C
    B -- DevP2P --> D[Ethereum ノード]
    C -- DevP2P --> D
    A -- DevP2P --> D

    subgraph "DevP2P プロトコルスタック"
    E[アプリケーションプロトコル:eth,les,snap等]
    F[RLPx トランスポート]
    G[ディスカバリープロトコル]
    end

DevP2Pの主要コンポーネント

  • ノードディスカバリー:Kademlia DHT(分散ハッシュテーブル)ベースのプロトコルを使用して新しいピアを発見します。UDPを使用します。
  • RLPx:暗号化されたトランスポートプロトコルで、ノード間の安全な通信を可能にします。TCPを使用します。
  • サブプロトコル:eth(メインのEthereumプロトコル)、les(Light Ethereum Subprotocol)、snap(スナップショットシンク)などがあります。

各ノードは、ブロックとトランザクションの伝播を通じてネットワークの状態を同期します。

② ETH1署名の仕様

Ethereum 1.0(執行層)では、楕円曲線デジタル署名アルゴリズム(ECDSA)を使用してトランザクションに署名します。具体的にはsecp256k1曲線が使用されています。

sequenceDiagram
    participant A as ユーザー
    participant B as 秘密鍵
    participant C as トランザクションデータ
    participant D as 署名生成
    participant E as ネットワーク

    A->>B: 秘密鍵を保持
    A->>C: トランザクションを作成
    C->>D: トランザクションハッシュの計算
    B->>D: 秘密鍵を使用
    D->>E: 署名付きトランザクションを送信
    Note over D: ECDSA (secp256k1)

署名プロセス

  • メッセージハッシュ:トランザクションデータをKeccak-256(Ethereumの変形SHA-3)でハッシュ化
  • 署名生成:秘密鍵を使用してハッシュに署名(r, s, v の3つの値で構成)
  • v値:リカバリーID(鍵の復元に使用)、チェーンIDを含む場合があります
  • アドレス検証:署名から公開鍵を復元し、それをハッシュ化してアドレスと比較

③ ETH2署名の仕様

Ethereum 2.0(コンセンサス層)では、BLS(Boneh-Lynn-Shacham)署名が使用されています。これはより効率的な集約署名を可能にします。

graph TD
    A[バリデータ] -->|秘密鍵| B[BLS署名生成]
    C[メッセージ/アテステーション] --> B
    B --> D[署名]
    E[他のバリデータの署名] --> F[署名集約]
    D --> F
    F --> G[集約署名]
    G --> H[検証]

    subgraph "BLS署名の特徴"
    I[署名集約が可能]
    J[検証の効率化]
    K[決定的な署名]
    end

BLS署名の主要特性

  • 署名の集約:複数の署名を単一の署名に集約でき、検証が効率的になります
  • 決定的:同じメッセージと秘密鍵から常に同じ署名が生成されます
  • 使用曲線:BLS12-381楕円曲線を使用しています
  • 適用場所:主にステーキング、アテステーション、ブロック提案に使用されます

④ ブロックチェーンの仕様

Ethereumのブロックチェーンは、トランザクションを含むブロックがリンクされた構造を持ちます。現在はEthereum 1.0(執行層)とEthereum 2.0(コンセンサス層)が共存しています。

graph LR
    A[ジェネシスブロック] --> B[ブロック #1]
    B --> C[ブロック #2]
    C --> D[...]
    D --> E[ブロック #n-1]
    E --> F[ブロック #n]

    subgraph "Ethereum 2.0(コンセンサス層)"
    G[ビーコンチェーン]
    H[シャード 0]
    I[シャード 1]
    J[...]
    K[シャード 63]
    end

    subgraph "Ethereum 1.0(執行層)"
    F
    end

    G --- F

Ethereum 1.0(執行層)のブロック構造

  • ヘッダー:前のブロックハッシュ、タイムスタンプ、難易度、ノンス等のメタデータ
  • トランザクションリスト:ブロックに含まれる全てのトランザクション
  • アンクルブロックヘッダー:(あれば)有効だが、メインチェーンに含まれなかったブロック
  • ステート:全アカウントの最新状態(直接ブロックには保存されず、マークルパトリシアツリーで参照)

Ethereum 2.0(コンセンサス層)の構造

  • ビーコンチェーン:システム全体を調整するメインチェーン
  • エポック:32スロット(約6.4分)で構成される時間単位
  • スロット:12秒ごとのブロック生成機会
  • バリデータ:32 ETHをステーキングして、ブロック生成と検証に参加するノード
  • シャード:並列処理を可能にする64のチェーン(将来的に実装予定)

Ethereumは2022年9月のマージ以降、コンセンサスメカニズムとしてPoW(Proof of Work)からPoS(Proof of Stake)に移行しました。これにより、エネルギー消費を大幅に削減し、スケーラビリティを向上させています。

flowchart TD
    A[トランザクション] --> B[メモリプール]
    B --> C[バリデータ選択]
    C --> D[ブロック提案]
    D --> E[アテステーション]
    E --> F[ファイナリティ]
    F --> G[ブロックチェーンに追加]

    subgraph "PoS コンセンサス"
    C
    D
    E
    F
    end

PoSシステムでは、バリデータはランダムに選択され、彼らの持つステーク(預けたETH)に比例して選ばれる確率が高くなります。不正行為をすると、ステークの一部または全部が没収される仕組み(スラッシング)があり、セキュリティを確保しています。