コンテンツへスキップ

Lido CSMのバリデーター運用方法

(最終更新2025年2月1日)

ホームステーキングまとめに戻る

目次

前提知識

Lido CSMとは

Lidoはイーサリアムのステーキングプールの1つです。イーサリアムでステーキングをするためには本来32ETHが必要ですが、Lidoは少額からステーキングが可能になっています。ETHをLidoのLSDトークンであるstETHに交換するだけで、世界の誰かが代わりにバリデーターを運用してくれます。

Lidoのバリデーターを運用する側には3つのモジュールがあり、CSM (Community Staking Module)は唯一の自由参加型のモジュールで、担保を提出すれば誰でもバリデーターを運用することができます。CSM以外の2つは許可型で、LidoのDAOが許可した組織か個人のみがバリデーターを運用できます。

Lido CSMでは、2.4ETHを担保として提出し、残りの29.6ETHをstETH保持者から補填することで1つ目のバリデーターを稼働できます。2つ目からは1.3ETHの担保が必要です。資金のやり取りはすべてスマートコントラクトで管理されていて、stETH保持者から補填したETHは持ち逃げができないようになっています。

低い担保額のおかげでソロステーキングより参入しやすいですが、ソロステーキングと同等のサーバー知識が求められます。365日24時間サーバーを稼働し続けないといけないですし、バリデーターのパフォーマンスが悪いと委託報酬が貰えないので注意してください。設定は公式ドキュメント設定ガイドと照らし合わせながら実施してください。ステーキングは何があっても自己責任でお願いします。絶対にHoleskyテストネットで一通り練習した方がいいです。Holeskyテストネットでの設定方法は手順に併記しています。

ソロステーキングとの報酬の違い

担保はETH, stETH, wstETHから選ぶことができ(提出後はstETHに変換されます)、通常のstETHと同様に、担保にもステーキング報酬が発生します。また、stETH保持者は、バリデーター運用を委託する手数料としてステーキング報酬の10%を引かれていて、このうち5%今日がLido CSMのバリデーター運用者に分配されます。

1つ目のバリデーターの担保は2.4ETH、2つ目以降の担保は1.3ETHのため、バリデーターの数が多いほど資本効率が上がります。具体的には、2.4ETHでバリデーターを1つ運用するとソロステーキングの約1.7倍の利回りになり、14.1ETHでバリデーターを10個運用するとソロステーキングの約2.26倍の利回りになります。大体2.37倍で頭打ちになります。

Lido CSMの方が利回りが高くてもRocket Poolを推せる理由(一個人の意見です)

Lido CSMの方がRocket Poolより利回りが1.5倍くらい高いですが、自分はRocket PoolとLido CSMにほぼ同額を投入しています。Rocket Poolをあえて推せる理由は2つあります。

1つ目は、Lidoはマーケットシェアが高すぎるからです。Lidoは現在、イーサリアムでステーキングされているETHの27.7%を占めています。この多額のETHの動向は、DAO投票で決めているとはいえ、ごく一部のアドレスだけで意思決定ができることが多いです。例えば、Lido CSMをメインネットに適応させる投票は、6つのアドレスだけで過半数を超えました。イーサリアムネットワークの合意形成に驚異的な存在になれば残りの72.3%が許すわけがないですが、一悶着起こすには十分な大きさです。

Rocket Poolを推す2つ目の理由は、Rocket Poolは完全に自由参加型なプロトコルだからです。閉鎖的要素の多いLidoに、手持ちの全てのETHを投入することは賛成できません。利回りを追い求めてもいいですが、イーサリアムネットワークのセキュリティを上げることに貢献していないことは頭に入れておいてください。(一個人の意見です)

初期設定

ホームステーキング共通の設定

ここの手順に従ってホームステーキング共通の設定をしてください。

実行クライアントとビーコンノードが完全に同期されるまで、次の手順に進まないでください。

バリデーターkeystoreの作成

