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

ノードとクライアント

最終編集者: @, 2024年1月18日

イーサリアムは、「ノード」と呼ばれるコンピュータの分散型ネットワークです。ノードで実行されているソフトウェアが、ブロックとトランザクションデータを検証します。 このソフトウェアは、コンピュータをイーサリアムノードにするために、必ず実行する必要があります。 ノードを構成するには、 別々のソフトウェア (「クライアント」と呼ばれる) が2つ必要です。

前提知識

イーサリアムクライアントの詳細を学び、自分で動かすには、P2Pネットワークの概念とEVMの基本を理解する必要があります。 まずはイーサリアム入門を読んでください。

ノード運用初心者の方は、まずイーサリアムノードの運用というユーザーフレンドリーな導入方法をチェックすることをお勧めします。

ノードとクライアントとは

「ノード」とは、イーサリアムソフトウェアを実行している他のコンピュータと接続されたイーサリアムクライアントソフトウェアの任意のインスタンスであり、ネットワークを形成します。 「クライアント」とは、プロトコルルールに従ってデータを検証し、安全なネットワークを維持するイーサリアムの実装です。 ノードでは、コンセンサスクライアントと実行クライアントの2つのクライアントを実行する必要があります。

  • 実行クライアント(ELクライアントや実行エンジンとも呼ばれ、過去の名称はEth1クライアント)は、ネットワークでブロードキャストされた新たなトランザクションを受け取り、EVM(イーサリアム仮想マシン)でトランザクションを実行し、すべての現在のイーサリアムデータの最新の状態とデータベースを保持します。
  • コンセンサスクライアント(ビーコンノードやCLクライアントとも呼ばれ、過去の名称はETh2クライアント)は、プルーフ・オブ・ステークのコンセンサスアルゴリズムを実行し、実行クライアントからの検証されたデータに基づき、ネットワークの合意を形成します。 「バリデータ」と呼ばれる3つ目のソフトウェアもあります。バリデータをコンセンサスクライアントに追加することで、ネットワークのセキュリティの確保にノードを参加させることができます。

これらのクライアントは、連携してイーサリアムチェーンのヘッドを追跡し、ユーザーがイーサリアムネットワークとやり取りできるようにします。 複数のソフトウェアを組み合わせたモジュラー型設計は、カプセル化された複雑性(opens in a new tab)と呼ばれます。 このアプローチにより、マージをシームレスに実行できるようになりました。また、クライアントソフトウェアの保守や開発が容易になり、レイヤー2エコシステムなどの各クライアントを再利用できるようになりました。

実行クライアントとコンセンサスクライアントの連結 実行クライアントとコンセンサスクライアントの統合の簡略図

クライアントの多様性

実行クライアントコンセンサスクライアントは、それぞれ異なるチームが、さまざまなプログラミング言語を使って開発しています。

複数のクライアント実装が、単一のコードベースへの依存を減らし、ネットワークをより強固にします。 理想は、どのクライアントもネットワークの大多数を占めることなく、多様性を実現し、単一障害点を減らすことです。 また、多様な言語を揃えることで、デベロッパーコミュニティがより広範になり、デベロッパーの希望言語で開発できるようになります。

クライアントの多様性についての詳細

これらのクライアント実装は、すべて同じ仕様に従っています。 仕様はイーサリアムネットワークとブロックチェーンの機能や技術的な詳細を定義しており、 下記で確認することができます。

ネットワークのノードの追跡

イーサリアムネットワークのノードの概要をリアルタイムで提供しているトラッカーが複数あります。 しかし、分散型ネットワークの性質上、これらのクローラーはネットワークの一部しか把握できず、異なる結果を報告する可能性があることに注意してください。

ノードの類型

自分でノードを実行したい場合、ノードの種類を選ぶ必要があります。ノードにはいくつかの種類があり、それぞれデータの扱い方が異なります。 実際に、クライアントが実行できるノードには、ライトノード、フルノード、アーカイブノードの3種類があります。 また、同期時間を短縮する同期戦略のオプションを選ぶこともできます。 同期とは、イーサリアムの状態についての最新情報をどれだけ迅速に取得できるかを意味します。

