コンテンツへスキップ

自宅サーバーでETHをステーキングする方法 (ロケットプール)

※ 32ETHでソロステーキングする方法はこちらにまとめています。

※ ロケットプールのAtlasアップデート後から8ETHのステーキングが可能になります。現在は16ETHのステーキングが可能です。自分はAtlasアップデート後にロケットプールを実際に試す予定なのでこの手順は参考程度にしてください。全部検証できていませんし、まだ書いている途中です。英語ですが公式がガイドを出しているので、こちらも合わせて参考にしてください。

目次

ロケットプールとは

個人で32ETHをデポジットしてバリデーターを運用することを「ソロステーキング」と言います。32ETHは2023年3月の価格だと約700万円です。ETHの価格が上昇していくにあたり、32ETHを個人で用意できる人は少なくなりつつあります。

32ETH未満でステーキングするとなると取引所に委託する方法が主流です。ステーキング代行をしてくれる海外取引所はバイナンスなどありますが、国内でステーキング代行をしてくれる取引所はまだありません。

取引所に頼りたくない場合は、ETHをLSD(Liquid Staking Derivatives)トークンと交換する方法もあります。LidoのLSDトークンであるstETHや、ロケットプールのLSDトークンであるrETHは、ウォレットに保持しているだけで世界の誰かが代わりにバリデーターの運用をしてくれ、手数料が引かれた後の報酬を定期的に受け取ることができます。

『32ETHも持ってない!』『ステーキングを他人に委託したくない!』『自分のサーバーでバリデーターを運用したい!』という願望は、ロケットプールでミニプールを立ち上げば叶えることができます。ロケットプールでは、バリデーターを運用する人が8ETHまたは16ETHを用意してミニプールを作り、32ETHに満たない分をrETHの保有者から補充します。資金のやり取りは全てコントラクト上で管理されているため持ち逃げができないようになっています。

本記事では、8ETHを持っている方に向けて1からロケットプールでバリデーターを構築する方法を解説しています。

画像はethereum.org/ja/staking/pools/より抜粋

※ ロケットプールと似たような仕組みでよく引き合いに出されるのはLidoです。ただ、Lidoは誰でもバリデーターを立てれるわけではなく、Lido DAOが許可した組織しかバリデーターの運用者になれません。誰でもミニプールを作成できるロケットプールの方が圧倒的に分散性が高く、よりイーサリアムのセキュリティを上げることに貢献していると言えます。

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

収益性を比べると、
ロケットプールのミニプール運用 > ソロステーキング > 委託(取引所やLSDトークン)
です。

ロケットプールのミニプール運用者は、rETHの保持者から預かったETHに対して発生するステーキング報酬の約15%を代行手数料として貰えます。32ETHでソロステーキングをするのに比べて、8ETHのミニプールを4つ運用した方がETHの報酬が約40%高くなるということです。

それだけではなく、RPLトークンの報酬もあります。ミニプール運用者はサーバーを常にオンラインにしておく責任があり、その責任を怠った場合の保険として、rETHの保持者から預かるETHの10%以上にあたるRPLを担保としてデポジットする必要があります。8ETHのミニプールであれば2.4ETH相当以上のRPL、16ETHのミニプールであれあば1.6ETH相当以上のRPLです。そしてその担保のRPLに対して年利5%の報酬が貰えます。

要するに、ステーキングを代行するお礼として委託者からETHの報酬の一部を貰え、ノードを正常に稼働している報酬としてプロトコルからRPLを貰えるということです。

また、ロケットプールのバリデーター数が飽和するまではRPLの値上がりによる利益も期待できます。ロケットプールのバリデーター数はいまのところ右肩上がりで増えているため、担保として必要なRPLの需要も上がり続けています。RPLの供給量は年~5%で増えていますが、需要の伸び率の方が高いためRPLの価値が上がることが推測できます。

※ ちなみに、RPLの対ETH価格が下落して10%相当を下回った場合はRPLの報酬は貰えませんがETHの報酬は維持されます。28日おきに報酬計算用のスナップショットが取られるため、下回りそうであればスナップショットまでにRPLを追加で入金しときましょう。RPLの報酬がいらないのであれば下回ったまま放置してもよいです。ミニプールを作成する時は10%相当が必ず必要になります。

ステーキングをするメリット・デメリット

ロケットプールでステーキングをするメリットとデメリットはソロステーキングと大体同じなのでこちらを参照してください。追加のメリットはより高い報酬です。

