自分のイーサリアムノードの立ち上げ
最終編集者: @HiroyukiNaito(opens in a new tab), 2024年7月23日
自分自身のノードを立ち上げ、運用することは、さまざまなメリットがあります。新しい可能性が開かれ、エコシステムのサポートへの貢献にもつながります。 このページは、自分のノードを立ち上げ、イーサリアムのトランザクション検証に参加する方法について説明します。
マージ以降、イーサリアムノードの運用には、実行レイヤー(EL)クライアントとコンセンサスレイヤー(CL)クライアントの2つが必要であることに注意してください。 このページでは、この2つのクライアントをインストール、設定、接続してイーサリアムノードを立ち上げる方法を紹介します。
前提知識
イーサリアムノードが何か、なぜクライアントを実行するのかに関する理解が必要です。 これらについては、ノードとクライアントに記載されています。
初めてノードを運用する方や、あまり技術的な知識が必要でない方法をお探しの方は、まずイーサリアムノードの運用というユーザーフレンドリーな説明を確認してください。
アプローチの選択
ノードを立ち上げる最初のステップは、アプローチを選ぶことです。 要件やさまざまな可能性に基づき、クライアントの実装(実行クライアントとコンセンサスクライアント両方)、環境(ハードウェア、システム)、クライアント設定のパラメータを選択する必要があります。
本ページではこれらについて説明し、あなたにとって最適なイーサリアムインスタンスの実行方法を見つけるサポートをします。
クライアントを選択する上で、メインネット対応している利用可能なすべての実行クライアントとコンセンサスクライアントを確認し、クライアントの多様性について理解を深めてください。
クライアントの要件を確認し、ソフトウェアを自分のハードウェア、またはクラウド上で実行するかを決めます。
環境を整えたら、初心者向けのインターフェースか、高度なオプションが使用できるターミナルを使った手動かを選び、クライアントをインストールします。
ノードが実行され同期が完了したら、使用できる状態になりますが、メンテナンスは常に意識しておく必要があります。
環境とハードウェア
ローカルまたはクラウド
イーサリアムクライアントは、コンシューマーグレードのコンピュータで動作します。マイニング専用マシンのような特別なハードウェアは必要ありません。 そのため、ノードのデプロイメントには、ニーズに合わせた様々なオプションがあります。 簡単にするため、ローカルの物理マシンとクラウドサーバの両方でノードを実行することしましょう。
- クラウド
- プロバイダーは高可用性のサーバと静的なパブリックIPアドレスを提供
- 専用または仮想サーバを構築するよりも容易に利用可能
- サードパーティであるサーバプロバイダーを信頼しなければならないトレードオフが発生
- フルノードに必要なストレージ容量により、レンタルサーバの価格が高くなることがある
- 自分のハードウェア
- トラストレスで主権的なアプローチ
- 1回限りの投資
- 事前設定された専用マシンを購入することも可能
- マシンやネットワークの物理的な準備、メンテナンス、トラブルシューティングが必要
どちらの選択肢も、上記のような異なるメリットがあります。 従来型のクラウドコンピューティングプロバイダーに加えて、クラウドソリューションを探している場合は、ノードのデプロイに焦点を当てたサービスもあります。 ホスティングされたノードのオプションについての詳細は、ノード・アズ・ア・サービスを参照してください。
ハードウェア
しかし、検閲耐性を備えた分散型ネットワークは、クラウドプロバイダーに依存すべきではありません。 クラウドではなく、ローカルハードウェア上でノードを実行することが、エコシステムにとってより健全です。 推計(opens in a new tab)によると、クラウド上で動作するノードの割合が多く、単一障害点となる可能性があります。
イーサリアムクライアントは、デスクトップパソコン、ノートパソコン、サーバ、あるいはシングルボードコンピュータ上で動作させることができます。 パーソナルコンピュータでクライアントを実行することも可能ですが、ノード専用マシンを用意することで、プライマリコンピュータへの影響を最小限に抑えながら、パフォーマンスとセキュリティを大幅に向上させることができます。
自分のハードウェアを使うのは非常に簡単です。 シンプルなオプションだけでなく、より技術的な方向けの高度なセットアップ方法も多数用意されています。 それでは、自分のマシンでイーサリアムクライアントを実行するための要件と方法を見ていきましょう。
必要条件
ハードウェア要件はクライアントによって異なりますが、ノードは同期を維持する必要があるだけなので、通常はそれほど高くありません。 マイニングとは異なり、ノードは多くの計算能力を必要としないため、混同しないでください。 ただし、より強力なハードウェアでは、同期時間とパフォーマンスは向上します。
クライアントをインストールする前に、コンピュータに十分なリソースがあることを確認してください。 最小システム要件と推奨システム要件は以下のとおりです。
ハードウェアのボトルネックは、主にディスク容量です。 イーサリアムブロックチェーンの同期は、非常に多くの入出力を必要とし、多くのディスクスペースが必要です。 そのため、同期後も数百GBの空き容量を確保できる、ソリッド・ステート・ドライブ(SSD)を用意することをお勧めします。
データベースのサイズと初期同期の速度は、選択したクライアント、設定、同期戦略によって異なります。
また、インターネット接続が帯域幅の上限(opens in a new tab)により制限されていないことを確認してください。 ネットワークにブロードキャストされたデータが制限を超える可能性があるため、従量制限のない接続を使用することをお勧めします。
オペレーティングシステム
すべてのクライアントは、Linux、MacOS、Windowsなどの主要なオペレーティングシステムに対応しています。 自分に最適なオペレーティングシステム(OS)を使って、通常のデスクトップまたはサーバマシンでノードを実行できます。 潜在的な問題やセキュリティの脆弱性を回避するために、お使いのOSが最新の状態になっていることを確認してください。
最小システム要件
- CPU: デュアルコア以上
- RAM: 8GB
- 2TB: SSD
- 帯域幅: 10MB/秒以上
推奨される仕様
- 高速CPU: クアッドコア以上
- RAM: 16GB以上
- 高速SSD: 2TB以上
- 帯域幅: 25MB/秒以上
選択した同期モードとクライアントによって必要容量が変わります。以下に各クライアントに必要なディスク容量の概算を記載します。
クライアント | ディスクサイズ(スナップ同期) | ディスクサイズ(フルアーカイブ) |
---|---|---|
Besu | 800GB以上 | 12TB以上 |
Erigon | N/A | 2.5TB以上 |
Geth | 500GB以上 | 12TB以上 |
Nethermind | 500GB以上 | 12TB以上 |
Reth | N/A | 2.2TB以上 |
- 注意: ErigonとRethはスナップ同期を提供していませんが、フルプルーニングが可能です (Erigonで約2TB、Rethで約1.2TB) 。
コンセンサスクライアントの必要な容量は、クライアントの実装や有効にした機能(バリデータスラッシャーなど)によって変わりますが、概ねビーコンデータ用にさらに200GB必要です。 また、多数のバリデータを実行すると、帯域幅への負荷も大きくなります。 この分析を通して、コンセンサスクライアントの要件の詳細(opens in a new tab)がわかります。
プラグ・アンド・プレイ・ソリューション
自分のハードウェアでノードを実行する最も簡単な方法は、プラグ・アンド・プレイ・ボックスを使用することです。 事前に設定されたマシンを使うと、注文、接続、実行まで、最も簡単に実行することができます。 すべてが事前設定されており、自動実行され、直感的なガイドとダッシュボードでソフトウェアを監視・制御できます。
シングルボードコンピュータ
Raspberry PiのようなARMアーキテクチャのシングルボードコンピュータを使用すると、イーサリアムノードを簡単かつ安価に実行できます。 Ethereum on ARM(opens in a new tab)は、Raspberry Piやその他のARMボード向けに、実行クライアントとコンセンサスクライアントが容易に実行できるイメージを複数提供しています。
これらのデバイスは、小型で価格も手頃、効率も良く、自宅でノードを運用するのに適していますが、性能には限界があることに注意が必要です。
ノードの立ち上げ
実際のクライアント設定は、自動ランチャーを使うか、または手動で直接設定できます。
上級者でない場合は、ランチャー(インストールをガイドし、クライアントの設定を自動化するソフトウェア)を使用することをお勧めします。 ターミナルの操作に慣れている方は、手動設定も可能です。
ガイド付き設定
複数のプロジェクトが、クライアント設定のユーザーエクスペリエンスの向上を目指しています。 ランチャーは、クライアントのインストールと設定を自動化します。また、クライアントのガイド付きセットアップと監視用にグラフィック・インターフェースを提供しているランチャーもあります。
数回クリックするだけで、クライアントのインストールや制御ができる便利なプロジェクトを紹介します。
- DappNode(opens in a new tab) - DappNodeは、ベンダーのマシンだけに付属しているわけではありません。 ノードランチャーやコントロールセンターのソフトウェアは多くの機能があり、任意のハードウェアで使用可能。
- eth-docker(opens in a new tab) - Dockerを使った自動設定は、簡単で安全なステーキングに焦点を当てており、ターミナルとDockerの基本的な知識が必要。少し上級のユーザー向け。
- Stereum(opens in a new tab) - SSH接続でリモートサーバにクライアントをインストールするためのランチャー。GUIセットアップガイド、コントロールセンター、その他多くの機能搭載。
- NiceNode(opens in a new tab) - コンピュータ上でノードを実行するためのランチャー。分かりやすいユーザーエクスペリエンスが特徴。 クライアントを選択し、数回クリックするだけで開始可能。 現在、開発中。
- Sedge(opens in a new tab) - ノードのセットアップツールでCLIのウィザードを使いDocker構成を自動生成。 NethermindによってGoで開発。
手動でのクライアント設定
もう1つのオプションは、クライアントソフトウェアを手動でダウンロードして、確認・設定することです。 グラフィック・インターフェースを提供するクライアントもありますが、手動設定にはターミナルの基本的なスキルが必要となります。ただし、より幅広い用途に対応できます。
前述したように、自分のイーサリアムノードを立ち上げるには、コンセンサスクライアントと実行クライアントをペアで実行する必要があります。 一部のクライアントには、他の種類のライトクライアントが含まれているものがあり、それ以外のソフトウェアをインストールする必要なく同期できます。 しかし、完全にトラストレスな検証を行うためには、コンセンサスクライアントと実行クライアントの両方が必要です。
クライアントソフトウェアの取得
まず、希望する実行クライアントとコンセンサスクライアントソフトウェアを取得する必要があります。
オペレーティングシステムとアーキテクチャに適した、実行可能なアプリケーションやインストールパッケージをダウンロードするだけです。 ダウンロードしたパッケージの署名とチェックサムも必ず確認してください。 インストールやアップデートを簡単に行うためのリポジトリやDockerイメージを提供するクライアントもあります。 クライアントはすべてオープンソースなので、ソースからビルドすることもできます。 これはより高度な方法ですが、場合によっては必要になることがあります。
クライアントごとの手順は、上記のクライアントリストにリンクされているドキュメントに記載されています。
ここでは、ビルド済みのバイナリやインストール方法が掲載されているクライアントのリリースページを紹介します。
実行クライアント
- Besu(opens in a new tab)
- Erigon(opens in a new tab)
- Geth(opens in a new tab)
- Nethermind(opens in a new tab)
- Reth(opens in a new tab)
また、実行レイヤーにおいても、クライアントの多様性が問題となっていることにも注意が必要です。 マイノリティの実行クライアントの運用を検討することをお勧めします。
コンセンサスクライアント
- Lighthouse(opens in a new tab)
- Lodestar(opens in a new tab)(ビルド済みのバイナリを提供していないため、Dockerイメージを使用またはソースからビルド)
- Nimbus(opens in a new tab)
- Prysm(opens in a new tab)
- Teku(opens in a new tab)
バリデータを実行しているコンセンサスノードにとって、クライアントの多様性は重要です。 大多数のバリデータが単一のクライアントを実行していると、ネットワークのセキュリティが危険にさらされます。 そのため、マイノリティクライアントを選択することをお勧めします。
最新のネットワーククライアントの使用状況(opens in a new tab)を参照し、クライアントの多様性についてご覧ください。
ソフトウェアの検証
インターネットからソフトウェアをダウンロードする場合は、ダウンロードしたファイルの完全性を検証することをお勧めします。 このステップは任意ですが、特にイーサリアムクライアントのような重要なインフラストラクチャの一部では、潜在的な攻撃ベクトルを認識し、回避することが重要です。 ビルド済みのバイナリをダウンロードした場合、その出所を信頼する必要がありますが、攻撃者が実行ファイルを悪意のあるものにすり替えるというリスクもあります。
デベロッパーはリリースしたバイナリに、デベロッパーのPGPキーで署名しています。そのため、デベロッパーが作成したソフトウェアそのものを間違いなく実行していることを暗号的に検証できます。 デベロッパーが使用した公開鍵は、クライアントのリリースページやドキュメントに記載されており、そこから入手できます。 リリースされたクライアントと署名をダウンロードしたら、GnuPG(opens in a new tab)などのPGP実装を使って、簡単に検証できます。 Linux(opens in a new tab)またはWindows/MacOS(opens in a new tab)のgpg
を使って、オープンソースソフトウェアを検証するチュートリアルを確認してください。
ダウンロードしたソフトウェアを検証するもう1つの方法は、ハッシュが(一意の暗号論的指紋)、デベロッパーによって提供されたものと一致するかどうかを確認することです。 これはPGPを使うよりもさらに簡単で、ハッシュだけを提供するクライアントもあります。 ダウンロードしたソフトウェアに対しハッシュ関数を実行し、リリースページに記載されているものと比較してください。 以下の例を確認してください:
1sha256sum teku-22.6.1.tar.gz239b2f8c1f8d4dab0404ce70ea314ff4b3c77e9d27aff9d1e4c1933a5439767dde
クライアントのセットアップ
クライアントソフトウェアのインストール、ダウンロード、またはコンパイルが完了したら、実行する準備が整い、 あとは適切な設定を行うだけです。 クライアントには、さまざまな機能を有効化できる豊富な設定オプションが提供されています。
まずは、クライアントのパフォーマンスやデータ使用量に大きく影響するオプションから紹介します。 同期モードとは、ブロックチェーンデータのダウンロードと検証のさまざまな方法のことです。 ノードを開始する前に、使用するネットワークと同期モードを決める必要があります。 考慮すべき最も重要なことは、クライアントに必要なディスク容量と同期にかかる時間です。 クライアントのドキュメントで、デフォルトの同期モードを確認してください。 デフォルトの同期モードが適切でない場合は、セキュリティレベル、利用可能なデータ、コストを考慮して、別の同期モードを選択します。 同期アルゴリズムとは別に、さまざまな種類の古いデータを剪定することもできます。 剪定により古いデータが削除されます。例えば、最近のブロックから到達できない状態のtrieノードを削除します。
その他の基本設定オプションとしては、ネットワークの選択(メインネットまたはテストネット)、HTTPエンドポイント(RPCまたはWebSocketなど)の有効化などがあります。 クライアントのドキュメントには、すべての機能とオプションが記載されています。 CLI(コマンドラインインターフェース)または設定ファイルに直接、対応するフラグを指定してクライアントを実行することで、さまざまなクライアント設定ができます。 ただし、各クライアントによって設定オプションが多少異なるため、詳細については、公式ドキュメントまたはヘルプページを必ず参照してください。
テストを行う場合は、テストネットの1つでクライアントを実行することをお勧めします。 詳しくは、対応ネットワークの概要をご覧ください。
基本設定による実行クライアントの実行例は、次のセクションに記載されています。
実行クライアントの開始
イーサリアムクライアントソフトウェアを起動する前に、環境が整っていることを最終チェックします。 具体的には、以下の事項などを確認してください。
- 選択したネットワークと同期モードを考慮した十分なディスク容量があること。
- メモリやCPUが他のプログラムによって妨害されないこと。
- オペレーティングシステムが最新バージョンに更新されていること。
- システムが正しい時刻と日付になっていること。
- リスニングポートに接続できるようにルーターとファイアウォールを設定していること。 イーサリアムクライアントは、デフォルトでリスナー(TCP)ポートとディスカバリー(UDP)ポートを使用し、30303に設定していること。
最初にテストネットでクライアントを実行して、すべてが正常に動作していることを確認します。
最初にデフォルトではないクライアントを設定する必要があります。 フラグや設定ファイルを使って、希望の設定に変更できます。 各クライアントにより機能や設定構文が異なるため、 具体的な内容については、お使いのクライアントのドキュメントを確認してください。
実行クライアントとコンセンサスクライアントは、エンジンAPI(opens in a new tab)で指定された認証済みエンドポイントを介して通信します。 実行クライアントはコンセンサスクライアントに接続するために、既知のパスでjwtsecret
(opens in a new tab)を生成する必要があります。 セキュリティと安定性の理由から、両方のクライアントは同じマシン上で実行する必要があり、ローカルRPC接続で相互認証を行うため、両方のクライアントがこのパスを共有していなければなりません。 また、実行クライアントは認証されたAPIのリスニングポートを定義する必要があります。
このトークンは、通常はクライアントソフトウェアによって自動的に生成されます。ただし、自分で作成しなければならないこともあります。その場合は、 OpenSSL(opens in a new tab)を使用してください。
1openssl rand -hex 32 > jwtsecret
実行クライアントの開始
このセクションでは、実行クライアントの開始について説明します。 あくまでも基本的な設定例となりますが、以下の設定でクライアントを起動します。
- 接続するネットワークを指定する。例ではメインネットを使用
- テストネットのいずれか1つを選択して、セットアップの予備テストも実行可
- ブロックチェーンを含むすべてのデータが格納されるデータディレクトリを定義
- パスは必ず実際のものに変更する(例: 外付けドライブのディレクトリの指定など)
- クライアントと通信するためのインターフェースを有効化
- コンセンサスクライアントとの通信のために、JSON-RPCおよびエンジンAPIを含む
- API認証で使う
jwtsecret
のパスを定義- 例えば、
/tmp/jwtsecret
など、クライアントがアクセス可能な実際のパスにする
- 例えば、
これは基本的な例であることに注意してください。それ以外の設定はすべてデフォルトになっています。 各クライアントのドキュメントをよく読み、デフォルト、設定、機能について理解しましょう。 バリデータの実行やモニタリングなど、その他の機能の詳細については、各クライアントのドキュメントを参照してください。
注: 例のバックスラッシュ
\
は見やすさのために記載しており、設定フラグは1行で定義できます。
Besuの実行
この例では、Besuをメインネットで起動し、ブロックチェーンデータを/data/ethereum
にデフォルト形式で保存し、コンセンサスクライアントに接続するためにJSON-RPCおよびエンジンRPCを有効にします。 エンジンAPIは、トークンjwtsecret
で認証され、localhost
からの呼び出しのみが許可されます。
1besu --network=mainnet \2 --data-path=/data/ethereum \3 --rpc-http-enabled=true \4 --engine-rpc-enabled=true \5 --engine-host-allowlist="*" \6 --engine-jwt-enabled=true \7 --engine-jwt-secret=/path/to/jwtsecret
Besuには、一連の質問に答えることで設定ファイルを生成できるランチャーオプションもあります。 対話型ランチャーは、以下のように実行できます。
1besu --Xlauncher
Besuのドキュメント(opens in a new tab)で、追加のオプションと設定の詳細を参照してください。
Erigonの実行
この例では、Erigonをメインネットで起動し、ブロックチェーンデータを/data/ethereum
に保存し、JSON-RPCを有効にして、許可されるネームスペースを定義し、jwtsecret
パスで定義されたコンセンサスクライアントに接続するための認証を有効にします。
1erigon --chain mainnet \2 --datadir /data/ethereum \3 --http --http.api=engine,eth,web3,net \4 --authrpc.jwtsecret=/path/to/jwtsecret
Erigonは、デフォルトで8GBのHDDでフル同期を行います。アーカイブデータは2TB以上になるので、 datadir
が十分な空き容量のあるディスクを指していることを確認するか、さまざまな種類のデータを削除する--prune
フラグを検討してください。 詳細については、Erigonの--help
オプションを参照してください。
Gethの実行
この例では、Gethをメインネットで起動し、ブロックチェーンデータを/data/ethereum
に保存し、JSON-RPCを有効にして、許可されるネームスペースを定義します。 さらに、コンセンサスクライアントに接続するための認証を有効にし、認証に必要なjwtsecret
を定義し、許可する接続のオプションも合わせて(この例ではlocalhost
からのみ)定義しています。
1geth --mainnet \2 --datadir "/data/ethereum" \3 --http --authrpc.addr localhost \4 --authrpc.vhosts="localhost" \5 --authrpc.port 85516 --authrpc.jwtsecret=/path/to/jwtsecret
すべての設定オプションのドキュメント(opens in a new tab)を確認し、コンセンサスクライアントとGethを実行する方法(opens in a new tab)についての詳細を参照してください。
Nethermindの実行
Nethermindは、さまざまなインストールオプション(opens in a new tab)を提供しています。 パッケージには、ガイド付きセットアップ機能を備えたランチャーなどのさまざまなバイナリが含まれており、インタラクティブに設定できます。 他にも、設定フラグを付けて実行できるランナーなどがあります。 JSON-RPCはデフォルトで有効になっています。
1Nethermind.Runner --config mainnet \2 --datadir /data/ethereum \3 --JsonRpc.JwtSecretFile=/path/to/jwtsecret
Nethermindのドキュメントは、Nethermindとコンセンサスクライアントの実行方法をすべて網羅した完全ガイド(opens in a new tab)です。
実行クライアントは、コア機能と選択したエンドポイントを起動し、ピアを探し始めます。 ピアが見つかったら、同期を開始します。 また、コンセンサスクライアントからの接続を待ちます。 クライアントが正常に現在の状態に同期されると、現在のブロックチェーンデータが利用できるようになります。
Rethの実行
この例では、Rethをメインネットで起動し、デフォルトのデータ保存場所を使用します。 jwtsecret
パスで定義されているコンセンサスクライアントに接続するためのJSON-RPCおよびエンジンRPC認証を有効にし、localhost
からの呼び出しのみを許可します。
1reth node \2 --authrpc.jwtsecret /path/to/jwtsecret \3 --authrpc.addr 127.0.0.1 \4 --authrpc.port 8551
デフォルトのデータディレクトリについては、Rethの設定(opens in a new tab)をご覧ください。 Rethのドキュメント(opens in a new tab)には、その他のオプションや設定の詳細が記載されています。
コンセンサスクライアントの開始
実行クライアントへのローカルRPC接続を確立させるために、コンセンサスクライアントを正しいポート設定で起動する必要があります。 コンセンサスクライアントは、公開した実行クライアントのポートを引数に設定して実行します。
コンセンサスクライアントは、RPC接続を認証するために実行クライアントのjwt-secret
へのパスも必要です。 上記の実行例と同様に、各コンセンサスクライアントには、jwtトークンファイルパスを引数とする設定フラグがあります。 このパスは、実行クライアントに使われるjwtsecret
のパスと一致しなければなりません。
バリデータを実行する予定がある場合は、フィーを受け取るイーサリアムアドレスを指定する設定フラグを必ず追加してください。 このアドレスは、バリデータのイーサ報酬が蓄積されるアドレスです。 各コンセンサスクライアントは、--suggested-fee-recipient=0xabcd1
のように、イーサリアムアドレスを引数に取るオプションがあります。
テストネットでビーコンノードを起動する場合、チェックポイント同期(opens in a new tab)にパブリックエンドポイントを使用すると、同期時間が大幅に短縮されます。
コンセンサスクライアントの実行
Lighthouseの実行
Lighthouseを実行する前に、Lighthouse Book(opens in a new tab)でインストールと設定方法の詳細を参照してください。
1lighthouse beacon_node \2 --network mainnet \3 --datadir /data/ethereum \4 --http \5 --execution-endpoint http://127.0.0.1:8551 \6 --execution-jwt /path/to/jwtsecret
Lodestarの実行
Lodestarソフトウェアをコンパイルするか、Dockerイメージをダウンロードしてインストールしてください。 詳細については、ドキュメント(opens in a new tab)または総合セットアップガイド(opens in a new tab)を参照してください。
1lodestar beacon \2 --rootDir="/data/ethereum" \3 --network=mainnet \4 --eth1.enabled=true \5 --execution.urls="http://127.0.0.1:8551" \6 --jwt-secret="/path/to/jwtsecret"
Nimbusの実行
Nimbusには、コンセンサスクライアントと実行クライアントの両方を備えています。 計算能力の低いデバイスでも実行可能です。 必要なものをインストールした後(opens in a new tab)、コンセンサスクライアントを実行できます。
1nimbus_beacon_node \2 --network=mainnet \3 --web3-url=http://127.0.0.1:8551 \4 --rest \5 --jwt-secret="/path/to/jwtsecret"
Prysmの実行
Prysmには、簡単に自動インストールできるスクリプトがあります。 詳細については、Prysmドキュメント(opens in a new tab)を参照してください。
1./prysm.sh beacon-chain \2 --mainnet \3 --datadir /data/ethereum \4 --execution-endpoint=http://localhost:8551 \5 --jwt-secret=/path/to/jwtsecret
Tekuの実行
1teku --network mainnet \2 --data-path "/data/ethereum" \3 --ee-endpoint http://localhost:8551 \4 --ee-jwt-secret-file "/path/to/jwtsecret"
コンセンサスクライアントが実行クライアントに接続し、デポジットコントラクトを読み込みバリデータを識別します。同時に、他のビーコンノードのピアにも接続し、ジェネシスブロック(最初のブロック)からコンセンサススロットの同期を開始します。 ビーコンノードが現在のエポックに到達すると、バリデータはビーコンAPIを使用できるようになります。 詳細については、ビーコンノードAPI(opens in a new tab)を参照してください。
バリデータの追加
コンセンサスクライアントは、バリデータが接続するビーコンノードとして機能します。 各コンセンサスクライアントは、それぞれのバリデータソフトウェアを搭載しています。詳細については、各ドキュメントに記載されています。
自分でバリデータを実行すると、ソロステーキングができます。これはイーサリアムネットワークをサポートする上で、最も影響力があり、トラストレスな方法です。 ただし、32 ETHのデポジットが必要となります。 費用を抑えたい場合は、Rocket Pool(opens in a new tab)など、パーミッションレスなノードオペレータの分散型プールに参加することで、少ない費用でバリデータを実行することもできます。
ステーキングとバリデーターキーの生成を始める最も簡単な方法は、Holesky Testnet Staking Launchpad(opens in a new tab)を使用することです。これにより、Holesky上でノードを実行して(opens in a new tab)、セットアップをテストすることができます。 メインネットに移行する準備ができたら、今度はメインネット・ステーキングランチパッド(opens in a new tab)を使って、同じ手順を繰り返します。
ステーキングオプションの概要については、ステーキングページをご覧ください。
ノードの使用
実行クライアントは、トランザクションの送信や、イーサリアムネットワーク上のスマートコントラクトとの対話やデプロイなど、さまざまな用途で使用可能なRPC APIエンドポイントを提供します。
- 適切なプロトコルで手動呼び出し(例:
curl
) - 指定したコンソールの接続(例:
geth attach
) - Web3ライブラリを用いたアプリケーションへの実装(例: web3.py(opens in a new tab)、ethers(opens in a new tab))
クライアントによって、RPCエンドポイントの実装は異なります。 しかし、すべてのクライアントで使用できる標準的なJSON-RPCがあります。 概要については、JSON-RPCドキュメントを参照してください。 イーサリアムネットワークからの情報を必要とするアプリケーションは、このRPCを使用できます。 例えば、人気のウォレットであるMetaMaskでは、自分自身のRPCエンドポイントに接続(opens in a new tab)することができ、プライバシーとセキュリティの向上を実現できます。
コンセンサスクライアントは、すべてビーコンAPI(opens in a new tab)を公開しており、これを利用してコンセンサスクライアントの状態を確認したり、Curl(opens in a new tab)などのツールを使ってリクエストを送り、ブロックやコンセンサスデータをダウンロードしたりすることができます。 詳細については、各コンセンサスクライアントのドキュメントを参照してください。
RPCへの接続
実行クライアントのJSON-RPCデフォルトポートは8545
ですが、設定でローカルエンドポイントのポートを変更することもできます。 デフォルトでは、RPCインターフェースはコンピュータのローカルホストからしかアクセスできません。 リモートからアクセスするには、アドレスを0.0.0.0
に変更して、パブリックに公開します。 これにより、ローカルネットワーク内だけでなく、パブリックIPアドレスでも接続できるようになります。 また、ほとんどの場合、ルーターでポート転送を設定する必要があります。
インターネットにポートを公開するアプローチは、インターネット上の誰でもノードをコントロールできるようになるため、注意が必要です。 悪意のある者がノードにアクセスしてシステムをダウンさせたり、クライアントをウォレットとして使用している場合は、資金が盗まれる可能性があります。
これを回避するには、危険性のあるRPCメソッドを変更できないようにすることです。 例えば、Gethの場合、フラグで変更可能なメソッドを明示することができます。--http.api web3,eth,txpool
.
RPCインターフェースへのアクセスは、エッジレイヤーAPIの開発、もしくはNginxのようなWebサーバアプリケーションから、クライアントのローカルアドレスやポートに接続することで拡張できます。 デベロッパーは、ミドルレイヤーを活用することで、RPCインターフェースを安全にhttps
接続で使えるように、証明書を設定することもできます。
ノードのRPCエンドポイントへのアクセスを付与する方法は、Webサーバやプロキシ、外向けのREST APIを設定するだけではありません。 独自のTor(opens in a new tab)オニオンサービス上でノードをホストすれば、プライバシーを保護しつつ、パブリックからアクセス可能なエンドポイントを設定することができます。 これにより、静的なパブリックIPアドレスやオープンポートを使用せずに、ローカルネットワーク外からRPCにアクセスできます。 ただし、Torネットワークはすべてのアプリケーションでサポートされているわけではなく、接続が不安定なネットワーク経由からのみRPCエンドポイントにアクセスできる点に注意してください。
これを行うには、自身のオニオンサービス(opens in a new tab)を作成する必要があります。 オニオンサービスのセットアップ方法は、ドキュメント(opens in a new tab)を参照してください。 RPCポートへのプロキシを使ってWebサーバを指すか、直接RPCを指すことができます。
最後に、最も一般的なVPNを使って、内部ネットワークへのアクセスを提供することもできます。 ユースケースやノードへのアクセスが必要なユーザーの人数によっては、安全なVPN接続は選択肢の1つとなります。 OpenVPN(opens in a new tab)は、OSIレイヤー2やレイヤー3の安全なネットワーク拡張機能を実装した、フル機能のSSL VPNです。業界標準のSSL/TLSプロトコルを用いており、証明書ベースの認証やスマートカード認証、ユーザ名/パスワード認証など、さまざまな柔軟なクライアント認証方法に対応しています。また、ファイアウォールルールを使って、ユーザーやグループ固有のアクセスコントロールポリシーを設定し、VPNの仮想インターフェースに適用することもできます。
ノードの運用
ノードが正常に動作するためには、定期的に監視し、 必要に応じてメンテナンスを行う必要があります。
ノードのオンライン状態の維持
ノードが常時オンラインになっている必要はありませんが、ネットワークと同期させるためにできるだけオンラインにしておく必要があります。 シャットダウンして再起動することもできますが、以下の点に注意してください。
- 最新の状態をディスクに書き込み中の場合は、シャットダウンには数分程度かかることがある。
- 強制シャットダウンを行うと、データベースに損傷を与え、ノード全体の再同期が必要になることがある。
- クライアントはネットワークとの同期が解除され、再起動時に再同期が必要になる。 ノードは最後にシャットダウンされたところから同期を開始できるが、オフラインになっていた時間に応じて処理時間が増加する。
これはコンセンサスレイヤーのバリデータノードには適用されません。ノードをオフラインにすると、ノードに依存するすべてのサービスに影響を及ぼします。 ステーキング目的でノードを実行している場合は、可能な限りダウンタイムを最小限に抑えるようにしてください。
クライアントサービスの作成
起動時にクライアントを自動起動するサービスを作成することを検討してください。 例えば、Linuxサーバではsystemd
などでサービスを作成し、権限が制限されたユーザーの下で、適切な設定でクライアントを実行し、自動的に再起動するように作成するのがお勧めです。
クライアントの更新
クライアントソフトウェアは、最新のセキュリティパッチ、機能、 EIPの最新バージョンを常にインストールしておく必要があります。 特に、ハードフォークが行われる前に、正しいクライアントバージョンを実行していることを確認してください。
重要なネットワーク更新の前には、イーサリアム・ファウンデーション(EF)のブログ(opens in a new tab)で投稿されます。 これらのお知らせを購読する(opens in a new tab)ことで、ノードの更新が必要なときにメールで通知を受け取ることができます。
クライアントの更新は非常に簡単です。 各クライアントのドキュメントに具体的な手順が記載されていますが、一般的には、最新版をダウンロードし、新しい実行ファイルを使ってクライアントを再起動するだけです。 アップデートが適用され、クライアントは前回終了したところから再開します。
各クライアントは、ピアツーピアプロトコルで使用される、人間が判読できるバージョン文字列を持っており、この文字列はコマンドラインからもアクセスできます。 このバージョン文字列を使って、ユーザーは自分が正しいバージョンを実行していることを確認できるほか、ネットワーク上で特定のクライアントの分散を定量化するために使われるブロックエクスプローラーやその他の分析ツールにも役立ちます。 バージョン文字列の詳細については、個々のクライアントのドキュメントを参照してください。
その他のサービスの実行
自分でノードを実行すると、イーサリアムクライアントRPCへの直接アクセスを必要とするサービスを利用できます。 これらは、レイヤー2ソリューション、ウォレットのバックエンド、ブロックエクスプローラー、デベロッパーツール、その他のイーサリアムインフラストラクチャのような、イーサリアム上に構築されたサービスです。
ノードの監視
ノードを適切に監視するために、メトリクスの収集を検討してください。 クライアントが提供するメトリクスエンドポイントから、ノードに関する包括的なデータを取得できます。 InfluxDB(opens in a new tab)やPrometheus(opens in a new tab)などのツールを使用して、データベースを作成することができます。また、Grafana(opens in a new tab)などのソフトウェアを使って、データの視覚化やグラフ化を行うことができます。 このソフトウェアを使用するには、さまざまなセットアップ方法があり、ノードやネットワーク全体を視覚化するためのGrafanaダッシュボードも多種用意されています。 一例として、Gethの監視に関するチュートリアルを参照してください。
モニタリングを行う際は、必ずマシンのパフォーマンスも監視してください。 ノードの初期同期中は、クライアントソフトウェアがCPUとRAMに大きな負荷をかけることがあります。 Grafanaに加えて、OSが提供するhtop
やuptime
などのツールでも監視できます。
参考文献
- イーサリアムステーキングガイド(opens in a new tab) – Somer Esat、頻繁に更新
- ガイド|イーサリアムメインネットでステーキングをするためのバリデータのセットアップ方法(opens in a new tab) CoinCashew、定期的に更新
- ETHStakerによるテストネットでのバリデータ運用ガイド(opens in a new tab) - ETHStaker、定期的に更新
- ノード運用者向けのマージに関するよくある質問(opens in a new tab) - 2022年7月
- イーサリアムのフル検証ノードになるためのハードウェア要件の分析(opens in a new tab) – Albert Palau、2018年9月24日
- イーサリアムフルノードの運用: 手間を省きたい人向けのガイド(opens in a new tab) 2019年11月7日 - Justin Leroux
- イーサリアムメインネットでハイパーレジャーBesuノードの運用: メリット、要件、セットアップ(opens in a new tab) – Felipe Faraggi、2020年5月7日
- モニタリングスタックでNethermindイーサリアムクライアントのデプロイ(opens in a new tab) – Nethermind.eth、2020年7月8日