フルノード

フルノードは、各ブロックごとのブロックボディーと状態データのダウンロードおよび検証に加え、ブロックチェーンの各ブロックの検証を行います。 フルノードにはさまざまな種類があります。ジェネシスブロックから開始してブロックチェーンの履歴にあるすべてのブロックを1つずつ検証するものや、 直近のブロックで有効性が信頼できるものから検証を開始するものがあります(例: Gethの「スナップ同期」) 。 ディスク領域を節約するため、フルノードは検証の開始位置に関係なく、比較的最近のデータ(通常は直近の128ブロック)のローカルコピーのみを保存し、古いデータを削除できるようにしています。 古いデータは、必要に応じて再生成されます。

  • 完全なブロックチェーンデータを保存(ただし、フルノードは定期的にプルーニングされており、最初のジェネシス(誕生)までさかのぼる状態は保存されていない)
  • ブロック検証に参加し、すべてのブロックと状態を検証する
  • すべての状態は、ローカルストレージから取得するか、フルノードによって「スナップショット」から再生成できます。
  • ネットワークに貢献し、リクエストに応じてデータを提供する

アーカイブノード

アーカイブノードは、ジェネシスからすべてのブロックを検証し、ダウンロードしたデータを永久に保存するフルノードです。

  • フルノードに保存されているすべてを保持し、過去の状態のアーカイブを構築する。 例えば、ブロック4,000,000のアカウント残高をクエリしたい場合、または簡単にかつ確実にトレースを使用してマイニングを行うことなく、自分のトランザクションセットをテストしたい場合などに必要。
  • データがテラバイト単位になるため、平均的なユーザーにとってアーカイブノードは魅力的なものではないが、ブロックエクスプローラー、ウォレットベンダー、チェーン分析などのサービスに有用。

アーカイブ以外の任意のモードでクライアントを同期すると、ブロックチェーンデータがプルーニングされます。 つまり、すべての過去の状態を保存するアーカイブは存在しませんが、フルノードは必要に応じて構築できます。

アーカイブノードの詳細

ライトノード

ライトノードは、すべてのブロックをダウンロードする代わりに、ブロックヘッダーのみをダウンロードします。 ブロックヘッダーには、ブロックの内容に関するサマリー情報が含まれています。 ライトノードは、必要に応じて、フルノードからブロックヘッダー以外の情報を取得します。 また、受信したデータをブロックヘッダーの状態ルートに対して個別に検証できます。 ライトノードでは、フルノードを実行するために必要な強力なハードウェアや高帯域幅がなくても、イーサリアムネットワークに参加できます。 最終的には、ライトノードは携帯電話や組み込み機器で動作できるようになる可能性があります。 ライトノードはコンセンサスには参加せず、マイナーやバリデータにはなれませんが、フルノードと同じ機能とセキュリティ保証でイーサリアムブロックチェーンにアクセスできます。

イーサリアムでは、ライトクライアントの開発が活発に行われています。コンセンサスレイヤーと実行レイヤーの新しいライトクライアントが、まもなくリリースされる予定です。 また、ゴシップネットワーク(opens in a new tab)を介して、ライトクライアントデータを提供する方法もあります。 ゴシップネットワークは、フルノードがリクエストに応答することなくライトノードのネットワークをサポートできるため効率的です。

イーサリアムでは現在、ライトノードは多数サポートされていませんが、今後急速に普及していくと考えられています。 特に、Nimbus(opens in a new tab)Helios(opens in a new tab)LodeStar(opens in a new tab)などのクライアントは、現在ライトノードを重点的に開発しています。

イーサリアムノードを運用する必要性

ノードを実行することで、イーサリアムを直接、トラストレスかつプライベートに利用することができます。また、イーサリアムのネットワークをより強固にし、分散化の促進に貢献することができます。

メリット

