コンテンツへスキップ

Rocket Poolのバリデータ運用方法

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

目次

Rocket Poolとは

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

Rocket Poolでバリデーターを運用する側は、8ETHを担保として提出し、残りの24ETHをrETH保持者から補填することでミニプール(Rocket Poolを介して作成されたバリデーター)を稼働します。資金のやり取りはすべてスマートコントラクトで管理されていて、24ETHは持ち逃げができないようになっています。

2024年10月28日のSaturn 0アップグレードまでは、ETHに加えて、Rocket PoolのネイティブトークンであるRPLも担保として提出する必要がありました。しかし現在はRPLの担保は任意になり、8ETHのみでミニプールの作成が可能となっています。

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

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

rETH保持者は、バリデーター運用を委託する手数料として、ステーキング報酬の14%を引かれています。この14%がミニプール運用者にどのように配分されるかは、担保で提出したRPLの量によって変動します。ETHのみのミニプール運用者は10%を受け取り、借りている24ETHの10%相当(2.4ETH相当)以上のRPLを担保として提出しているミニプール運用者は満額の14%を受け取ることができます。ETHのみだとソロステーキングの1.3倍、RPLが満額分以上あるとソロステーキングの1.42倍の利回りになります。

rETH保持者が足りないと、新たにETHをrETHに交換してくれる人が現れるまでミニプールの作成は順番待ちとなります。順番待ちの列があまりにも長いようであれば機会損失になってしまうのでミニプールの作成はせず、一時的にSBI VC TradeやBITPOINTでステーキングをして待つのもありです。

Rocket Pool はSaturn 1、Saturn 2のアップグレードを控えていて、将来的に4ETHや1.5ETHの担保でミニプール運用が可能になる予定です。担保額が減るにつれて貰える手数料が増えるため、対ソロステーキングの利回りは上がります。また、ミニプール運用者とrETH保持者の数のバランスを保つため、現在14%に固定されている手数料は将来的に動的に変動します。

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はトータルで見ると完全な自由参加型ではないです。Lidoには3つのモジュールがあり、CSM以外の2つは許可型で、LidoのDAOが許可した組織か個人のみがバリデーターを運用できます。自由参加型のCSMの比率はこれから増えていくとはいえ、Lido全体の10%が上限になりそうです。

まとめると、マーケットシェアが高いうえに意思決定する人が少数で、閉鎖的要素の多いLidoに、手持ちの全てのETHを投入することは賛成できません。利回りを追い求めてもいいですが、ネットワークのセキュリティを上げることに全く貢献していないことは頭に入れておいてください。(一個人の意見です)

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

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

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

SmartNode Stackのインストール

Rocket PoolのSmartNode Stackをダウンロードし、実行クライアントとコンセンサスクライアントに繋げます。

  1. 新しいディレクトリを作る。
mkdir -p ~/bin
  1. CLIをダウンロードする。最新バージョンのURLは公式Githubから取得してください。
wget https://github.com/rocket-pool/smartnode-install/releases/download/vX.XX.XX/rocketpool-cli-linux-amd64 -O ~/bin/rocketpool
  1. CLIを実行できるように権限を変更する。
chmod +x ~/bin/rocketpool
  1. 権限を変更出来たらサーバーにログインしなおし、rocketpoolのコマンドが使用できることを確認する。
exit

rocketpool --version
  1. SmartNode Stackをインストールする。
rocketpool service install
  1. インストールが完了したらサーバーにログインし直し、SmartNode Stackのウィザードを起動します。
exit

rocketpool service config

