ノードアーキテクチャ
最終更新: 2026年2月26日
イーサリアムのノードは、実行クライアントとコンセンサスクライアントの2つのクライアントで構成されています。 新しいブロックを提案するノードでは、バリデータクライアントも実行する必要があります。
イーサリアムがプルーフ・オブ・ワークを採用していた頃は、実行クライアントだけで完全なイーサリアムノードを稼働させることができました。 しかし、プルーフ・オブ・ステークの実装以降、実行クライアントはコンセンサスクライアントと呼ばれる別のソフトウェアと併用しなければならなくなりました。
以下の図は、2つのイーサリアムクライアント間の関係を示しています。 それぞれのクライアントは、独自のピアツーピア(P2P)・ネットワークに接続しています。 実行クライアントは、ピアツーピア・ネットワークでトランザクションをゴシップし、ローカルのトランザクションプールを管理することができます。一方、コンセンサスクライアントは、ピアツーピア・ネットワークでブロックをゴシップし、コンセンサスを確立し、チェーンの成長を促進します。そのため、別々のピアツーピア・ネットワークが必要になります。
実行クライアントには、Erigon、Nethermind、Besuなど、いくつかの選択肢があります。
この2つのクライアント構造を機能させるには、コンセンサスクライアントがトランザクションのバンドルを実行クライアントに渡す必要があります。 実行クライアントは、トランザクションがイーサリアムのルールに違反していないこと、提案されたイーサリアムの状態に対するアップデートが正しいことを検証するために、トランザクションをローカルで実行します。 ノードがブロック生成者に選ばれた場合、そのコンセンサスクライアントのインスタンスは、新しいブロックに含めるトランザクションのバンドルを実行クライアントに要求し、それらのトランザクションを実行してグローバル状態をアップデートします。 コンセンサスクライアントは、Engine API (opens in a new tab)を使用して、ローカルRPC接続を介して実行クライアントを駆動します。
実行クライアントの役割
実行クライアントは、トランザクションの検証、処理、ゴシップ、状態管理、そしてイーサリアム仮想マシン (EVM) のサポートを担当します。 ブロックの構築、ブロックのゴシップ、コンセンサスロジックの処理は担当しません。 これらは、コンセンサスクライアントが行います。
実行クライアントは、トランザクションのリスト、更新された状態ツリー、その他の実行に関わるデータ等の実行ペイロードを作成します。 コンセンサスクライアントは、各ブロックごとに実行ペイロードを取り込みます。 実行クライアントには、新しいブロックでトランザクションを再実行して、トランザクションが有効であることを確認する役割もあります。 トランザクションの実行は、イーサリアム仮想マシン(EVM)として知られる、実行クライアントに組み込まれたコンピュータ上で行われます。
実行クライアントは、RPCメソッドを介してイーサリアムへのユーザーインターフェースも提供します。これにより、ユーザーはイーサリアムブロックチェーンへのクエリ、トランザクションの送信、スマートコントラクトのデプロイが可能になります。 RPCコールは、Web3js (opens in a new tab)やWeb3py (opens in a new tab)のようなライブラリ、またはブラウザウォレットなどのユーザーインターフェースによって処理されるのが一般的です。
要約すると、実行クライアントは、以下の役割を担っています。
- イーサリアムへのユーザーゲートウェイ
- イーサリアム仮想マシン、イーサリアムの状態およびトランザクションプールのホーム
コンセンサスクライアントの役割
コンセンサスクライアントは、ノードがイーサリアムネットワークとの同期を維持するための、すべてのロジックを扱います。 具体的には、ピアからブロックを受信し、フォーク選択アルゴリズムを実行して、バリデータの有効残高に応じて最も多くのアテステーションを蓄積しているチェーンを常時フォローします。 実行クライアントと同様に、コンセンサスクライアントにも独自のピアツーピア・ネットワークがあります。そのネットワークを通じて、ブロックとアテステーションを共有します。
コンセンサスクライアントは、ブロックの証明やブロックの提案には参加しません。これは、バリデータが行います。バリデータは、コンセンサスクライアントにあるオプションのアドオンです。 バリデータがないコンセンサスクライアントは、チェーンの先頭に追い付き、ノードを同期するだけです。 これにより、ユーザーは正しいチェーン上にいることを確認でき、実行クライアントを使用してイーサリアムでトランザクションを行うことができます。
バリデータ
ステーキングを行い、バリデータソフトウェアを実行することで、ノードは新しいブロックの提案候補者となることができます。 ノードオペレーターは、デポジットコントラクトに32ETHを入金することで、コンセンサスクライアントにバリデータを追加することができます。 バリデータクライアントは、コンセンサスクライアントにバンドルされており、いつでもノードに追加することができます。 バリデータは、アテステーションとブロック提案を行います。 これにより、ノードが報酬を得られるようになる一方、ペナルティやスラッシングによってETHを失うこともあります。
ノードのコンポーネントの比較
| 実行クライアント | コンセンサスクライアント | バリデータ |
|---|---|---|
| ピアツーピア・ネットワークを介したトランザクションのゴシップを行う | ピアツーピアを介したブロックとアテステーションのゴシップを行う | ブロックの提案を行う |
| トランザクションを実行/再実行する | フォークチョイスアルゴリズムを実行する | 報酬またはペナルティを発生させる |
| 受信した状態の変更を検証する | チェーンの先頭を追跡する | アテステーションを作成する |
| 状態ツリーとレシートツリーを管理する | ビーコン状態(コンセンサス情報や実行情報を含む) を管理する | ステークには32ETHが必要となる |
| 実行ペイロードを作成する | RANDAO(バリデータの選択やその他のコンセンサスオペレーションに検証可能なランダム性を提供するアルゴリズム)に累積されたランダム性を記録する | スラッシュされる可能性がある |
| イーサリアムとやり取りできるJSON-RPC APIを公開する | 正当化とファイナライズを追跡する |