自分のノードを実行すると、プライベートで自己完結したトラストレスな形でイーサリアムを利用することができます。 クライアントを使って自分でデータを検証できるので、ネットワークを信頼する必要はありません。 「信頼するな、検証せよ」はブロックチェーンで頻繁に唱えられるマントラです。

  • ノードはすべてのトランザクションとブロックをコンセンサスルールに対して検証する。 つまり、ネットワークの他のノードに依存したり、完全に信頼する必要がない。
  • 自分のノードでイーサリアムウォレットを使用可能。 仲介業者に自分のアドレスや残高情報を渡す必要がないため、より安全かつプライベートに分散型アプリ(Dapp)を利用できる。 自身のクライアントですべてをチェックできる。 MetaMask(opens in a new tab)Frame(opens in a new tab)他の多くのウォレットはRPCインポート機能を提供し、自分のノードを使用できる。
  • イーサリアムからのデータに依存する他のサービスを実行および自分でホスト可能 (例えば、ビーコンチェーンのバリデータ、レイヤー2などのソフトウェア、インフラストラクチャ、ブロックエクスプローラー、ペイメントプロセッサーなど)。
  • 独自のカスタムRPCエンドポイントを提供できる。 このエンドポイントをコミュニティに公開することで、巨大な中央集権型プロバイダーへの依存を減らすことができる。
  • プロセス間通信(IPC)を利用してノードに接続、またはノードを書き換えプラグインとしてプログラムの読み込みが可能。 これにより、レイテンシーが低くなり、Web3ライブラリを使用して大量のデータを処理する場合、またはトランザクションをできるだけ早く置き換える必要がある場合に(フロントランニング)、非常に有用。
  • ETHを直接ステーキングでき、ネットワークの安全性に貢献し、同時に報酬を得ることができる。 始めるにはソロステーキングを参照。

アプリケーションやノードを介してイーサリアムにアクセスする方法

ネットワークのメリット

イーサリアムの健全性、セキュリティ、運用レジリエンスにとって、ノードの多様性は重要です。

  • フルノードがコンセンサスルールを強制するため、ルールに従わないブロックが受け入れられることはない。 これはネットワークのセキュリティ強化につながる(すべてのノードが完全な検証ができないライトノードの場合では、バリデータがネットワークに対して攻撃できる恐れがあるため)。
  • プルーフ・オブ・ステークの暗号経済的な防御を上回る攻撃の場合、正しいチェーンを選ぶフルノードによって、社会的回復が行われる。
  • ネットワークのノード数が増えることで、分散化の究極の目標である多様で堅牢なネットワークとなり、検閲耐性があり、信頼性の高いシステムになる。
  • フルノードからのブロックチェーンデータに依存するライトクライアントに、ブロックチェーンデータへのアクセスを提供する。 ライトノードはブロックチェーンの全データを保持せず、代わりに、ブロックヘッダーのステートルートを利用してデータを検証する。 また、必要に応じて、フルノードから追加情報のリクエストを行う。

フルノードを実行すると、バリデータを実行しなくても、イーサリアムネットワーク全体がそのメリットを享受することができます。

自分のノードの運用

自分のイーサリアムクライアントを運用してみませんか?

初心者向けの導入方法については、ノードの運用ページをご覧ください。

上級者の方は、自分のノードを立ち上げるを参照し、詳細やオプションを確認してください。

代替手段

自分のノードを設定するには、時間とリソースがかかりますが、必ずしも独自のインスタンスを実行する必要はありません。 サードパーティのAPIプロバイダーを利用すれば負担を軽減できます。 これらのサービスの概要については、 ノード・アズ・ア・サービス(NaaS)で確認してください。

コミュニティでパブリックなAPIを持つイーサリアムノードが運用されている場合、カスタムRPCを介してウォレットをコミュニティノードに向けることができ、ランダムなサードパーティを使うよりも、プライバシーを確保することができます。

一方で、自分のクライアントを運用している場合は、必要としている友人とクライアントを共有できます。

実行クライアント

イーサリアムコミュニティでは、異なるプログラミング言語で、さまざまなチームが開発した、複数のオープンソースの実行クライアント(旧称は「Eth1クライアント」または「イーサリアムクライアント」)を維持しています。 これにより、ネットワークがより強固になり、多様性を実現しています。 理想は、どのクライアントもネットワークの大部分を占めることなく、多様性を実現し、単一障害点を減らすことです。