Lidoに提出するdeposit_dataと、バリデーターの署名用の鍵となるkeystoreを作成します。

  1. 作成用のバイナリをダウンロードする。最新バージョンのURLは公式Githubから取得してください。
cd ~

curl -LO https://github.com/ethereum/staking-deposit-cli/releases/download/vX.X.X/staking_deposit-cli-xxxxxxx-linux-amd64.tar.gz
  1. バイナリを解凍し、ディレクトリ名を変更する。
tar xvf staking_deposit-cli-xxxxxxx-linux-amd64.tar.gz

rm staking_deposit-cli-xxxxxxx-linux-amd64.tar.gz

mv staking_deposit-cli-xxxxxxx-linux-amd64/ staking-deposit-cli/
  1. Keystoreを作成するコマンドを実行する。Lido指定の出金先アドレスにします。(メインネットとHoleskyテストネットでアドレスが異なります)
cd staking-deposit-cli

./deposit new-mnemonic --chain mainnet --eth1_withdrawal_address 0xB9D7934878B5FB9610B3fE8A5e441e8fad7E293f
Holeskyテストネット用
./deposit new-mnemonic --chain holesky --eth1_withdrawal_address 0xF0179dEC45a37423EAD4FaD5fCb136197872EAd9
  1. 案内に従ってkeystoreにパスワードを設定する。24個の英単語のバックアップフレーズは紙にメモし、安全な場所に保管してください。

    動物のサイの絵が表示されたら完了です。~/staking-deposit-cli/validator_keysに2種類のファイルが作成されます。
    deposit_data ⇒ 担保のETHをデポジットする際に使用するファイルで、複数のバリデーターを運用する場合であっても1つだけ作成されます。
    keystore ⇒ バリデーターのウォレットを作成するときに使用するファイルで、複数のバリデーターを運用する場合はバリデーターの数だけ作成されます。

    正式なファイル名にはdeposit_data-1615115954.jsonのように作成時の時刻が含まれているため、以下のコマンドで確認してください。deposit_dataを開き、withdrawal_credentialsに出金先アドレスが正しく表示されていることを確認しておくと安心です。
ls ~/staking-deposit-cli/validator_keys

nano ~/staking-deposit-cli/validator_keys/deposit_data-XXXXXXXXXX.json

※ バックアップフレーズはKeystoreを復元する際に使います。バックアップフレーズとKeystoreを紛失したらどうなるのかを表にまとめました。KeystoreはUSBに予備をコピーしておくといいです。

バックアップフレーズ所持バックアップフレーズ紛失
Keystore所持GOOD!Keystoreを紛失する前に、Keystoreを使ってバリデーターを退出させましょう。出金処理後にLidoから資金を引き出せます。
Keystore紛失
(サーバーのSSD故障等)
バックアップフレーズでKeystoreを復元し、できる限り早くバリデーターを復旧させましょう。バリデーターを再稼働できず、退出させることもできません。担保は全て没収されます。

バリデーターのウォレット作成

Keystoreを読み込み、バリデーターの署名用のウォレットを作成します。

  1. バリデーターのウォレットを保存するディレクトリを作成する。
sudo mkdir -p /var/lib/lighthouselido/validators
  1. バリデーターのウォレットを作成する。
cd /usr/local/bin

sudo lighthouse account validator import --network mainnet --directory $HOME/staking-deposit-cli/validator_keys --datadir /var/lib/lighthouselido --reuse-password
Holeskyテストネット用
sudo lighthouse account validator import --network holesky --directory $HOME/staking-deposit-cli/validator_keys --datadir /var/lib/lighthouselido --reuse-password
  1. バリデーターのウォレットが作成されていることを確認する。
sudo lighthouse account_manager validator list --network mainnet --datadir /var/lib/lighthouselido
Holeskyテストネット用
sudo lighthouse account_manager validator list --network holesky --datadir /var/lib/lighthouselido

バリデーターサービスの設定

