コンテンツへスキップ

ソロステーキング方法

(最終更新2024年10月30日)

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

目次

初期設定

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

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

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

バリデーターkeystoreの作成

担保のデポジットに必要な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とを作成するコマンドを実行する。
cd ~/staking-deposit-cli

./deposit new-mnemonic --chain mainnet --eth1_withdrawal_address 0x000....000

--eth1_withdrawal_addressオプションで出金先アドレスを指定します。出金先アドレスは1度設定すると変更できないため、アドレスの所有権を失わないように注意してください。報酬は約10日ごとに出金先アドレスに蓄積されます。

Holeskyテストネット用
./deposit new-mnemonic --chain holesky --eth1_withdrawal_address 0x000...000
  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を使ってバリデーターを退出させましょう。退出すると出金先アドレスに全額返金されます。出金先アドレスを設定していない場合は担保の32ETHを出金できません。バリデーターを引き続き稼働させ、ブロック生成時の手数料のみ受け取り続けることができますが取るに足らない額です。
Keystore紛失
(サーバーのSSD故障等)
バックアップフレーズでKeystoreを復元し、できる限り早くバリデーターを復旧させましょう。バリデーターを再稼働できず、退出させることもできません。出金先アドレスが設定されていれば罰金で32ETHが16ETHまで削られた時点で、自動的に退出がトリガーされ返金されます。出金先アドレスが設定されていなければ資金は戻ってきません。

担保のデポジット

Deposit_dataを使い、普段使いのパソコンからバリデーター1つあたり32ETHの担保をデポジットします。

  1. USBかSFTPを使用してdeposit_dataを普段使いのパソコンに送る。
    以下はSFTPを使った場合のコマンドです。(SSH接続をしていない状態で実行)
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-XXXXXXXXXX.json deposit_data.json
  1. 普段使いのパソコンでイーサリアムの公式ローンチパッドを開き、「BECOME A VALIDATOR」をクリックし、案内に従いdeposit_dataをアップロードしてバリデーター1つあたり32 ETHをデポジットする。デポジットする時の案内で出金先アドレスを聞かれますが、deposit_dataに既に記載されているため改めての入力は不要です。
    デポジット後はビーコンチェーンにデポジットが認可されるまで10時間以上かかるため、それまでに後続の手順でバリデーターを設定してください。
Holeskyテストネット用

ローンチパッドはhttps://holesky.launchpad.ethereum.org

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

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

  1. ビーコンノードを停止し、ログイン中のユーザーethereumにバリデーターのウォレットを保存するディレクトリの権限を与える。
sudo systemctl stop lighthousebeacon

sudo chown -R ethereum:ethereum /var/lib/lighthouse
  1. バリデーターのウォレットを作成する。
cd /usr/local/bin

sudo lighthouse account validator import --network mainnet --directory $HOME/staking-deposit-cli/validator_keys --datadir /var/lib/lighthouse
Holeskyテストネット用
sudo lighthouse account validator import --network holesky --directory $HOME/staking-deposit-cli/validator_keys --datadir /var/lib/lighthouse
  1. バリデーターのウォレットが作成されていることを確認する。
sudo lighthouse account_manager validator list --network mainnet --datadir /var/lib/lighthouse
Holeskyテストネット用
sudo lighthouse account_manager validator list --network holesky --datadir /var/lib/lighthouse
  1. ウォレットのディレクトリ権限をユーザーethereumから剥奪し、ビーコンノードを再開する。
sudo chown root:root /var/lib/lighthouse

sudo chown -R lighthousebeacon:lighthousebeacon /var/lib/lighthouse/beacon

sudo systemctl start lighthousebeacon

バリデーターの設定

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

  1. バリデーター実行用のユーザーを作成する。
sudo useradd --no-create-home --shell /bin/false lighthousevalidator
  1. ユーザーlighthousevalidatorにディレクトリ権限を与える。
sudo chown -R lighthousevalidator:lighthousevalidator /var/lib/lighthouse/validators
  1. サーバー起動時にバリデーターが自動的に実行されるためのserviceファイルを作成する。
sudo nano /etc/systemd/system/lighthousevalidator.service
  1. 以下を入力し、保存する。(Ctrl + O で保存、Ctrl + X で閉じる)
[Unit]
Description=Lighthouse Validator
Wants=network-online.target
After=network-online.target