後はウィザードで以下の設定をする。ウィザードでは方向キー←↑→↓またはtabで照準を移動し、Enterで選択します。1つ前の画面に戻るときはEscを押します。何も保存せずに中断する場合はCtrl+Cです。

  1. NetworkEthereum Mainnetを選択する。(Holeskyテストネットの場合はHoleskyを選択する。)
  2. Client ModeExternally Managedを選択する。
  3. Execution Client(実行クライアント)のHTTP URLlocalhostを使わずにサーバーのローカルIPを指定する。(例:http://192.168.0.44:8545
  4. Consesus Client(コンセンサスクライアント)はLighthouseを選択し、HTTP URLlocalhostを使わずにサーバーのローカルIPを指定する。(例:http://192.168.0.44:5052
  5. Graffitiを聞かれたら何でもいいので16文字までの文字列を入力する。Graffitiとは、ブロック生成をした際に記念に文字列をブロックに刻む機能です。自分は特に入力したい文字列がないので空欄にしています。xy座標と色コードを入力することでGraffiti Wallにピクセル単位で絵を描くことも可能です。
  6. Metricsを有効化する場合はYesを選択する。CPU・メモリ使用量や蓄積された報酬の確認などができます。報酬関係はスマホアプリからも確認できるのでNoでも問題ないです。
  7. MEV-Boost Modeを聞かれたらExternally Managedを選択する。
  8. 上記の設定が完了したらSave and Exitを選択します。設定を確認したい場合はReview All Settingsからできます。
  9. ウィザードでの設定完了後はSmartnode Stackを起動するか聞かれるのでyを入力してください。
  1. 念の為、コマンドでもSmartNode Stackを起動します。
rocketpool service start
  1. Smartnode StackのLighthouseのバージョンがホームステーキング共通の設定でインストールしたバイナリのバージョンと一致しているか確認する。異なる場合は、rocketpool service configでウィザードを開き、Consensus Client (ETH2)のContainer Tagをバイナリと同じバージョンにしてください。
# Smartnode StackのLighthouseのバージョン確認
rocketpool service version

# バイナリのLighthouseのバージョン確認
/usr/local/bin/lighthouse --version
  1. 実行クライアントとコンセンサスクライアントの同期状態を確認する。fully syncedと表示されれば次の手順に進んでOKです。
rocketpool node sync

ノードウォレットの設定

Smartnode Stackのウォレットを作成します。このウォレットは、ミニプールにETHを送金する際や、トランザクション手数料を支払う際に使用されます。

  1. ウォレットの作成を開始します。パスワードの設定を求められるので入力します。
rocketpool wallet init
  1. 24単語のシードフレーズは紙にメモし、安全な場所に保管する。確認のためシードフレーズの再入力を求められます。メモに間違いがないように、画面のシードフレーズではなくメモを見ながら入力してください。シードフレーズの入力が完了したら、作成されたウォレットのアドレスが表示されます。これは後で使うのでパソコンのメモ帳などにコピーしておく。
  1. ウォレットの作成が完了したら、前のステップでコピーしたアドレスに0.1ETH程度を送金する。ノードの初期設定でトランザクション手数料を払うのに使用します。アドレスを再度表示したい場合は以下のコマンドです。
rocketpool wallet status
  1. 送金が完了したら、自分のノードをネットワークに登録する。タイムゾーンは統計を取ってるだけなので、申告したくなければEtc/UTCなどを入力してもいいです。
rocketpool node register
  1. 標準ではノードのウォレットが出金先アドレスになっていますが、任意のアドレスに変更することができます。ノードのウォレットはパソコンに秘密鍵が保存されているため、セキュリティの観点からハードウェアウォレット等に出金先アドレスを変更することを強く推奨します。まずは出金先アドレスを仮登録する処理をノードでします。
    ※ 仮登録と本登録の2段階で設定をしたくない場合は、--forceフラグを末尾に付けると1発で設定が完了します。ソロステーキングであれば出金先アドレスは一度設定したら変更できませんが、Rocket Poolは変更後の出金先アドレスから署名すれば再度変更できます。ただし、間違えたアドレスに--forceフラグで変更してしまうと、出金できなくなります。
rocketpool node set-primary-withdrawal-address <your cold wallet address or ENS name>
  1. 出金先アドレスの仮登録が終わったら、Rocket Poolのサイトから本登録をします。(Holeskyテストネットの場合はちら
    出金先となるハードウェアウォレットをサイトに接続します。その後は自分のRocket Poolのウォレットアドレスを画面に入力し、「Find」をクリックします。自分のノードが見つかれば「Confirm Pending」をクリックし、署名します。
    rocketpool node statusで出金先アドレスが正常に変更されたことを確認します。
  1. ブロック生成報酬のSmoothing poolに参加する。
rocketpool node join-smoothing-pool

ミニプールの作成

下準備ができたので、担保のETHをデポジットしてミニプールを作成します。

  1. 作成するミニプール1つあたり8ETHをノードウォレットに送金する。ノードウォレットのアドレスを表示するコマンドは以下です。
rocketpool wallet status
  1. 任意ですが、RPLを提出したい場合は以下のコマンドです。
rocketpool node stake-rpl
  1. ミニプールを作成します。この処理には比較的多めの取引手数料が消費されます。(もちろん経費計上可)
rocketpool node deposit
  1. ミニプールのステータスは自動でInitialized → Prelaunch → Stakingという順番で変わっていきます。状況はrocketpool minipool statusで確認できます。
    • Initialized = ミニプールは作成したが他人からETHをまだ補充できていない状態です。ミニプールが供給過多でrETHの保持者が足りていない場合は順番待ちが発生します。
    • Prelaunch = 他人からのETHを確保できた状態です。ステーキングコントラクトにETHが送金されるためには、Oracle DAOによる認証が必要なので12時間ほど待つ必要があります。
      ※ PrelaunchからStakingに移行するための処理は、ノードが自動でトランザクションを実行します。ガス代の限度額をrocketpool service config > Smartnode and TX Fees > Automatic TX Gas Thresholdで低めに設定することで、ネットワークのガス代がこの限度額まで下がるまでprelaunch状態で待機してくれます。限度額の標準値は150gweiに設定されていて、ネットワークのガス代はRapidが参照されています。14日経っても限度額まで下がらなかった場合は14日後時点のガス代で勝手に実行されるため、低くしすぎない方がいいです。処理のログはrocketpool service logs nodeで確認できます。
    • Staking = ETHがステーキングコントラクトに送金された状態ですが、ステーキングが実際に開始されるまで最短で16時間は待つ必要があります。新たにアクティブになれるバリデーターの数は限られているため、大量のデポジットがあった場合は順番待ちが発生します。beaconcha.inで自分のバリデーターを検索すれば、いつアクティブになるか確認できます。

確認用アプリの設定

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

動作確認するときのコマンド

sudo journalctl -fu nethermind

sudo journalctl -fu lighthousebeacon

sudo journalctl -fu mev-boost

# ノードウォレットのアドレスと残高、出金先アドレス
rocketpool node status

# ノードウォレットからETHまたはRPLを送金する
rocketpool node send <amount> <token> <to>
例: rocketpool node send 0.1 eth 0x000....000

# 運用しているミニプールの一覧、バリデーター番号と公開鍵
rocketpool minipool status

# Smartnode Stack全体のログ
rocketpool service logs

# 設定の変更
rocketpool service config

# 今まで受け取った報酬の確認
rocketpool node rewards

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

# 時刻の同期を確認
chronyc sources

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

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

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

# サーバー起動日数
uptime

アップデート方法

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

Smartnode Stackのアップデート方法は以下のコマンドです。

rocketpool service stop

wget https://github.com/rocket-pool/smartnode-install/releases/latest/download/rocketpool-cli-linux-amd64 -O ~/bin/rocketpool

rocketpool service install -d

rocketpool service config

rocketpool service start

Smartnode StackのLighthouseのバージョンがホームステーキング共通の設定でインストールしたバイナリのバージョンと一致しているか確認する。異なる場合は、rocketpool service configでウィザードを開き、Consensus Client (ETH2)のContainer Tagをバイナリと同じバージョンにしてください。

# Smartnode StackのLighthouseのバージョン確認
rocketpool service version

# バイナリのLighthouseのバージョン確認
/usr/local/bin/lighthouse --version

ミニプールを増やす方法

ノードウォレットに十分なETHがあれば、最初のミニプールを作成した時のように以下のコマンドを実行して新たなミニプールを作成できます。

rocketpool node deposit

別のサーバーに移す方法

ノードウォレットにどのミニプールが関連付けられているかはオンチェーンに記録されています。従って、新しいサーバーでウォレットのシードフレーズを入力するだけサーバーの移動は完了します。
2つのサーバーで同じミニプールを同時に実行するとペナルティーが課せられるため、新しいサーバーでシードフレーズを入力する前に古いサーバーは停止させてください!

  1. 新しいサーバーにSmartnode Stackをインストールし、実行クライアントとコンセンサスクライアントの同期が完了している状態にします。
  1. 古いサーバーを停止する前に、念の為シードフレーズが正しいか古いサーバーで確認します。
rocketpool wallet test-recovery -a <ノードウォレットのアドレス>
  1. 確認が終わったら、古いサーバーは停止させます。
  1. 新しいサーバーでウォレットを復元します。案内に従ってシードフレーズを入力してください。関連づいているミニプール(及びバリデーター)も勝手に復元されます。
rocketpool wallet recover
  1. バリデーターを再起動します。
docker restart rocketpool_validator

報酬の受け取り方法

Feeの受け取り

Smoothing Poolの報酬は28日間のインターバルごとに分配されます。以下のコマンドを実行すると分配された報酬を出金先アドレスに送金できます。報酬を貯めておいて、何回分かをまとめて送金した方がトランザクション手数料を節約できます。

rocketpool node claim-rewards

Skimmed Rewardの受け取り

Smoothing Pool以外のETHの報酬は1週間に1回ほど分配されます。こちらに関しては閾値(デフォルトでは1ETH)が設定されていて、貯まった金額がこの閾値を超えたら自動的に出金先アドレスに送られるようになっています。閾値まで貯まるのを待たずに出金する場合は以下のコマンドです。

rocketpool minipool distribute-balance

※ 閾値はrocketpool service configSmartnode and TX Fees > Auto-Distribute Thresholdから変更可能です。

ステーキングをやめる手順

ミニプール単位でステーキングをやめることができます。

  1. ミニプールのExit処理をすることでバリーデーターがExistされます。本当にExitしますか?と聞かれるのでI agreeと入力します。
rocketpool minipool exit
  1. バリデーターのExitが完了し、Withdrawされるまで1日以上かかるので待ちます。Exitしようとしているバリデーターが多ければ順番待ちになります。自分のバリデーターの Withdrawalスケジュールはbeaconcha.inから確認できます。
  1. Withdrawal後はミニプールを”Finalized”ステータスにするとETHが出金先アドレスに送られます。
rocketpool minipool close
  1. (RPLの担保がある場合)全てのミニプールをExitしたらRPLの担保が出金可能になります。
rocketpool node withdraw-rpl