トランザクション記録係であるバリデーターを設定し、常に起動されている状態にします。

  1. バリデーター実行用のユーザーを作成する。
sudo useradd --no-create-home --shell /bin/false lighthouselidovalidator
  1. keystoreを取り込んだディレクトリの権限を付与する。
sudo chown -R lighthouselidovalidator:lighthouselidovalidator /var/lib/lighthouselido/validators
  1. サーバー起動時にバリデーターが自動的に実行されるためのserviceファイルを作成する。
sudo nano /etc/systemd/system/lighthouselidovalidator.service
  1. 以下を入力し、保存する。(Ctrl + O で保存、Ctrl + X で閉じる)
    Lido CSM指定のfee recipientアドレスであることを再度確認する。
[Unit]
Description=Lighthouse Lido Validator
Wants=network-online.target
After=network-online.target

[Service]
User=lighthouselidovalidator
Group=lighthouselidovalidator
Type=simple
Restart=always
RestartSec=5
ExecStart=/usr/local/bin/lighthouse vc \
  --network mainnet \
  --datadir /var/lib/lighthouselido \
  --suggested-fee-recipient 0x388C818CA8B9251b393131C08a736A67ccB19297 \
  --builder-proposals \
  --enable-doppelganger-protection

[Install]
WantedBy=multi-user.target
Holeskyテストネット用
[Unit]
Description=Lighthouse Lido Validator
Wants=network-online.target
After=network-online.target

[Service]
User=lighthouselidovalidator
Group=lighthouselidovalidator
Type=simple
Restart=always
RestartSec=5
ExecStart=/usr/local/bin/lighthouse vc \
  --network holesky \
  --datadir /var/lib/lighthouselido \
  --suggested-fee-recipient 0xE73a3602b99f1f913e72F8bdcBC235e206794Ac8 \
  --builder-proposals \
  --enable-doppelganger-protection

[Install]
WantedBy=multi-user.target
  1. daemonをリロードし、バリデーターを起動する。今後上記のserviceファイルに変更を加えることがあれば、毎回daemonをリロードして変更を適応するようにしてください。
sudo systemctl daemon-reload

sudo systemctl start lighthouselidovalidator
  1. サーバー再起動時にバリデーターが自動的に開始されるようにする。
    ※サーバーをシャットダウンまたは再起動する際は、必ずsudo systemctl stop lighthousevalidatorでバリデーターを正常に終了させてからにしてください。
sudo systemctl enable lighthouselidovalidator
  1. バリデーターのログを確認する。(Ctrl + Cで閉じる)
sudo journalctl -fu lighthouselidovalidator

※実行クライアントとビーコンノードの同期が完了していないとバリデーターは仕事をしてくれません。

  1. MEV-BoostはLido CSMの認可している一覧のものを使っていて、min-bidが設定されていないことを確認する。
sudo nano /etc/systemd/system/mev-boost.service

Lido CSM Widgetの設定

Lido CSM Widgetにdeposit_dataをアップロードして担保を送金する。

  1. sftpを使用してdeposit_dataをブラウザ操作するパソコンに送付する。
# sftp -i SSH用の秘密鍵のディレクトリ -P ポート番号 サーバーユーザ名@サーバーIP
# 例
sftp -i /home/myuser/key -P 1234 ethereum@192.168.0.99

get staking-deposit-cli/validator_keys/deposit_data-1720243315.json deposit_data_lido.json

# Permission Deniedと出た場合は、sshでファイルの権限をあらかじめ変更しておく
sudo chmod 755 deposit_data-1720243315.json
  1. Lido CSM Widgetを開き、担保を送金するウォレットを「Connect wallet」ボタンでつなげる。
Holeskyテストネット用

Lido CSM Widget (Holesky)

  1. 「Create Node Operator」ボタンをクリックし、担保をETH, stETH, wstETHから選択し、deposit_dataをテキストエディタで開き中身をコピペし、「Submit」をクリックする。

確認用アプリの設定

