コンテンツへスキップ

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

(最終更新2024年11月6日)

※Lido CSMは2024年10月25日にメインネットで開始しました。まだ一般公開前のEA (Early Adoption)期間で、参加する資格を持っているのはソロステーカー認定されているアドレスと、Holeskyテストネットでサーバーのパフォーマンスが良かったアドレスです。EA期間がいつ終了するかはまだ発表されていませんが、EA期間が終了すると誰でもLido CSMでバリデーターを運用できるようになります。Lido CSMで管理される資金はLidoエコシステム全体の10%が上限になると言われているため、一般公開後に参入者が多ければ早いもの勝ちになる可能性があります。一般公開と同時に参入したいのであれば、早めにHoleskyテストネットで練習しておいた方がいいです。

目次

前提知識

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テストネットでアドレスが異なります)
./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 --datadir /var/lib/lighthouselido --directory=$HOME/staking-deposit-cli/validator_keys
Holeskyテストネット用
sudo lighthouse account validator import --network holesky --datadir /var/lib/lighthouselido --directory=$HOME/staking-deposit-cli/validator_keys
  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

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

以下、まだ編集中です。

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

  • 新しいユーザーを作成し、keystoreを取り込んだディレクトリの権限を付与する。
sudo useradd --no-create-home --shell /bin/false lighthouselidovalidator

sudo chown -R lighthouselidovalidator:lighthouselidovalidator /var/lib/lighthouselido/validators
  • サーバー起動時にバリデーターが自動的に実行されるためのserviceファイルを作成する。Lido CSM指定のfee recipientアドレスにする。
sudo nano /etc/systemd/system/lighthouselidovalidator.service
[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
  • バリデーターを起動し、ログに問題がなければ、サーバー起動時にバリデーターが自動的に実行されるようにする。
sudo systemctl daemon-reload

sudo systemctl start lighthouselidovalidator

sudo journalctl -fu lighthouselidovalidator

sudo systemctl enable lighthouselidovalidator

Lido CSM Widgetの設定

  • 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
  • sshで接続し、用済みのkeystoreとdeposit dataは削除する。
cd ~/staking-deposit-cli/validator_keys

sudo rm
  • Lido CSM Widget (Holesky)を開き、ソロステーカー認定されているウォレットを「Connect wallet」ボタンでつなげる。Lido CSM Widget (メインネット)
  • Manager Addressを普段使いのホットウォレットに変更する。(セキュリティの観点から、ソロステーカー認定のウォレットは担保送金や報酬受取りのトランザクションをしないほうがよい)
  • 担保と送金手数料を普段遣いのウォレットに用意する。
  • 「Create Node Operator」ボタンをクリックする。
  • 担保をETH, stETH, wstETHから選択し、deposit dataの中身をコピペし、Submitをクリックする。

報酬の受取

報酬は28日ごとにstETHで蓄積していき、特段何もする必要はないです。

担保以外の余剰金はClaimをすることで自身のウォレットに送金できます。受け取るトークンはETH, stETH, wstETHの中から選べます。

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

バリデーターのExit

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

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