イーサリアムバリデータのセットアップにあたって、実際のコンセンサスクライアントの設定方法は多くの方が最初に詰まるポイントです。本記事では、コンセンサスクライアントとして「Lighthouse」、実行クライアントとして「Nethermind」を組み合わせた構成をUbuntu 22.04 LTS環境で設定する手順を解説します。
LighthouseはRustで実装されており、高パフォーマンスと低メモリ消費量が特徴です。Nethermindは.NETで実装された実行クライアントで、メモリ効率と設定の柔軟性に優れています。この組み合わせはクライアント多様性の観点からも推奨される選択肢の一つです。
本記事はUbuntu Serverの基本操作ができる方を対象としており、コマンドラインの基本的な操作に慣れていることを前提としています。
1. Ubuntu 22.04 LTSの初期セットアップ
1-1. システムの更新とユーザー設定
まず、システムパッケージを最新の状態に更新します。以下のコマンドを実行してください。
sudo apt update && sudo apt upgrade -y
次に、バリデータ専用のシステムユーザーを作成することをお勧めします。専用ユーザーを作成することでセキュリティを高められます。
sudo useradd --no-create-home --shell /bin/false ethereum
必要な依存パッケージをインストールします。
sudo apt install -y curl wget unzip jq git
1-2. ファイアウォールの設定
UFW(Uncomplicated Firewall)を使用してファイアウォールを設定します。まずUFWを有効化し、SSHアクセスを許可してから、必要なポートを開放します。
sudo ufw allow 22/tcp comment 'SSH'
sudo ufw allow 30303/tcp comment 'Nethermind P2P TCP'
sudo ufw allow 30303/udp comment 'Nethermind P2P UDP'
sudo ufw allow 9000/tcp comment 'Lighthouse P2P TCP'
sudo ufw allow 9000/udp comment 'Lighthouse P2P UDP'
sudo ufw enable
8545(JSONRPC)と8551(Engine API)は外部からアクセスできないよう開放しないことが重要です。
2. Nethermind(実行クライアント)のインストール
2-1. Nethermindのダウンロードとインストール
Nethermindの最新リリースをGitHubからダウンロードします。バージョン番号は公式リポジトリで最新版を確認してください。
cd /tmp
wget https://github.com/NethermindEth/nethermind/releases/latest/download/nethermind-linux-x64.zip
sudo unzip nethermind-linux-x64.zip -d /usr/local/bin/nethermind
sudo chmod +x /usr/local/bin/nethermind/nethermind
データディレクトリを作成し、適切な権限を設定します。
sudo mkdir -p /var/lib/nethermind
sudo chown ethereum:ethereum /var/lib/nethermind
2-2. JWT秘密鍵の生成
実行クライアントとコンセンサスクライアント間の通信(Engine API)にはJWT認証が必要です。共有のJWT秘密鍵を生成します。
sudo mkdir -p /var/lib/ethereum
openssl rand -hex 32 | sudo tee /var/lib/ethereum/jwtsecret > /dev/null
sudo chmod 640 /var/lib/ethereum/jwtsecret
sudo chown ethereum:ethereum /var/lib/ethereum/jwtsecret
3. Nethermindのsystemdサービス設定
3-1. systemdユニットファイルの作成
Nethermindを自動起動するためのsystemdサービスを設定します。以下の内容でサービスファイルを作成します。
sudo nano /etc/systemd/system/nethermind.service
ファイルに以下の内容を記載します。
[Unit]
Description=Nethermind Execution Client
After=network-online.target
Wants=network-online.target
[Service]
User=ethereum
Group=ethereum
Type=simple
Restart=on-failure
RestartSec=5
ExecStart=/usr/local/bin/nethermind/nethermind --config mainnet --datadir /var/lib/nethermind --JsonRpc.Enabled true --JsonRpc.Host 127.0.0.1 --JsonRpc.Port 8545 --JsonRpc.JwtSecretFile /var/lib/ethereum/jwtsecret --JsonRpc.EngineHost 127.0.0.1 --JsonRpc.EnginePort 8551
[Install]
WantedBy=multi-user.target
3-2. サービスの起動と同期状況の確認
サービスを有効化して起動します。
sudo systemctl daemon-reload
sudo systemctl enable nethermind
sudo systemctl start nethermind
ログを確認して正常に起動しているか確認します。
sudo journalctl -fu nethermind
初回起動時はブロックチェーンデータの同期に数時間〜数日かかります。同期が完了するまでコンセンサスクライアントの設定を進めながら待機します。
4. Lighthouse(コンセンサスクライアント)のインストール
4-1. Lighthouseのダウンロードとインストール
Lighthouseの最新リリースをGitHubからダウンロードします。
cd /tmp
wget https://github.com/sigp/lighthouse/releases/latest/download/lighthouse-v5.x.x-x86_64-unknown-linux-gnu.tar.gz
tar xvf lighthouse-*.tar.gz
sudo mv lighthouse /usr/local/bin/
sudo chmod +x /usr/local/bin/lighthouse
バージョンを確認します。
lighthouse --version
ビーコンノードのデータディレクトリを作成します。
sudo mkdir -p /var/lib/lighthouse/beacon
sudo chown -R ethereum:ethereum /var/lib/lighthouse
4-2. Lighthouseビーコンノードのsystemdサービス設定
ビーコンノード用のsystemdサービスを設定します。
sudo nano /etc/systemd/system/lighthousebeacon.service
ファイルに以下の内容を記載します。
[Unit]
Description=Lighthouse Beacon Node
After=network-online.target nethermind.service
Wants=network-online.target
[Service]
User=ethereum
Group=ethereum
Type=simple
Restart=on-failure
RestartSec=5
ExecStart=/usr/local/bin/lighthouse beacon_node --network mainnet --datadir /var/lib/lighthouse/beacon --execution-endpoint http://127.0.0.1:8551 --execution-jwt /var/lib/ethereum/jwtsecret --checkpoint-sync-url https://mainnet.checkpoint.sigp.io --http
[Install]
WantedBy=multi-user.target
--checkpoint-sync-url を指定することで、ジェネシスからではなく最近のチェックポイントから高速同期が可能です。
5. バリデータクライアントの設定
5-1. バリデータキーのインポート
事前に生成しておいたバリデータキーストアファイルをインポートします。keystoreファイルをマシンに転送してから以下のコマンドを実行します。
sudo -u ethereum lighthouse account validator import --network mainnet --datadir /var/lib/lighthouse --directory /path/to/your/keystores
コマンド実行中にキーストアのパスワード入力が求められます。staking-deposit-cli実行時に設定したパスワードを入力してください。
5-2. バリデータクライアントのsystemdサービス設定
バリデータクライアント用のsystemdサービスを設定します。
sudo nano /etc/systemd/system/lighthousevalidator.service
ファイルに以下の内容を記載します。
[Unit]
Description=Lighthouse Validator Client
After=network-online.target lighthousebeacon.service
Wants=network-online.target
[Service]
User=ethereum
Group=ethereum
Type=simple
Restart=on-failure
RestartSec=5
ExecStart=/usr/local/bin/lighthouse validator_client --network mainnet --datadir /var/lib/lighthouse --beacon-nodes http://127.0.0.1:5052 --graffiti "your-graffiti"
[Install]
WantedBy=multi-user.target
--graffiti はブロック提案時にブロックに記録される任意のテキストです(最大32バイト)。
6. サービスの起動と動作確認
6-1. すべてのサービスを起動する順序
サービスは実行クライアント → ビーコンノード → バリデータクライアントの順に起動することが推奨されます。
sudo systemctl daemon-reload
sudo systemctl enable lighthousebeacon lighthousevalidator
sudo systemctl start lighthousebeacon
sudo systemctl start lighthousevalidator
各サービスのステータスを確認します。
sudo systemctl status nethermind lighthousebeacon lighthousevalidator
6-2. ログの確認と同期状況の把握
各サービスのログをリアルタイムで確認するには journalctl -fu コマンドを使います。
sudo journalctl -fu lighthousebeacon
sudo journalctl -fu lighthousevalidator
ビーコンノードのログに INFO Synced と表示され、スロットが最新のものに追いついたらビーコンノードの同期完了です。バリデータクライアントのログに INFO Successfully published attestation が表示されるとアテステーションが成功しています。
7. トラブルシューティングとメンテナンス
7-1. よくある問題と対処法
バリデータ設定でよく遭遇する問題と対処法を紹介します。
「エンジンAPI接続エラー」が発生する場合は、JWT秘密鍵のパスが正しいか、Nethermindが起動して8551ポートでリッスンしているかを確認します。ポートが開いているかどうかは ss -tlnp | grep 8551 で確認できます。
「同期が進まない」場合は、ピア数が十分か確認します。ファイアウォールでP2Pポートが正しく開放されているか、ルーターのポート転送設定が必要でないかを確認してください。
7-2. 定期的なメンテナンス作業
クライアントのバージョンアップは重要なメンテナンス作業です。イーサリアムネットワークのアップグレード(ハードフォーク)に合わせてクライアントを更新しないと、チェーンから外れてしまう可能性があります。
GitHubのリリースページを定期的に確認し、重要なアップデートがリリースされた場合は速やかに適用することが推奨されます。なお、クライアントのアップデート時にはサービスを一時停止する必要があるため、アップデート作業は計画的に行うことが重要です。
まとめ
LighthouseとNethermindを組み合わせたバリデータノードのセットアップは、適切な手順に従えば比較的スムーズに実現できます。特にJWT認証の設定、ファイアウォールの適切な設定、そしてsystemdによる自動起動設定が重要なポイントです。
初回設定後は、ログを定期的に確認し、アテステーションの成功率を監視することでバリデータの健全な運用を維持してください。
よくある質問
Q1. 同期にどのくらい時間がかかりますか?
チェックポイント同期(--checkpoint-sync-url 指定)を使用すると、ビーコンノードの同期は数分〜数十分で完了します。実行クライアント(Nethermind)のスナップ同期は数時間〜数日かかる場合があります。ストレージの速度とネットワーク帯域幅によって大きく変わります。
Q2. バリデータクライアントをアップデートする際に注意することはありますか?
バリデータクライアントをアップデートする際は、必ずサービスを停止してからバイナリを置き換え、再起動する手順を踏んでください。複数のバリデータクライアントを同時に起動しないよう細心の注意が必要です。二重起動はダブルボーティングによるスラッシングリスクに直結します。
Q3. Graffitiはどのように設定すればよいですか?
Graffitiは --graffiti オプションで任意のテキストを設定できます。最大32バイトのテキストが記録されます。日本語を使用する場合は文字コードによってバイト数が増えるため、短い文字列に留めることをお勧めします。空のままでも運用上の問題はありません。