ここの手順に従ってスマホアプリを設定してください。受け取った累計報酬などをアプリで確認できます。サーバーに不具合があり、バリデーターがオフラインになってしまったら通知してくれるので便利です。

※Lido CSMのバリデーターの場合、アプリ上で表示される報酬額は自分が貰える報酬額ではありません。

※メインネットでの実運用では、ここからLido運営に自分の連絡先を報告できます。サーバーの不具合や設定不備があった際に連絡してくれるらしいです。自分は報告していないです。

メンテナンス

動作確認コマンド

sudo journalctl -fu nethermind

sudo journalctl -fu lighthousebeacon

sudo journalctl -fu lighthouselidovalidator

sudo journalctl -fu mev-boost

# 指定した時刻以降のログを出力(現在時刻はdateで確認)
sudo journalctl -u nethermind --since="2021-02-23 12:30:00"

# 時刻の同期を確認
chronyc sources

# CPU、メモリの使用量を確認
htop

# SSDの使用率を確認
df -h

# SSDの読み書き負荷を確認
sudo iotop -o

# データ通信量 RXが受信量、TXが送信量(サーバー起動してからの累計)
ifconfig

# サーバー起動日数
uptime

クライアントアップデート方法

確認用アプリで新しいバージョンのリリース通知を受け取ったら、リンク先の手順でクライアントをアップデートしてください。新しいバージョンにバグがある可能性はゼロではないため、リリースされてから数日後にアップデートするのがおすすめです。

バリデーターを増やす方法

バックアップフレーズを使い、追加のバリデーターのkeystoreを作成します。

  1. 初めてバリデーターを設定したときにメモったバックアップフレーズを使用し、追加するバリデーター分のdeposit_datakeystoreを作成します。
cd ~/staking-deposit-cli

./deposit existing-mnemonic --chain mainnet --eth1_withdrawal_address 0xB9D7934878B5FB9610B3fE8A5e441e8fad7E293f
Holeskyテストネット用
./deposit existing-mnemonic --chain holesky --eth1_withdrawal_address 0xF0179dEC45a37423EAD4FaD5fCb136197872EAd9
  1. sftpを使用して新たに作成したdeposit_dataをブラウザ操作するパソコンに送付する。
# sftp -i SSH用の秘密鍵のディレクトリ -P ポート番号 サーバーユーザ名@サーバーIP
# 例
sftp -i /home/myuser/key -P 1234 ethereum@192.168.0.99

get staking-deposit-cli/validator_keys/deposit_data-1720243315.json deposit_data_lido.json

# Permission Deniedと出た場合は、sshでファイルの権限をあらかじめ変更しておく
sudo chmod 755 deposit_data-1720243315.json
  1. 運用する全てのバリデーターのkeystore~/staking-deposit-cli/validator_keysディレクトリに入っていることを確認する。
  1. バリデーターを止める。
sudo systemctl stop lighthouselidovalidator

sudo systemctl status lighthouselidovalidator
  1. 既存のウォレットを削除する。
sudo rm -r /var/lib/lighthouselido/validators
  1. 新しいバリデーターのウォレットを作成する。
cd /usr/local/bin

sudo lighthouse account validator import --network mainnet --directory $HOME/staking-deposit-cli/validator_keys --datadir /var/lib/lighthouselido --reuse-password

sudo lighthouse account_manager validator list --network mainnet --datadir /var/lib/lighthouselido
Holeskyテストネット用
sudo lighthouse account validator import --network holesky --directory $HOME/staking-deposit-cli/validator_keys --datadir /var/lib/lighthouselido --reuse-password

sudo lighthouse account_manager validator list --network holesky --datadir /var/lib/lighthouselido
  1. ウォレットのディレクトリ権限をユーザーlighthouselidovalidatorに付与する。
sudo chown -R lighthouselidovalidator:lighthouselidovalidator /var/lib/lighthouselido/validators
  1. バリデーターを起動して、正常に動いていることを確認する。