ソロステーキングよりも報酬が高い一方で、多少のリスクが追加されていることは理解してください。考えられる主なリスクはコントラクトリスクとRPLトークンの暴落リスクです。

コントラクトの致命的なバグによって資産が戻ってこなくなる可能性もゼロではありません。僕はイーサリアムのShanghaiアップグレード後にステーキング資金の出金が可能になるまでロケットプールは触りません。入金から出金までのフルサイクルを回してくれる人柱がいないと安心できないからです。ただ、ロケットプールのコントラクトはしっかりと監査がされていて、なおかつ致命的なバグが見つかることなく数年間稼働している実績があるので過度に心配する必要はないと思います。

RPLトークンは需給のバランスから値上がりが期待できると言いましたが、暴落して元値を割る可能性もあります。ロケットプールのシェアの衰退、トークンエコノミーの改悪、開発者の不祥事など、原因は複数考えられます。

ロケットプールのリスクはご自身でもしっかりと調査し、納得してからステーキング運用を開始してください。ステーキング運用は何があっても自己責任でお願いします。ロケットプールの運用方法は公式からも出ています。英語ですがよくまとめられているのでダブルチェック用のリソースとして活用してください。また、テスト環境で一連の流れをテストしてから本番機の設定をすることを推奨します。

自宅サーバーでのステーキングに必要なもの

ロケットプールでステーキングするのに必要なものはソロステーキングと大体同じなのでこちらを参照してください。異なる部分は担保としてデポジットする資金です。8ETH+最低2.4ETH相当のRPL、または16ETH+最低1.6ETH相当のRPLが必要となります。RPLは国内取引所で販売されてませんが、バイナンスまたはBybitから購入が可能です。手持ちのETHをRPLに変える場合は1inch等のDeFiを使うと楽です。

ソロステーキングのサーバーを既に持っている場合は、同じサーバーでロケットプールも稼働できます。ソロステーキングとロケットプールを同じサーバーで稼働させることを「Hybrid Mode」と呼んでいます。

この記事ではより多くのユーザーに当てはまるよう、Hybrid Modeではなくロケットプール専用機の設定方法を解説しています。Hybrid Modeで構築したい場合は公式ガイドを参照してください。作業相違点は一応ここにメモしてます。

ステーキング開始までの大まかな流れ

Ubuntu ServerというOSにロケットプールのSmartnode Stackをインストールすれば必要なソフトの準備は大体終わります。Smartnodeを起動すれば勝手に実行クライアント、コンセンサスクライアント、MEV-Boostをインストールしてくれます。後はウォレットの設定をするくらいです。

具体的な作業の流れは以下の通りです。ダウンロードの待ち時間を含めると2日くらいかかります。実際の作業時間は5時間もないと思います。慣れるとトータル2時間くらいの作業量です。

  1. Ubuntu Serverのインストール
    自宅サーバーとなるパソコンにUbuntu ServerというOSをインストールします。
  2. Ubuntu Serverの細かい初期設定
    Ubuntu Serverのインターネットの設定など、細かい初期設定をします。
  3. SmartNode Stackのインストール
    ロケットプールが提供しているSmartNode Stackをインストールし、実行クライアント、コンセンサスクライアント、スマートノードのDockerコンテナを設定します。
  4. SmartNode Stackの起動
    SmartNode Stackの設定が完了したら実際に起動します。実行クライアントとコンセンサスクライアントが最新の状態に同期するまで1日以上かかります。
  5. ノードウォレットの設定
    Smartnode Stackのウォレットを作成します。このウォレットはステーキング開始時にミニプールにETHを送金したり、設定変更をチェーン上に記録する際の取引手数料を払う時に使用されます。
  6. ミニプールの作成
    ETHとRPLをデポジットしてミニプールを作成します。
  7. バリデーター確認用アプリのインストール
    バリデーターがステーキングを開始したら、スマホアプリで自分のバリデーターの状態を確認できるようになります。異常があれば通知してくれるのでアプリはインストールしておきましょう。

ステーキングの開始手順

1. Ubuntu Serverのインストール

Ubuntu Serverのインストール方法はこの記事を参照してください。

2. Ubuntu Serverの細かい初期設定

