メインコンテンツへスキップ
Change page

ノードのアーキテクチャ

イーサリアムのノードは、実行クライアントコンセンサス・クライアントの2つのクライアントで構成されています。ノードが新しいブロックを提案するには、バリデータクライアントも実行する必要があります。

イーサリアムがプルーフ・オブ・ワーク (PoW)を使用していたときは、完全なイーサリアムノードを実行するには実行クライアントだけで十分でした。しかし、プルーフ・オブ・ステーク (PoS)を実装してからは、実行クライアントはコンセンサス・クライアントと呼ばれる別のソフトウェアと一緒に使用する必要があります。

以下の図は、2つのイーサリアムクライアントの関係を示しています。2つのクライアントは、それぞれ独自のピア・ツー・ピア (P2P) ネットワークに接続します。実行クライアントはP2Pネットワーク上でトランザクションをゴシップしてローカルのトランザクション・プールを管理し、コンセンサス・クライアントはP2Pネットワーク上でブロックをゴシップしてコンセンサスとチェーンの成長を可能にするため、別々のP2Pネットワークが必要になります。

Diagram of Ethereum node architecture showing execution and consensus layers

実行クライアントには、エリゴン、ネザーマインド、Besuなど、いくつかの選択肢があります

この2クライアント構造が機能するためには、コンセンサス・クライアントがトランザクションのバンドルを実行クライアントに渡す必要があります。実行クライアントはトランザクションをローカルで実行し、トランザクションがイーサリアムのルールに違反していないこと、および提案されたイーサリアムの状態の更新が正しいことを検証します。ノードがブロック生成者として選択されると、そのコンセンサス・クライアントのインスタンスは、新しいブロックに含めるトランザクションのバンドルを実行クライアントに要求し、それらを実行してグローバルな状態を更新します。コンセンサス・クライアントは、Engine API (opens in a new tab)を使用したローカルRPC接続を介して実行クライアントを駆動します。

実行クライアントの役割とは?

実行クライアントは、トランザクションの検証、処理、ゴシップ、および状態の管理とEthereum Virtual Machine (EVM) のサポートを担当します。ブロックの構築、ブロックのゴシップ、またはコンセンサスロジックの処理は担当しません。これらはコンセンサス・クライアントの役割です。

実行クライアントは、トランザクションのリスト、更新されたステート・トライ、およびその他の実行関連データである実行ペイロードを作成します。コンセンサス・クライアントは、すべてのブロックに実行ペイロードを含めます。実行クライアントは、新しいブロック内のトランザクションを再実行して、それらが有効であることを確認する責任もあります。トランザクションの実行は、Ethereum Virtual Machine (EVM)として知られる、実行クライアントに組み込まれたコンピューター上で行われます。

実行クライアントはまた、ユーザーがイーサリアムのブロックチェーンを照会し、トランザクションを送信し、スマートコントラクトをデプロイできるようにするRPCメソッドを通じて、イーサリアムへのユーザーインターフェースを提供します。RPC呼び出しは、Web3js (opens in a new tab)Web3py (opens in a new tab)などのライブラリ、またはブラウザウォレットなどのユーザーインターフェースによって処理されるのが一般的です。

要約すると、実行クライアントは以下の通りです。

  • イーサリアムへのユーザーゲートウェイ
  • Ethereum Virtual Machine、イーサリアムの状態、およびトランザクション・プールのホーム

コンセンサス・クライアントの役割とは?

コンセンサス・クライアントは、ノードがイーサリアムネットワークと同期し続けることを可能にするすべてのロジックを処理します。これには、ピアからブロックを受信し、フォーク選択アルゴリズムを実行して、ノードが常に(バリデータの有効残高で重み付けされた)アテステーションの蓄積が最も多いチェーンに従うようにすることが含まれます。実行クライアントと同様に、コンセンサス・クライアントは独自のP2Pネットワークを持ち、それを通じてブロックとアテステーションを共有します。

コンセンサス・クライアントは、ブロックのアテステーションや提案には参加しません。これは、コンセンサス・クライアントのオプションのアドオンであるバリデータによって行われます。バリデータを持たないコンセンサス・クライアントは、チェーンの先頭に追従するだけであり、ノードが同期された状態を維持できるようにします。これにより、ユーザーは正しいチェーン上にいると確信して、実行クライアントを使用してイーサリアムとトランザクションを行うことができます。

バリデータ

ステーキングを行い、バリデータソフトウェアを実行することで、ノードは新しいブロックを提案するために選択される資格を得ます。ノードオペレーターは、デポジット・コントラクトに32 ETHをステークすることで、コンセンサス・クライアントにバリデータを追加できます。バリデータクライアントはコンセンサス・クライアントにバンドルされており、いつでもノードに追加できます。バリデータはアテステーションとブロックの提案を処理します。また、ノードが報酬を蓄積したり、ペナルティやスラッシングによってETHを失ったりすることも可能にします。

ステーキングの詳細

ノードのコンポーネントの比較

実行クライアントコンセンサス・クライアントバリデータ
P2Pネットワーク上でトランザクションをゴシップするP2Pネットワーク上でブロックとアテステーションをゴシップするブロックを提案する
トランザクションを実行/再実行するフォーク選択アルゴリズムを実行する報酬/ペナルティを蓄積する
受信した状態の変更を検証するチェーンの先頭を追跡するアテステーションを行う
状態とレシートのトライを管理するビーコンの状態(コンセンサスと実行の情報を含む)を管理する32 ETHのステーキングが必要
実行ペイロードを作成するRANDAO(バリデータの選択やその他のコンセンサス操作に検証可能なランダム性を提供するアルゴリズム)に蓄積されたランダム性を追跡するスラッシングされる可能性がある
イーサリアムと対話するためのJSON-RPC APIを公開する正当化 (justification) とファイナライゼーションを追跡する

参考文献