[Service]
User=lighthousevalidator
Group=lighthousevalidator
Type=simple
Restart=always
RestartSec=5
ExecStart=/usr/local/bin/lighthouse vc \
  --network mainnet \
  --datadir /var/lib/lighthouse \
  --suggested-fee-recipient 0x000...000 \
  --builder-proposals

[Install]
WantedBy=multi-user.target

--suggested-fee-recipientにはブロック生成時に貰える手数料の受取先となるアドレスを指定してください。

※ バリデーターを別のサーバーに引っ越しする際は、--enable-doppelganger-protectionを追加することで、二重署名の違反を防げます。バリデーターを再起動する度に、2~3回ほどattestationがされないので、引っ越し以外では使わなくていいと思います。

※ Graffitiとは、ブロック生成をした際に記念に文字列をブロックに刻む機能です。自分は特に入力したい文字列がないので利用していません。Graffitiを設定したい場合は、--graffiti "hello world!"のように追加します。xy座標と色コードを入力することでGraffiti Wallにピクセル単位で絵を描くことも可能です。

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

[Service]
User=lighthousevalidator
Group=lighthousevalidator
Type=simple
Restart=always
RestartSec=5
ExecStart=/usr/local/bin/lighthouse vc \
  --network holesky \
  --datadir /var/lib/lighthouse \
  --suggested-fee-recipient 0x000...000 \
  --builder-proposals

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

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

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

  1. MEV-Boostにバリデーターが正常に連携されているか確認する。(Ctrl + Cで閉じる)
    POSTリクエストのステータスが200になっていればOKです。
sudo journalctl -fu mev-boost

確認用アプリの設定

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

メンテナンス

動作確認コマンド

sudo journalctl -fu nethermind

sudo journalctl -fu lighthousebeacon

sudo journalctl -fu lighthousevalidator

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を1つずつ作成します。複数のバリデーターの鍵を一度に作ることができますが、ローンチパッドでETHをデポジットする時はどのアドレスにデポジットしたらいいのか迷いやすいため、自信がなければ1つずつ作成することを推奨します。
cd ~/staking-deposit-cli

./deposit existing-mnemonic --chain mainnet --eth1_withdrawal_address 0x000....000

--eth1_withdrawal_addressオプションで出金先アドレスを指定します。出金先アドレスは1度設定すると変更できないため、アドレスの所有権を失わないように注意してください。

Holeskyテストネット用
./deposit existing-mnemonic --chain holesky --eth1_withdrawal_address 0x000....000
  1. USBかSFTPを使用してdeposit_dataを普段使いのパソコンに送る。
    以下はSFTPを使った場合のコマンドです。(SSH接続をしていない状態で実行)
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-XXXXXXXXXX.json deposit_data.json
  1. ETHのデポジットに使用するパソコンのブラウザで公式ローンチパッドを開き、deposit_dataをアップロードして追加分のETHをデポジットする。
Holeskyテストネット用

ローンチパッドはhttps://holesky.launchpad.ethereum.org

  1. 運用する全てのバリデーターのkeystoreを、サーバーの~/staking-deposit-cli/validator_keysディレクトリに入れておく。
  1. ビーコンノードとバリデーターを止める。
sudo systemctl stop lighthousevalidator

sudo systemctl stop lighthousebeacon

sudo systemctl status lighthousevalidator

sudo systemctl status lighthousebeacon
  1. 既存のウォレットを削除する。
sudo rm -r /var/lib/lighthouse/validators
  1. 新しいバリデーターのウォレットを作成する。パスワードはkeystoreごとに入力します。
cd /usr/local/bin

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

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

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

sudo systemctl start lighthousevalidator

sudo journalctl -fu lighthousebeacon

sudo journalctl -fu lighthousevalidator

別のサーバーに移す方法

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

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

ステーキングをやめる方法

バリデーターを退出(Exit)させることで、担保の32ETHも含め全額出金することができます。前提として出金先アドレスが設定されている必要があります。

  1. 退出させるバリデーターのkeystoreのパスを下記コマンドに代入し実行します。
sudo /usr/local/bin/lighthouse account validator exit --keystore ~/staking-deposit-cli/validator_keys/keystore-m....json
  1. Keystoreのパスワードを入力し、合言葉の入力を求められるので下記を入力します。
Exit my validator
  1. 退出されるまではバリデーターの仕事は続くのでサーバーは起動したままにします。退出が完了したらサーバーは止めて大丈夫です。退出と同じタイミングで出金されるわけではなく、出金は更に順番待ちが発生します。バリデーターの退出タイミングと出金タイミングはbeaconcha.inから確認できます。