セキュリティの設定をして遠隔操作できるようにします。
下記を上から順番に設定してください。

  • セキュリティアップデートの自動更新:Ubuntuのセキュリティアップデートが自動で適応されるようにします。
  • DNSサーバーの変更:グーグルのパブリックDNSを使用します。
  • ユーザーの作成ethereumというユーザーを作成し、sudoというグループに入れてください。今後サーバーで作業をするときはこのユーザーを使用してください。
  • ファイアーウォールの設定:サーバーにアクセス可能なポートを制限します。任意のポート番号の他に、30303(実行クライアント)と9001(Docker版 Lighthouse)を許可してください。
  • 正確な時刻の設定:ミリ秒単位で時刻が合っている必要があるためNTPをインストールします。
  • IPアドレスの固定:SSHで他のパソコンからサーバーを遠隔操作する場合は、IPアドレスを固定しないと面倒くさいことになります。
  • ルーターのポート開放:厳密にはUbuntu Serverの設定ではありませんが、ルーターのポート転送を設定します。ファイアーウォールの設定で変更した任意のポートと30303(実行クライアント)と9001(Docker版 Lighthouse)が固定したIPアドレスに転送されるように設定してください。
  • SSHの設定:他のパソコンからサーバーを遠隔操作できるようにします。
  • (Wifiで運用する場合)Wifiの設定:標準ではWifiが使えないので使えるようにします。
  • (AMDのCPUを使用している場合)処理落ちを防ぐためこの記事の設定をしてください。

詳細設定の完了後は念のためサーバーを再起動してください。

sudo reboot

3. SmartNode Stackのインストール

ロケットプールが提供しているSmartNode Stackをインストールし、実行クライアント、コンセンサスクライアント、スマートノードを設定します。

  1. 新しいディレクトリを作ります。
mkdir -p ~/bin
  1. ロケットプールのCLIをダウンロードします。
wget https://github.com/rocket-pool/smartnode-install/releases/latest/download/rocketpool-cli-linux-amd64 -O ~/bin/rocketpool
  1. CLIを実行できるように権限を変更します。
chmod +x ~/bin/rocketpool
  1. 権限が変更出来たらサーバーにログインし直し(例:SSHだったら一度接続を切って再接続する)、rocketpoolのコマンドが使用できることを確認してください。
rocketpool --version
  1. ロケットプールのSmartNode Stackをインストールします。
rocketpool service install
  1. インストールが完了したらサーバーにログインし直し(例:SSHだったら一度接続を切って再接続する)、SmartNode Stackのウィザードを起動します。
rocketpool service config

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

  1. Networkを聞かれたらEthereum Mainnetを選択します。
  2. Client Modeを聞かれたらLocally Managedを選択します。
  3. Execution Client(実行クライアント)を聞かれたらどれでもいいので選択してください。
    オススメは分散性の意味合いから一番メジャーなGeth以外です。
  4. Consesus Client(コンセンサスクライアント)を聞かれたらどれでもいいので選んでください。
    オススメは分散性の意味合いから一番メジャーなPrysm以外です。
    この記事ではソロステーキングの記事と同様にLighthouseを選んだとして説明します。
  5. Graffitiを聞かれたら何でもいいので16文字までの文字列を入力してください。Graffitiとは、ブロック生成をした際に記念に文字列をブロックに刻む機能です。僕は特に入力したい文字列がないので空欄にしています。xy座標と色コードを入力することでGraffiti Wallにピクセル単位で絵を描くことも可能です。
  6. Checkpoint SyncのURLを聞かれたら、この一覧のEndpointをどれでもいいので入力してください。Checkpoint Syncをするとコンセンサスクライアントの同期が数分で終わります。
  7. Metricsを有効化する場合はYesを選択してください。CPU・メモリ使用量や蓄積された報酬の確認などができます。報酬関係はスマホアプリからも確認できるのでNoで問題ないです。
  8. MEV-Boost Modeを聞かれたらLocally Managedを選択します。
  9. 上記の設定が完了したらSave and Exitを選択します。設定を確認したい場合はReview All Settingsからできます。
  10. ウィザードでの設定完了後はSmartnode Stackを起動するか聞かれますが、次の手順にすぐ進むのであればyを入力してください。

4. SmartNode Stackの起動

SmartNode Stackの設定が完了したら実際に起動します。初めて起動する際はDockerイメージが作成されるため少し時間がかかります。

  1. SmartNode Stackを起動します。他のクライアントを以前使ってたか警告メッセージが出ますが、該当しないのでyを入力します。
rocketpool service start
  1. 起動したら各クライアントのバージョンが正しいか確認します。
rocketpool service version
  1. Dockerのコンテナが起動されているかも確認します。
