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)に比例して選ばれる確率が高くなります。不正行為をすると、ステークの一部または全部が没収される仕組み(スラッシング)があり、セキュリティを確保しています。