この表は、いくつかのクライアントの情報をまとめたものです。 これらのクライアントはすべて、クライアントテスト(opens in a new tab)に合格しており、ネットワークのアップグレードによって最新の状態に維持されています。

クライアント言語オペレーティングシステムネットワーク同期戦略状態剪定
Geth(opens in a new tab)GoLinux、Windows、macOSメインネット、Sepolia、Goerliスナップ、フルアーカイブ、プルーン
Nethermind(opens in a new tab)C#、.NETLinux、Windows、macOSメインネット、Sepolia、Goerliなどスナップ(配信なし) 、高速、フルアーカイブ、プルーン
Besu(opens in a new tab)JavaLinux、Windows、macOSメインネット、Sepolia、Goerliなどスナップ、高速、フルアーカイブ、プルーン
Erigon(opens in a new tab)GoLinux、Windows、macOSメインネット、Sepolia、Goerliなどフルアーカイブ、プルーン
Reth(opens in a new tab)RustLinux、Windows、macOSメインネット、Sepolia、Goerliなどフルアーカイブ、プルーン

サポートされているネットワークの詳細については、イーサリアムネットワークをご覧ください。

各クライアントには、それぞれに応じたユースケースとメリットがあります。自分に合ったクライアントを選択してください。 多様性により、さまざまな機能やユーザー層に合わせた実装が可能です。 機能、サポート、プログラミング言語、またはライセンスなどの観点から、クライアントを選択することをお勧めします。

Besu

ハイパーレジャーBesuは、パブリックネットワークと許可型ネットワークの両方に対応する、エンタープライズグレードのイーサリアムクライアントです。 イーサリアムメインネットのすべての機能を実行するクライアントは、ConsenSys社によりサポートされています。トレースからGraphQLまで、幅広いモニタリング機能を備えており、公開コミュニティチャンネルと企業向けの商用SLAの両方に対応しています。 また、Javaで実装されており、Apache 2.0ライセンスです。

機能とセットアップの詳細については、Besuの完全版ドキュメント(opens in a new tab)に記載されています。

Erigon

Erigon(旧称: Turbo-Geth)は、Go Ethereumのフォークから派生したものであり、速度とディスク容量の効率を重視しています。 イーサリアムの完全に再設計された実装であり、現在はGoで書かれていますが、他の言語での実装も開発中です。 Erigonは、より高速で、よりモジュール化されており、より最適化されたイーサリアムの実装を目指しています。 2TB程度のディスク容量があれば、3日以内にフルアーカイブノードの同期が可能です。

Go Ethereum(Geth)

Go Ethereum(略してGeth)は、イーサリアムプロトコルのオリジナルの実装の1つです。 現在、最も普及しているクライアントであり、ユーザーやデベロッパー向けのツールの種類も豊富です。 Go言語で実装されており、完全にオープンソースで、GNU LGPL v3ライセンスの下で提供されています。

Gethの詳細については、ドキュメント(opens in a new tab)を参照してください。

Nethermind

Nethermindは、C# .NETの技術スタックで開発されたイーサリアムの実装で、LGPL-3.0ライセンスの下で提供されています。ARMを含むすべての主要なプラットフォームに対応しており、 以下のような優れたパフォーマンスを発揮します。

  • 最適化された仮想マシン
  • 状態アクセス
  • ネットワーク機能と、Prometheus/Grafanaダッシュボード、シークエンス・エンタープライズ・ロギング・サポート、JSON RPCトレース、分析プラグインなどの豊富な機能

また、Nethermindは、詳細なドキュメント(opens in a new tab)、強力な開発サポート、オンラインコミュニティ、プレミアムユーザー向けの24時間年中無休のサポートなど、充実したサポート体制を整えています。

コンセンサスクライアント

コンセンサスアップグレードに対応する複数のコンセンサスクライアント(旧称: 「Eth2」クライアント) があります。 コンセンサスクライアントは、フォーク選択アルゴリズム、アテステーションの処理、プルーフ・オブ・ステークの報酬とペナルティの管理など、コンセンサスに関連するロジックをすべて担っています。