docker ps
  1. 実行クライアントとコンセンサスクライアントの同期状態を確認します。
    同期が完了するまで1日以上かかります。同期が完了するまで待ちましょう。
rocketpool node sync

※ サーバーで稼働している実行クライアントとコンセンサスクライアントに不具合が発生した時のために、予備のサーバーを用意しておくことも可能です。設定方法は公式ドキュメントを参照してください。

5. ノードウォレットの設定

Smartnode Stackのウォレットを作成します。このウォレットは、ステーキング開始時にミニプールにETHを送金したり、設定変更をチェーン上に記録する際の取引手数料を払う時に使用されます。

  1. ウォレットの作成を開始します。パスワードの設定を求められるので入力します。
rocketpool wallet init
  1. 24単語のシードフレーズは紙にメモし、安全な場所に保管してください!くれぐれもインターネットに接続されている環境に保存しないでください!!シードフレーズを盗まれたらETHを失ったと思ってください!!!
    確認のためシードフレーズの入力を求められます。メモに間違いがないように、画面のシードフレーズではなくメモを見ながら入力してください。
    シードフレーズの入力が完了したら、作成されたウォレットのアドレスが表示されます。これは後で使うのでパソコンのメモ帳などにコピーしておきましょう。
  1. ウォレットの作成が完了したら、前のステップでコピーしたアドレスに1ETH程度を送金します。
    オンチェーンの設定で取引手数料を払うのに使用します。
    アドレスを再度表示したい場合は以下のコマンドです。
    ※ デポジットする8ETHまたは16ETHもこのタイミングで送金してもいいですが、デポジットする直前に送金した方が安全だと思います。
rocketpool wallet status
  1. 送金が完了したら、自分のノードをネットワークに登録します。
    タイムゾーンを自動的に判断してもらうためにyを入力します。統計を取るためだけにタイムゾーンを設定するため、申告したくなければEtc/UTCを指定してもいいです。
rocketpool node register
  1. 標準では上記で作成したノードのウォレットが出金先アドレスになっていますが、任意のアドレスに変更することができます。ノードのウォレットの秘密鍵はサーバー上に保存されているため、ハードウェアウォレット等に出金先アドレスを変更することを推奨します。まずは出金先アドレスを仮登録する処理をノードでします。
rocketpool node set-withdrawal-address <your cold wallet address or ENS name>
  1. 出金先アドレスの仮登録が終わったら、ロケットプールのサイトから本登録をします。出金先となるアドレスのウォレットをサイトに接続し、自分のノードのウォレットアドレスを画面に入力したら「Find」をクリックします。自分のノードが見つかれば「Confirm Pending」をクリックして署名したら本登録が完了するのを待ちます。rocketpool node statusでノードからも出金先アドレスが正常に変更されたことを確認できます。
    ※ 本登録が終わるまでは出金先アドレスは変更されません。
    ※ ソロステーキングであれば出金先アドレスは一度設定したら変更できませんが、ロケットプールでは出金先アドレスから署名すれば再度変更が可能になっています。
  1. 自分のノードがブロック生成をすればブロック生成報酬を貰うことができますが、ブロック生成ができるかは運任せとなっています。Smoothing poolに入ることで、ブロック生成をしてもしなくても一定の報酬が貰えるようになるので入ることを推奨します。統計的にはSmoothing poolに入った方が期待値が高いです。
rocketpool node join-smoothing-pool

6. ミニプールの作成

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

  1. デポジットするETHとRPLをノードウォレットに送金します。
    ノードウォレットのアドレスを表示するコマンドは以下です。
rocketpool wallet status
  1. ETHをデポジットする前に、他人から預かるETHの10%以上にあたるRPLをデポジットします。8ETHのミニプールであれば2.4ETH相当以上のRPL、16ETHのミニプールであれば1.6ETH相当以上のRPLです。
rocketpool node stake-rpl
  1. RPLのデポジットが完了したら、何個のミニプールを作成できるか一応確認します。”RPL Stake and Minipools”の箇所に”The node has a total stake of XXX.XXX RPL and an effective stake of X.XXX RPL, allowing it to run n minipool(s) in total.”と記載されているはずです。
rocketpool node status
  1. ETHをデポジットします。デポジットには比較的多めの取引手数料が消費されます。
rocketpool node deposit