sudo systemctl start lighthouselidovalidator

sudo journalctl -fu lighthouselidovalidator
  1. Lido CSM Widgetを開き、担保を送金するウォレットを「Connect wallet」ボタンでつなげる。
Holeskyテストネット用

Lido CSM Widget (Holesky)

  1. 「Keys」の「Submit」を開き、担保をETH, stETH, wstETHから選択し、deposit_dataをテキストエディタで開き中身をコピペし、「Submit」をクリックする。(コピペするdeposit_dataは新しく追加するバリデーターの分だけにしてください。)

別のサーバーに移す方法

バリデーターを別のサーバーに移動する流れは初めてステーキングを開始する流れとほぼ一緒ですが、バリデーターkeystoreの作成Lido CSM Widgetの設定は実施せず、keystoreUSB経由で古いサーバーから新しいサーバーの~/staking-deposit-cli/validator_keysディレクトリにコピーします。

新しいサーバーのバリデーターを起動する前に、古いサーバーの電源は落とし、安全のため少なくとも12分以上(2 epoch以上)はバリデーターをオフラインにしてください。同じkeystoreを読み込んでいるバリデーターを複数同時に起動するとslashingされる(ETHの一部を没収されバリデータの資格を失う)ので絶対にしないでください!

報酬の受取

報酬は28日ごとにstETHで勝手に蓄積していき、自身のアドレスに出金したい時以外は特段何もする必要はないです。

  1. Lido CSM Widgetを開き、ウォレットを「Connect wallet」ボタンでつなげる。
  1. 「BOND & REWARDS」の「CLAIM」を開き、自身のアドレスに出金するトークンの種類と金額を入力する。ちなみに、金額に0を入力するとRewardsをBonds(担保金)に移動できます。
  1. 「Claim rewards and bond」ボタンで出金申請のトランザクションを実行します。
    • stETHまたはwstETHを選択した場合:
      自身のアドレスにトークンが入金されます。
    • ETHを選択した場合:
      出金証明のNFTが自身のアドレスに付与されます。Lido WidgetHoleskyテストネットのLido Widget)を開き、ウォレットを「Connect wallet」ボタンでつなげる。「WITHDRAWALS」の「CLAIM」タブに出金リクエストがあることを確認し、Pendingであれば認可されるまで待ちます。Ready to claimになったら「Claim」ボタンで受取のトランザクションを実行します。トランザクションが完了したら自身のアドレスに入金されていることを確認します。

バリデーターのExit

ビーコンチェーンにExitメッセージを提出します。公式ドキュメントでは、手動でExitメッセージを作成して beaconcha.inのウェブサイト経由で提出していますが、Lighthouseにやってもらった方が楽です。

  1. 動いているバリデーターを止めます。
sudo systemctl stop lighthouselidovalidator
  1. 退出させるバリデーターのkeystoreファイルのパスを下記コマンドに代入し実行します。
/usr/local/bin/lighthouse --network mainnet account validator exit --keystore ~/staking-deposit-cli/validator_keys/keystore-m....json
Holeskyテストネット用
/usr/local/bin/lighthouse --network holesky account validator exit --keystore ~/staking-deposit-cli/validator_keys/keystore-m....json
  1. Keystoreファイルのパスワードを入力し、合言葉の入力を求められるので下記を入力します。
Exit my validator
  1. 退出されるまではバリデーターの仕事は続くのでバリデーターを起動しておきます。
sudo systemctl start lighthouselidovalidator
  1. 待っていると、beaconcha.inでバリデーターがExitedというステータスになりますが、Lido CSM WidgetではActiveのままです。このタイミングでサーバーのバリデーターは止めて大丈夫です。
    Lido CSM Widgetから担保金を引き出せるようになるタイミングは、beaconcha.inのWithdrawalsで資金がLidoのアドレスに出金された後です。
  1. 担保金の引き出し方法は報酬の受取と同じ手順です。