Saturn 1の準備のため、現在minipoolのデポジットは無効になっています。
Solo ValidatorをMinipoolに変換する
Beacon Chainが最初にローンチされたとき、validatorは特別な暗号鍵のペア - validator keyとwithdrawal keyで作成されました。
validator keyは「ホットキー」で、インターネットに接続されたアクティブなマシンに保存する必要があります。これはアテステーションと提案に署名するために使用されるキーであり、Beacon Chain上の「アドレス」(validatorを識別するための16進文字列)としても機能します。
一方、withdrawal keyは「コールドキー」で、インターネットに接続されたアクティブなマシンに保存しない(実際には保存すべきではない)ものです。 必要になるまでコールドストレージにロックして保管することを目的としています。 validator keyとは異なり、withdrawal keyは検証業務には一切関与しません。 代わりに、その唯一の役割は、Beacon Chain上のvalidatorの資金の引き出しを管理することです(引き出しが実装された後)。
この二重鍵システムは、Beacon Chainがローンチした当初のアーキテクチャでした。 当時、Mergeもwithdrawalsもまだ設計されていませんでしたが、このシステムは両方が実装されたときにプロトコルがどのような形をとっても対応できるほど堅牢であると考えられていました。
現在に至り、withdrawalsがどのように機能するかについてはるかに深い理解を得ています。 幸いなことに、古いwithdrawal key認証情報を使用しているBeacon Chain上の既存のソロステーキングvalidatorが、Beacon Chainからvalidatorを終了する必要なく、Rocket Pool minipoolに直接変換できるように実装されています!
このプロセスについて詳しく知りたい場合は、このガイドが役立ちます。 Ethereumでのwithdrawalsの動作をハイレベルで説明し、変換プロセスの仕組みを説明し、validatorをminipoolに変換する方法の詳細なウォークスルーで終わります。
なぜ変換するのか?
技術的な詳細に入る前に、答えるべき非常に重要な質問は、そもそもなぜソロステーカーがこのプロセスを検討するのかということです。 minipoolへの変換はすべての人に適しているわけではありませんが、このセクションは、それがあなたが追求したいものかどうかについて情報に基づいた選択をするのに役立ちます。
Rocket Pool minipoolは、従来のソロステーキングvalidatorと比べていくつかの利点があります:
- プールステーカーから借りたETHの部分(24 ETH)に対してコミッションを獲得します。
- 既存の32 ETH bondを使用して、(すでに持っているものに加えて)最大3つの追加validatorを作成できます。
- Smoothing Poolへの参加が可能で、すべてのExecution layer報酬(ブロック提案やMEV報酬からのものなど)をプールし、各報酬インターバル中に参加者間で公平に分配します。
- RPLをステーキングすると、ボーナスコミッションとRPLインフレーション報酬を獲得します(現在、ETHステーキング報酬よりも高いAPRを提供しています)。
とはいえ、強調すべき重要な違いがいくつかあります:
- スマートコントラクトリスクを受け入れる必要があります。プロトコルは一連のスマートコントラクトとして実装されているためです。
- 同様に、従来のノード運用はSmartnodeスタックを活用します。ノードにそのソフトウェアをインストールして実行することに関連するリスクを受け入れる必要があります。
- ノードオペレーターになることにはいくつかの新しい概念を学ぶことが含まれるため、学習曲線があります。
- Minipoolは報酬をプールステーカーと分割する必要があるため、validatorのwithdrawal addressはあなたが制御するEOAではなく、Execution layer上のスマートコントラクトになります。これは、Execution layer報酬のfee recipientにも適用され、報酬を公平に分割できるスマートコントラクトである必要があります。
- Rocket PoolのOracle DAOは、Beacon ChainからExecution layerへの情報のシャトルと、プロトコルが強制できない違反(不正なfee recipientアドレスなど)の検出を担当しています。minipoolを実行するということは、Oracle DAOがその仕事を正しく行うことを信頼する必要があることを意味します。
ソロvalidatorを変換することを決定する前に、これらの長所と短所を慎重に検討することをお勧めします。 プロセスを続けたい場合は、次のセクションをお読みください。
前提条件
変換プロセスを開始するには、次の基準を満たす必要があります:
- 新しいminipoolをホストするためにRocket Poolネットワークに登録されたノードが必要です。
- 移行したいvalidatorはBeacon chain上でアクティブである必要があります。pending、slashed、exiting / exited、またはwithdrawであってはなりません。
- validatorはBeacon chain上で少なくとも32 ETHの残高が必要です。
- validatorはBLS key withdrawal credentials(
0x00認証情報)を持っている必要があります。すでに他のExecution layer withdrawal credentials(0x01認証情報)に移行されているvalidatorでは変換できません。 - (オプション)Smartnodeにwithdrawal credentialsを自動的に移行させたい場合は、mnemonic phraseを手元に用意する必要があります。
これらの条件のいずれもブロッカーでない場合は、validator変換を開始する資格があります。
プロセス概要
最初のステップは、新しい「vacant」minipoolを作成することです。
作成時に新しいvalidatorを作成する従来のminipoolとは異なり、vacant minipoolは_既存の_validatorを管理するために設計された特別なminipoolです。
その結果、vacant minipoolはprelaunchステージ中に従来のminipoolとは若干異なる動作をします。
初期化が完了してstakingステージに入ると、従来のminipoolになります。
vacant minipool作成中に、Smartnodeが自動的にvalidatorのwithdrawal credentialsを変更するオプションが与えられます。古いBLS withdrawal keyから新しいvacant minipoolアドレスへ変更します。 今すぐこれをしたくない場合は、専用のコマンドでSmartnodeに後で実行させるか、サードパーティのツールで自分で実行できます。 validatorのwithdrawal credentialsをminipoolアドレスに変更することは変換に必要であるため、どのように行うにしても、プロセスを正常に完了するためにこれを行う必要があります。
withdrawal credentialsが変更されたら、validatorの秘密鍵をインポートするオプションがあります。Smartnodeが管理するValidator Clientにインポートします。 Smartnodeにvalidatorを維持させて、自分で管理する必要がない場合、これは魅力的なオプションです。 自分のValidator Clientを維持してそこにキーを保持したい場合は、そうすることを歓迎します。
この時点で、新しいminipoolはscrub check期間に入ります。Oracle DAOは、validatorのBeacon Chain上の情報を継続的に分析して、それが合法であることを確認します。 これには以下が含まれます:
- withdrawal credentialsがまだ移行されていない(まだ元の
0x00BLS key認証情報である)か、minipoolのアドレスに移行されている。他のExecution layerアドレスに移行すると、プールがscrubされます。- scrub check期間が終了するまでにwithdrawal credentialsがまだ元の
0x00BLS key認証情報である場合、プールはscrubされます。
- scrub check期間が終了するまでにwithdrawal credentialsがまだ元の
- validatorがチェック期間中ずっとアクティブステーキング状態にある。slashed、exited、またはwithdrawステートに移行すると、プールはscrubされます。
scrubされたvacant minipoolは、Rocket Poolネットワークの一部ではなくなりますが、CLIの典型的なトークン取得メソッドを介してすべての資金にアクセスできます。 vacant minipoolがscrubされても、資金は失われません。 scrubされたminipool、その影響、および使用方法に関する詳細は、このガイドの後半に含まれています。
scrub checkが合格した後、vacant minipoolをプロモートできます。 これにより変換が完了し、vacant minipoolから通常のminipoolに変更されます。 この時点で、minipoolはネットワーク上の他のすべてのminipoolと同様に動作し、ソロvalidatorは正式にRocket Pool validatorに変換されます!
プロセスの一部として、ネットワークはBeacon chain上の総報酬(およびscrub check中にskimされた場合は新しいminipool内)のスナップショットを取得します。 それらの報酬がすべてあなたに属し、ステーキングプールと共有すべきではないことを認識するため、プロモーション完了後にいつでも請求できるrefundとして提供します。
以下は、各ステップの手順を含む変換プロセスの詳細なウォークスルーです。
ステップ1: Vacant Minipoolの作成
変換プロセスを開始するには、Smartnode CLIで次のコマンドを実行します:
例えば、pubkey 0xb82ccba6093747559361a5495c7e2c607e76ea3543d556319355ce80289bb819fd787f715f60615cdd358c0476b40661のソロvalidatorを変換したい場合は、次を実行します:
プロセス中に何を期待するかについての簡単な要約が表示され、次にこのminipoolを作成する際に使用したいbond金額のプロンプトが表示されます:
8 ETHを選択すると、validatorを8-ETH bondedのminipoolに変換します。 元の32 ETHデポジットは8 ETHデポジットに変換され、24 ETHがプールステーカーから借りられます。 変換プロセスが完了すると、24 ETHのcredit balanceが得られ、これを使用してさらにminipoolを作成できます。
オプションを選択すると、Smartnodeはいくつかのチェックを実行して、入力したvalidatorとノードの両方が上記のすべての前提条件に合格していることを確認します。 その後、ガス価格を確認してから、新しいvacant minipoolを作成するトランザクションを送信するよう求められます。 作成時に、minipoolのアドレスが表示されます:
これは、validatorのwithdrawal credentialsを変更する際に使用するアドレスです。
この時点で、Smartnodeは自動的にこれを実行するかどうかを尋ねます(後で説明するSmartnodeが管理するValidator Clientにvalidatorの秘密鍵をインポートすることとともに):
この質問にyと答えると、Smartnodeは自動的にステップ2と3を実行します。以下のAutomatic Withdrawal Credential Change and Key Importセクションを参照してください。
この質問にnと答えると、コマンドは終了し、ステップ1が完了します。
次にステップ2セクションに進んでください。
Automatic Withdrawal Credential Change and Key Import
Smartnodeに自動的にwithdrawal credentialsを変更してvalidatorの秘密鍵をインポートさせることを選択した場合、古い自分で管理するValidator Clientからvalidator keyを削除し、古いValidator Clientをシャットダウンして、まだメモリにキーがロードされていないことを確認することが不可欠です。
また、これを行った後少なくとも15分待って、意図的に少なくとも2つのアテステーションを逃したことを確認する必要があります。 これは、https://beaconcha.inなどのチェーンエクスプローラーを見て確認できます。
少なくとも15分待たない場合、SmartnodeのValidator Clientがvalidatorのキーでアテステーションを開始すると、validatorはスラッシュされます!
また、スラッシングのリスクに対して可能な限り安全であるために、Smartnode設定でdoppelganger detectionを有効にすることを強くお勧めします。
validator keyを自動的にインポートし、withdrawal credentialsをminipoolアドレスに変更することを選択した場合、Smartnodeはまず、validatorのBLS秘密鍵とそれに対応する元のwithdrawal keyの両方を生成するために使用されたmnemonicを要求します:
入力すると、Smartnodeはmnemonicとvalidatorのpubkeyを使用して古いBLSベースのwithdrawal keyを導出します。 次に、withdrawal credentialsを古いBLS withdrawal keyから新しいminipoolアドレスに変更したいことを示す、withdrawal keyによって署名されたメッセージをBeacon Chainに送信します:
最後に、validatorのキーをSmartnodeのValidator Clientにインポートし、そのキーで検証を開始するためにValidator Clientを再起動するかどうかを尋ねます:
これでステップ2と3が完了しました。 withdrawal credentialsが適切に変更され、キーがアクティブに検証されていることを、https://beaconcha.inなどのチェーンエクスプローラーを使用して確認できます
ステップ4セクションに進んで、scrub checkについて学習してください。
ステップ2: ValidatorのWithdrawal Credentialsの変更
新しいvacant minipoolを作成したら、次のステップは、validatorのwithdrawal credentialsを古い0x00 BLS-key認証情報から新しいminipoolアドレスを含む新しい0x01認証情報に変更することです。
これを行うには2つの方法があります:
- Smartnode CLIを使用して、
rocketpool minipool set-withdrawal-credsコマンド経由。 - ethdoなどの外部サードパーティツールを使用。
このガイドでは、方法1(Smartnode)の使用方法を説明します。 方法2の詳細については、使用したいツールのドキュメントを参照してください。
まず、次のコマンドを実行します:
例えば、新しいvacant minipoolアドレスが0x8F3F149e4416a94e0ee909dE32f8A11C2F3e211Cの場合、次を実行します:
Smartnodeは、validatorのキーとそれに対応するwithdrawal keyの両方を生成するために使用されたmnemonicを要求します:
この後、validatorのwithdrawal credentialsを変更できることを確認するためのいくつかの安全チェックを実行します。 成功すると、withdrawal credentialsを古いBLS withdrawal keyから新しいminipoolアドレスに変更したいことを示す、withdrawal keyによって署名されたメッセージをBeacon Chainに送信します:
これで完了です! withdrawal credentialsが適切に変更されたことを、https://beaconcha.inなどのチェーンエクスプローラーを使用して確認できます。
(オプション)ステップ3: Validator Keyのインポート
validatorをminipoolに変換したら、自分で管理しているものの代わりに、SmartnodeのValidator Clientで実行したい場合があります。 これにはいくつかの利点があります:
- 組織的な観点から「きれいです」(Smartnodeはminipoolsを管理し、外部管理のValidator Clientはソロステーキングvalidatorを管理します)。
rocketpool minipool exitのようなコマンド(メッセージに署名するためにvalidator keyを必要とするコマンド)が機能するようになります。
ただし、これを行う前に理解すべき非常に重要な考慮事項がいくつかあります:
- 自分のValidator Clientからvalidatorのキーが削除されていることを確認する必要があり、Smartnodeにインポートする前に削除後少なくとも15分待つ必要があります。以下の警告ボックスを参照してください。
- validator keystoreとそのパスワードファイルをバックアップしていることを確認する必要があります。
rocketpool wallet recoverやrocketpool wallet rebuildのようなコマンドは、Smartnodeウォレットのmnemonicから導出されていないため、バックアップなしでは再生成できません。
validator keyをSmartnodeにインポートしたい場合は、以下を続けてお読みください。
Smartnodeにvalidatorの秘密鍵をインポートさせることを選択した場合、自分で管理する古いValidator Clientからvalidator keyを削除し、古いValidator Clientをシャットダウンして、まだメモリにキーがロードされていないことを確認することが不可欠です。
また、これを行った後少なくとも15分待って、意図的に少なくとも2つのアテステーションを逃したことを確認する必要があります。 これは、https://beaconcha.inなどのチェーンエクスプローラーを見て確認できます。
少なくとも15分待たない場合、SmartnodeのValidator Clientがvalidatorのキーでアテステーションを開始すると、validatorはスラッシュされます!
また、スラッシングのリスクに対して可能な限り安全であるために、Smartnode設定でdoppelganger detectionを有効にすることを強くお勧めします。
まず、次のコマンドを実行します:
例えば、新しいvacant minipoolアドレスが0x8F3F149e4416a94e0ee909dE32f8A11C2F3e211Cの場合、次を実行します:
Smartnodeは、validatorのキーを生成するために使用されたmnemonicを要求します:
この後、そのmnemonicから生成されたさまざまなキーをサイクルして、validatorの公開鍵を見つけます。 次にそれをインポートし、SmartnodeのValidator Clientを再起動してキーをロードするかどうかを尋ねます:
これで、validator keyがSmartnodeにインポートされ、アテステーションを開始するはずです。 次のコマンドでValidator Clientのログをフォローして確認できます:
また、https://beaconcha.inなどのチェーンエクスプローラーで、Validator ClientがvalidatorのキーでアテステーションしていることをVCが確認できることも確認できます。
ステップ4: 正しいFee Recipientの割り当て
移行プロセスを開始したら、fee recipientが適切に設定されていることを確認することが不可欠です(ノードのfee distributorまたはSmoothing Poolにオプトインしている場合はSmoothing Poolのいずれか)。 これを行わず、ソロvalidatorのfee recipientのままにしておくと、ペナルティが科され、損失を補償するためにBeacon Chainステークの一部が差し引かれます。
このステップは、自分の外部管理のValidator Clientにvalidator keyを残す場合にのみ必要です。
自分のVCからキーを削除し、Rocket Poolが管理するVCにインポートすると、fee recipientはnodeプロセスによって自動的に正しいアドレスに割り当てられます。
VCに他のソロステーキングキーを保持していて、fee distributorやSmoothing Poolに設定したくない場合、これを達成する唯一の方法は、VC設定ファイルを使用して、移行されるvalidatorのfee recipientを手動で設定することです。
このプロセスは、使用しているConsensus Clientによって異なります。詳細についてはドキュメントを参照してください。以下にいくつかの役立つリンクがあります:
Lighthouse: via validator_definitions.yml
Lodestarは現在、validator固有のfee recipientの設定をサポートしていません。移行されていない他のソロキーで外部管理のVCにキーを保持している場合は、Lodestarを使用しないでください。
Nimbus: via the keymanager API
Prysm: via proposer-settings-file
Teku: via validators-proposer-config
eth-dockerを使用している場合は、ドキュメントに記載されているように./ethd keys set-recipientコマンドを使用して、使用している各キーに個別のrecipientを設定できます。
ステップ5: Scrub Checkの待機
この時点で、ステップ1と2(vacant minipoolの作成とvalidatorのwithdrawal credentialsの変更)、およびオプションでステップ3(Smartnodeへのキーのインポート)を完了しているはずです。 次のステップは、scrub checkが完了するのを待つことです。 これは、Oracle DAOによって実行されるプロセスで、次のことを確認します:
- Beacon Chain上のvalidatorの残高(およびExecution layer上のminipoolの残高)は、最初にvacant minipoolを作成したときのvalidatorの残高以上である必要があります。メンテナンス中の偶発的なアテステーションミスを考慮して0.01 ETHの小さなバッファを差し引いたものです。
- 例えば、ステップ1を実行したときにvalidatorのBeacon Chain残高が35 ETHだった場合、scrub check全体を通じてBeacon ChainとMinipoolの残高を合わせて少なくとも34.99 ETHである必要があります。
- validatorは、scrub check全体を通じてアクティブステーキングステータスのままである必要があります - スラッシュ、終了、または引き出しすることはできません。
- validatorのwithdrawal credentialsは、元のBLSベースのwithdrawal key認証情報、またはminipoolのアドレスを使用した新しい0x01認証情報のいずれかである必要があります。他の認証情報はminipoolをscrubします。
- withdrawal credentialsの変更を実行するために約2日半の猶予期間が与えられます(scrub期間の3日間の85%)。
scrub checkは一時的なものです。この間、validatorをオンラインに保ち、良好なパフォーマンスを維持する以外に何もする必要はありません。
scrub checkの残り時間を監視するには、次のコマンドでnodeログを確認できます:
関連する行は次のようになります:
これは3日間続き、その後合格してvacant minipoolを完全なものにプロモートするためにステップ6に進むことができます。
Scrubbed Minipoolsの操作
残念ながらminipoolがscrub checkに失敗して解散した場合でも、心配する必要はありません - 資金は失われていません。 解散したvacant minipoolは基本的に簡素化されたwithdrawal addressとして機能します:
- 技術的にはRocket Poolネットワークの一部ではありません。
- minipoolに預けられた資金はノードオペレーターのみに属します。プールステーカーと分割されません。
- minipoolを作成してもdeposit creditは付与されません。
次のコマンドでいつでもminipoolの残高にアクセスできます:
これにより、minipoolの全残高がノードのwithdrawal addressに送信されます。
Beacon ChainからValidatorを終了し、全残高がminipoolに送信されたら、次のコマンドで取得してminipoolを閉じることができます:
繰り返しますが、これによりminipoolの全残高がノードのwithdrawal addressに送信されます。
ステップ6: Minipoolのプロモート
scrub checkが正常に合格したら、vacant minipoolを完全なminipoolにプロモートできます。 これは2つの方法で実行できます:
- scrub checkが終了したらすぐに
nodeプロセスが自動的に処理します。 - CLIを使用して手動で実行します。
最初の方法は、nodeプロセス/コンテナが実行されており、ネットワークのガスコストがSmartnode設定プロセスで指定した自動トランザクション閾値(デフォルト150)を下回っている場合、自動的にminipoolをプロモートします。
nodeログには、次のような出力が表示されます:
nodeプロセスが無効になっている場合は、次のコマンドを使用して2番目の方法を使用できます:
ここから、プロモーション対象のminipoolのリストから空のminipoolを選択し、トランザクションを送信するだけです。
元の変換前報酬の請求
プロモーション時に、minipoolはstakingステータスに入り、正式に通常のRocket Pool minipoolになりました。
次のコマンドで詳細を確認できます:
これにより、新しいminipoolのステータス、残高、refundなどが表示されます。 例えば:
ここでは次の重要な情報を確認できます:
Node depositは、このminipoolの一部として個人的にbondしたETHの量を示しています(この場合、8 ETH)。RP depositは、minipoolを作成するためにプールステーカーから借りたETHの量を示しています(この場合、24 ETH)。Available refundは、minipoolの残高のうち、直接あなたに属する部分(プールステーカーと共有されない)を示しています。これは、vacant minipoolを作成した時点でのBeacon Chain上のすべての報酬に相当します。Minipool Balance (EL)は、minipoolコントラクトの総残高を示しています。Your portion (EL)は、minipoolの残高からrefundを差し引いた後にあなたに属する残高を示しています。言い換えれば、これはvacant minipoolを作成した後に獲得した報酬のあなたのシェアです。Total EL rewardsは、refundと変換後の報酬を合わせたものです。
refundを請求するには、次のコマンドを実行します:
リストからminipoolを選択し、トランザクションを承認すると、refundがノードのwithdrawal addressに送信されます。
Node Creditの使用
アクティブなプロモートされたminipoolができたので、rocketpool node statusを実行すると、ノードにcredit残高があることがわかります:
この例では、元の32 ETH validator bondを8-ETH minipoolに変換したため、24 ETHのcreditを受け取りました。 このcreditは、新しいminipoolとvalidatorを無料で作成するために使用できます!
rocketpool node depositコマンドを実行し、使用したいbond金額を選択するだけです。
credit残高にbondをカバーするのに十分なETHがある場合、自動的に使用され、追加のETHをステーキングする必要はありません(ただし、ガスの支払いは必要です)。
credit残高に使用されるETHは、ステーキングプールから来ています。 ステーキングプールにcredit残高をカバーするのに十分なETHがない場合、さらにETHが預けられるまで使用できません。