クライアント言語オペレーティングシステムネットワーク
Lighthouse(opens in a new tab)RustLinux、Windows、macOSビーコンチェーン、Goerli、Pyrmont、Sepolia、Ropstenなど
Lodestar(opens in a new tab)TypeScriptLinux、Windows、macOSビーコンチェーン、Goerli、Sepolia、Ropstenなど
Nimbus(opens in a new tab)NimLinux、Windows、macOSビーコンチェーン、Goerli、Sepolia、Ropstenなど
Prysm(opens in a new tab)GoLinux、Windows、macOSビーコンチェーン、Gnosis、Goerli、Pyrmont、Sepolia、Ropstenなど
Teku(opens in a new tab)JavaLinux、Windows、macOSビーコンチェーン、Gnosis、Goerli、Sepolia、Ropstenなど

Lighthouse

Lighthouseは、Apache-2.0ライセンスの下、Rustで書かれたコンセンサスクライアントの実装です。 Sigma Primeによって管理されており、ビーコンチェーン誕生以降、安定したパフォーマンスで稼働しています。 また、さまざまなエンタープライズやステーキングプール、個人からの信頼を得ています。 デスクトップPCから高度な自動デプロイまで、あらゆる環境における安全性、パフォーマンス、相互運用性を目指しています。

ドキュメントは、Lighthouse Book(opens in a new tab)で参照できます。

Lodestar

Lodestarは、LGPL-3.0ライセンスの下、Typescriptで書かれた、本番環境に対応したコンセンサスクライアントの実装です。 ChainSafe Systems社によって管理されており、ソロステーカー、デベロッパー、研究者向けのコンセンサスクライアントの中で最も新しいものです。 Loadstarは、イーサリアムプロトコルをJavaScriptで実装した、ビーコンノードとバリデータクライアントから構成されています。 ライトクライアントでのイーサリアムの使いやすさを向上させ、より多くのデベロッパーグループがアクセスできるようにすることで、エコシステムの多様性にさらに貢献することを目指しています。

詳細については、Lodestarのウェブサイト(opens in a new tab)をご覧ください。

Nimbus

Nimbusは、Apache-2.0ライセンスの下、Nimで書かれたコンセンサスクライアントの実装です。 ソロステーカーやステーキングプールで使用されており、本番環境に対応したクライアントです。 Nimbusはリソース効率を重視して設計されており、リソースに制限のあるデバイスや企業のインフラストラクチャ上でも、安定性や報酬のパフォーマンスを損なわずに簡単に実行できます。 リソース利用量が少ないと、ネットワークに負荷がかかっても、クライアントは安全に動作します。

詳しくは、Nimbusのドキュメント(opens in a new tab)をご覧ください。

Prysm

Prysmは、GPL-3.0ライセンスの下、Goで書かれたフル機能のオープンソースのコンセンサスクライアントです。 オプションのWebアプリのUIを備え、自宅でステーキングするユーザーと機関ユーザーの両方に向けて、ユーザーエクスペリエンス、ドキュメント、設定可能性を優先しているのが特徴です。

詳しくは、Prysmのドキュメント(opens in a new tab)をご覧ください。

Teku

Tekuは、オリジナルのビーコンチェーンで誕生したクライアントの1つです。 セキュリティ、堅牢性、安定性、使いやすさ、パフォーマンスなどの基本的な目標に加えて、Tekuはさまざまなコンセンサスクライアント標準に完全に準拠することを特に重視しています。

Tekuは、非常に柔軟なデプロイメントオプションを提供しています。 ビーコンノードとバリデータクライアントをシングルプロセスとして実行できるので、ソロステーカーにとって非常に便利です。または、高度なステーキング操作を行う場合は、個別にノードを実行することもできます。 さらに、署名キーのセキュリティとスラッシング保護のために、Web3Signer(opens in a new tab)と完全に互換性があります。