※ ETHをデポジットしてミニプールを作成したら新たなrETHがマーケットに放出されます。rETHの需要は高く多少のプレミア価格がついていることが多いため、rETHが放出される際にアビトラの機会が発生します。公式ドキュメントにも記載されていますが、rocketarbを使えば、デポジットとアビトラを同時にやってくれるので少し得することができます。どのくらい得するかはここで確認できます。

  1. ミニプールのステータスはInitialized → Prelaunch → Stakingという順番で変わっていきます。状態はrocketpool minipool statusで確認できます。
    • Initialzed = ミニプールは作成したが他人から16ETHをまだ補充できていない状態
    • Prelaunch = 他人からの16ETHを確保できてステーキングコントラクトに自分の分の16ETHが入金された状態
    • Staking = 他人からの16ETHもステーキングコントラクトに入金されステーキング準備が完了した状態(ステーキングが実際に開始されるまで最低でも16時間はかかります)

7. バリデーター確認用アプリのインストール

バリデーターがステーキングを開始したら、スマホアプリで自分のバリデーターの状態を確認できるようになります。異常があれば通知してくれるのでアプリはインストールしておきましょう。

  1. iPhoneの場合はApp Storeから、Androidの場合はPlay StoreからBeaconchain Dashboardというアプリをダウンロードします。
  1. アプリを開き、Validatorsタブから自身のバリデーターを検索し、お気に入りに登録する。自分のバリデーターの番号または公開鍵はrocketpool minipool statusで確認できます。
  1. PreferencesのNotification Preferencesでバリデーターに不具合があった時の通知を受け取るようにする。あmた、Rocketpool Smartnodeのアップデート通知も受け取るようにする。

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

ロケットプールの各種確認用コマンド

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

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

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

# ロケットプールで実行されている処理のログ
rocketpool service logs

# バージョン情報
rocketpool service version

# 設定を変更する
rocketpool service config

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

CPU/メモリ使用率とSSDの使用率を確認する。

# CPU/メモリ使用率
htop

# SSD使用率
df -h

時刻の同期(NTP)を確認する。

ntpq -pn -c rv

データ通信料を確認する。

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

# サーバー起動日数
uptime

※ Rocketpoolが提供しているGranafaダッシュボードの設定方法は公式ドキュメントを参照してください。

報酬の受け取り方法

28日ごとに新たな報酬を受け取ることができます。
報酬を貯めておいて、後でまとめて受け取ることも可能です。まとめて受け取った方が手数料がお得です。

rocketpool node claim-rewards

※ RPLの対ETH価格が下落して10%相当を下回った場合はRPLの報酬は貰えません。rocketpool node statusでcollateral ratioが10%以上になっていることを確認してください。10%を下回ってしまっていたら、rocketpool node stake-rplで追加を入金しましょう。

アップデート方法

クライアントの新リリースがあれば、Smartnode Stackをアップデートする必要があります。
スマホアプリでアップデートの通知を受け取るようにしておきましょう。

  1. Ubuntu Serverのアップデートをする。
sudo apt update && sudo apt update -y
  1. 念の為サーバーを再起動します。ロケットプールは再起動後に自動で起動されます。
sudo reboot
  1. ロケットプールを停止し、アップデートをする。
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
  1. アップデート内容を確認し、ロケットプールを起動します。
rocketpool service config

rocketpool service start

ミニプールを増やす方法

ミニプールを増やす場合は、事前に10%相当以上のRPLがデポジットされている必要がります。
まずは何個ミニプールを作成できるか確認します。”RPL Stake and Minipools”の箇所に”The node has a total stake of XXX.XXX RPL and an effective stake of X.XXX RPL, allowing it to run n minipool(s) in total.”

rocketpool node status

RPLが十分であれば、最初のミニプールを作成したように以下のコマンドを実行するだけでミニプールを新たに作成できます。

rocketpool node deposit

別のサーバーに移す方法

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

  1. 新しいサーバーにSmartnode Stackをインストールし、実行クライアントとコンセンサスクライアントが同期されている状態にします。
  1. 古いサーバーを初期化する前に、念の為シードフレーズが正しいか古いサーバーで確認します。
rocketpool wallet test-recovery -a <ノードウォレットのアドレス>
  1. ウォレットの復元テストに成功したら、古いサーバーにUbunsu Serverをインストールし直すなどしてロケットプールのデータを削除します。
  1. 新しいサーバーでウォレットを復元します。案内に従ってシードフレーズを入力してください。
    ウォレットに紐づくミニプールおよびバリデーターも復元されます。
rocketpool wallet recover
  1. バリデーターを再起動します。
docker restart rocketpool_validator