Tekuは、Javaで実装されており、Apache 2.0でライセンスされています。 BesuやWeb3Signerを手がけるConsenSys社のプロトコルチームによって開発されています。 詳しくは、Tekuのドキュメント(opens in a new tab)をご覧ください。

同期モード

イーサリアムクライアントがネットワークの現在のデータを追って検証するには、最新のネットワーク状態と同期する必要があります。 そのためには、ピアからデータをダウンロードし、暗号的に完全性を検証した上で、ローカルのブロックチェーンデータベースを構築する必要があります。

同期モードには、さまざまなトレードオフを持つ異なるアプローチがあります。 また、各クライアントによって、同期アルゴリズムの実装が異なります。 そのため、実装の詳細については、必ずクライアントの公式ドキュメントを参照してください。

実行レイヤーの同期モード

フルアーカイブ同期

フル同期は、ヘッダー、トランザクション、レシートを含むすべてのブロックをダウンロードし、最初のジェネシス(誕生)からの全ブロックを実行することで、ブロックチェーンの状態を段階的に生成します。

  • すべてのトランザクションを検証することにより、信用する必要性を最小限に抑え、最高のセキュリティを提供
  • トランザクション数が増えると、全トランザクションを処理するのに数日から数週間かかることがある

フルスナップ同期

スナップ同期は、フルアーカイブ同期と同様に、ブロックごとにチェーンを検証します。ただし、ジェネシスブロックからではなく、本物のブロックチェーンの一部であることが確認されている、より直近の「信頼できる」チェックポイントから始めます。 ノードは、一定期間を経過したデータを削除しますが、定期的にチェックポイントを保存します。 これらのスナップショットは、すべての状態データを永久に保存するのではなく、必要なときに再生成するために使用されます。

  • 現在イーサリアムメインネットでデフォルトとなっている最速の同期戦略
  • セキュリティを損なうことなく、ディスク使用量とネットワーク帯域幅を大幅に節約可能

スナップ同期の詳細(opens in a new tab)

軽量同期(Light sync)

ライトクライアントモードでは、すべてのブロックヘッダーとブロックデータをダウンロードし、ランダムに検証を行います。 信頼できるチェックポイントからチェーンの先端までのみを同期します。

  • デベロッパーへの信頼と合意メカニズムに依存し、最新の状態のみを取得
  • クライアントは数分で現在のネットワーク状態で使用できるようになる

注: 現在、プルーフ・オブ・ステークのイーサリアムでは、軽量同期は利用できません。軽量同期の新しいバージョンが、まもなくリリースされる予定です。

ライトクライアントの詳細

コンセンサスレイヤーの同期モード

オプティミスティック同期

オプティミスティック同期はマージ後の同期戦略で、オプトインで下位互換性を備えており、実行ノードが確立された方法で同期できます。 実行エンジンは、ビーコンブロックを完全に検証せず、オプティミスティックに(楽観的に)インポートすることができます。そして、最新のブロックの先頭を探し、上記の方法でチェーンの同期を開始します。 次に、実行クライアントが追いつくと、ビーコンチェーンのトランザクションの有効性をコンセンサスクライアントに通知します。

オプティミスティック同期の詳細(opens in a new tab)

チェックポイント同期

チェックポイント同期は、弱い主観性同期とも呼ばれ、ビーコンノードの同期において優れたユーザーエクスペリエンスを実現します。 これは弱い主観性の前提に基づいており、最初のジェネシスブロックからではなく、最新の「弱い主観性チェックポイント」からビーコンチェーンを同期します。 ジェネシスブロックからの同期と同様の信頼性を保ちつつ、初期同期の時間を大幅に短縮できます。

実運用では、ノードがリモートサービスに接続して最新のファイナライズされた状態をダウンロードし、その時点からデータの検証を続けます。 データ提供元のサードパーティは信頼できるものである必要があるため、慎重に選ぶ必要があります。

チェックポイント同期(opens in a new tab)の詳細

参考文献

インターネット上には、イーサリアムクライアントに関する情報がたくさんあります。 その中から、特に参考になりそうなリソースをいくつか紹介します。

この記事は役に立ちましたか?