Testing the Fallback Clients

If you'd like to be absolutely sure that your configuration is going to work by testing the fallback clients, simply stop the Execution and Consensus clients on your main node:
shelldocker stop rocketpool_eth1 rocketpool_eth2
Then run any command that queries the chain, such as rocketpool network stats. You will see a warning message at the top indicating that one (or both) of your primary clients are offline, and that it's reverting to the fallback clients:
NOTE: primary clients are not ready, using fallback clients...
	Primary EC status: unavailable (Sync progress check failed with [Post "http://eth1:8545": dial tcp: lookup eth1 on 127.0.0.11:53: no such host])
	Primary CC status: synced and ready

========== General Stats ==========
Total Value Locked:      278978.009858 ETH
Staking Pool Balance:    10.587295 ETH
Minipool Queue Demand:   3360.000000 ETH
Staking Pool ETH Used:   99.735490%

============== Nodes ==============
Current Commission Rate: 15.000000%
Node Count:              1325
Active Minipools:        6409
    Initialized:         175
    Prelaunch:           3
    Staking:             6227
    Withdrawable:        0
    Dissolved:           4
Inactive Minipools:      0

========== Smoothing Pool =========
Nodes Opted in:          0
Pending Balance:         0.000000

============== Tokens =============
rETH Price (ETH / rETH): 1.031919 ETH
RPL Price (ETH / RPL):   0.011563 ETH
Total RPL staked:        6098920.170527 RPL
Effective RPL staked:    5751692.043848 RPL
Finally, start your primary clients again:
shelldocker start rocketpool_eth1 rocketpool_eth2
And you're done! Your fallback setup is working.


Next Steps

Whether or not you've opted into creating and/or running a fallback node for your setup, the next step is to learn about priority fees. Click on the next section of the guide when you're ready to proceed.


Fee Distributors and the Smoothing Pool

Now that the Merge has passed, node operators receive priority fees (tips) from the transactions they include in any blocks that they propose to the Ethereum chain. These fees come from and stay on the Execution layer.
Unlike most validation rewards which are locked on the Consensus layer (until withdrawals are enabled), these fees are immediately liquid. In general, priority fees provide almost as much ETH to you as Beacon Chain rewards do, so they are a very nice benefit of the Merge.
NOTEAs a quick reminder here's a breakdown of the different types of rewards and which layer they're provided on:Consensus Layer: attestations, block proposals, sync committees, slashing reportsExecution Layer: priority fees and MEV (discussed in the next section) from block proposals


Fee Recipients

When you propose a block on the Ethereum chain, the protocol needs to know where to send the tips from each transaction included in your block. It can't send them to your validator's address, because that's on the Consensus layer - not the Execution layer. It can't send them to your minipool address, because it has to work for solo stakers too and solo stakers don't have an address on the Execution layer attached to their validators the way Rocket Pool does.
Instead, the way it works is fairly straightforward: when Rocket Pool starts up your Validator Client, it passes in an argument called the fee recipient. The fee recipient is simply an address on the Execution layer where you want the tips to go.
Rocket Pool is designed to fairly distribute these rewards between you and the rETH pool stakers, the same way it fairly distributes your Beacon chain rewards: your portion of any priority fees your minipool validators earn will go to you (plus the average commission of all of your minipools), and the remaining portion will go to the pool stakers (minus your average commission). The exact portion depends on the number of 8 ETH-bonded versus 16 ETH-bonded minipools you have.
To that end, the Smartnode will automatically set your node's fee recipient to either of these special contracts:
Your node's own personal Fee Distributor (the default)The Smoothing Pool (opt-in)
In brief, the Fee Distributor is a unique contract attached to your node that collects and fairly splits your priority fees between you and the rETH stakers. It's like your own personal vault for priority fees. Anyone (including you) can distribute its balance at any time to ensure that the rewards are always available to rETH stakers.
The Smoothing Pool is a special opt-in contract that allows all participating node operators to aggregate and pool their priority fees together, and distributes them evenly among the participants during each Rocket Pool rewards interval (currently every 28 days) and the rETH pool stakers. This is a very compelling feature for node operators that don't want to worry about the luck factor involved in getting block proposals with high priority fees, and would rather have a nice, regular, consistent set of monthly earnings.
We'll cover both of these below so you understand the difference and whether or not you want to join the Smoothing Pool.


Your Fee Distributor

Your Fee Distributor is a unique contract on the Execution Layer that's specific to your node. It will hold all of the priority fees you've earned over time, and it contains the logic required to fairly split and distribute them to the rETH pool stakers and your withdrawal address. This distribution process can be called by anyone (including rETH stakers), and can be done at any time. It does not have a time limit before rewards expire.
The address for your node's Fee Distributor is deterministically based on your node address. That means it is known ahead of time, before the Fee Distributor is even created.
New Rocket Pool nodes will automatically create (initialize) their node's Fee Distributor contract upon registration. Nodes that were created before the Redstone upgrade will need to do this process manually. This only needs to be run once.
One interesting ramification of this is that your Distributor's address may start accruing a balance before you've initialized your Fee Distributor contract. This is okay, because your Distributor will gain access to all of this existing balance as soon as you initialize it.
By default, your node will use its Fee Distributor as the fee recipient for your validators.


Viewing its Address and Balance

You can view your fee distributor's address and balance as part of:
rocketpool node status
The output will look like this:


Initializing the Fee Distributor

To initialize your node's distributor, simply run this new command:
rocketpool node initialize-fee-distributor
NOTEIf you created your node before the Redstone update, you must call this function once before you can create any new minipools with rocketpool node deposit.
When your distributor has been initialized, you can claim and distribute its entire balance using the following command:
rocketpool node distribute-fees
This will send your share of the rewards to your withdrawal address.
NOTE ON TAXABLE EVENTSWhenever you create a new minipool, Rocket Pool will automatically call distribute-fees. This is to ensure that whatever fees you had accumulated are distributed using your node's average commission, which could change when you create the new minipool.Also, note that anyone can call distribute-fees on your fee distributor (to prevent you from holding rETH rewards hostage). You may have a taxable event whenever this method is called.Please keep these conditions in mind when deciding whether or not to use the Smoothing Pool (discussed below).


The Smoothing Pool

The Smoothing Pool is a unique opt-in feature of the Rocket Pool network that is available to our node operators. Essentially, it becomes the fee recipient for every node operator that opts into it and collectively accumulates the priority fees from blocks proposed by those node operators into one large pool. During a Rocket Pool rewards checkpoint (the same ones used to distribute RPL rewards), the total ETH balance of the pool is distributed fairly to the pool stakers and the node operators that opted into it.
In essence, the Smoothing Pool is a way to effectively eliminate the randomness associated with being selected for block proposals. If you've ever had a streak of bad luck and gone months without a proposal, or if your block proposals only have low priority fees, you may find the Smoothing Pool quite exciting.
To make the math easy to understand, community member Ken Smith has put together a massive analysis comparing the profitability of the Smoothing Pool and the Fee Distributor, which is summarized nicely with this chart:

In short, as long as the Smoothing Pool has more minipools than you do, it's more likely that you'll come out ahead by joining it. You can view how many nodes and minipools are opted in using community member Peteris's excellent Rocketscan website.


The Rules

The Smoothing Pool uses the following rules:
During a Rocket Pool rewards checkpoint when the Smoothing Pool's balance is distributed, the contract's total ETH balance is split in two.rETH stakers receive half, minus the average commission of all opted-in node operators.The remainder goes to the node operators that opted in.Opting into the Smoothing Pool is done on a node level. If you opt in, all of your minipools are opted in.Anyone can opt in at any time. They must wait a full rewards interval (3 days on Prater, 28 days on Mainnet) before opting out to prevent gaming the system.Once opted out, they must wait another full interval to opt back in.The Smoothing Pool calculates the "share" of each minipool (portion of the pool's ETH for the interval) owned by each node opted in.The share is a function of your minipool's performance during the interval (calculated by looking at how many attestations you sent on the Beacon Chain, and how many you missed), and your minipool's commission rate.Your node's total share is the sum of your minipool shares.Your node's total share is scaled by the amount of time you were opted in.If you were opted in for the full interval, you receive your full share.If you were opted in for 30% of an interval, you receive 30% of your full share.
If you are interested in the complete technical details of Smoothing Pool rewards calculation, please review the full specification here.


Joining and Leaving the Smoothing Pool

To opt into the Smoothing Pool, run the following command:
rocketpool node join-smoothing-pool
This will record you as opted-in in the Rocket Pool contracts and automatically change your Validator Client's fee recipient from your node's distributor contract to the Smoothing Pool contract.
To leave the pool, run this command:
rocketpool node leave-smoothing-pool
This will record you as opted-out in the Rocket Pool contracts, and once a small delay has passed, will automatically change your Validator Client's fee recipient from the Smoothing Pool contract back to your node's Fee Distributor contract.


Claiming Rewards from the Smoothing Pool

Rewards from the Smoothing Pool are bundled together with RPL at the end of each rewards interval using the Redstone rewards system. Claiming them is as simple as running:
rocketpool node claim-rewards
If opted into the Smoothing Pool, you will notice that the amount of ETH you receive for each interval is more than zero:
Welcome to the new rewards system!
You no longer need to claim rewards at each interval - you can simply let them accumulate and claim them whenever you want.
Here you can see which intervals you haven't claimed yet, and how many rewards you earned during each one.

Rewards for Interval 0 (2022-08-04 01:35:39 -0400 EDT to 2022-09-01 01:35:39 -0400 EDT):
	Staking:        50.820133 RPL
	Smoothing Pool: 0.000000 ETH

Rewards for Interval 1 (2022-09-01 01:35:39 -0400 EDT to 2022-09-29 01:35:39 -0400 EDT):
	Staking:        40.668885 RPL
	Smoothing Pool: 0.096200 ETH

Total Pending Rewards:
	91.489018 RPL
	0.096200 ETH

Which intervals would you like to claim? Use a comma separated list (such as '1,2,3') or leave it blank to claim all intervals at once.
Note that the Smoothing Pool rewards in Interval 1 here indicate that the node was opted in during that interval and received rewards accordingly.
We'll cover more about claiming RPL and Smoothing Pool rewards later in the guide, in the Claiming Rewards section.


Next Steps

Once you've decided on whether or not you want to join the Smoothing Pool, take a look at the next section on MEV and MEV rewards.


MEV, MEV-Boost, and MEV Rewards

In the previous section, you learned about how node operators earn priority fees. Priority fees are a great boost to a node operator's income, but they aren't the only form of liquid reward available to you on the Execution layer. There is a supplemental form of rewards available, known as MEV rewards.
NOTEAs a quick reminder here's a breakdown of the different types of rewards and which layer they're provided on:Consensus Layer (locked until withdrawals): attestations, block proposals, sync committees, slashing reportsExecution Layer (liquid): priority fees and MEV from block proposals


What is MEV

When your validator creates a block, it usually does so with a very simple algorithm: keep track of a list of pending transactions, bundle as many as them into the block you're building as possible (prioritizing so the ones with the highest tips come first), and submit that block to the chain.
However, Ethereum network users have discovered an interesting side-effect of being able to see the publicly available pool of pending transactions (known as the mempool). Having this knowledge allows them to employ clever and sophisticated algorithms to modify the ordering of those transactions, and in some cases, introduce new transactions between them. These two techniques combined can be used to extract additional ETH from a block proposal.
This extra ETH is known as Maximal Extractable Value, or MEV for short.
In general, there are two "flavors" of MEV:
MEV that comes from "benign" sources, such as being the first to arbitrage between exchanges after a large buy or sellMEV that comes at the cost of the Ethereum users, by front-running their transactions and profiting from the user's resulting slippage (see Sandwich Attacks for more information on this technique)


Block Builders and Relays

Finding MEV opportunities is not an easy thing; state-of-the-art opportunity finders, known as searchers, require immensely powerful computers and employ complex AI algorithms to quickly identify and extract MEV. Searchers then take these opportunities and provide them to block builders - entities that aggregate these bundles of opportunities together to form a complete Ethereum block (which can be the searchers themselves or other parties).
The hardware and software requirements for running a profitable searcher prevent most node operators from using them (or at least using them competitively), and thus prevent them from finding their own MEV opportunities to capitalize on. Luckily, simply finding MEV opportunities is only half of the equation.
Every Epoch (6.4 minutes, or 32 slots), the Beacon Chain randomly selects a validator from the entire list of active validators to propose a block that will fit in one of the slots for in that Epoch. This list can be seen for the next upcoming Epoch, which means everyone can see which validators are assigned to each slot a few minutes in advance.
Some clever entities have leveraged this advance knowledge to essentially construct a kind of "marketplace" of sorts. In this marketplace, validators can register themselves when they have upcoming block proposals and block builders can submit bids for blocks they'd like the validators to propose. These bids always give the priority fees from each transaction in the block to the proposer, and they also offer a supplemental tip to the proposer that comes from the MEV the builder was able to extract for themselves.
The validators can then examine these bids, determine which one ultimately provides the most profit, and propose that block instead of building their own.
This "marketplace" where block builders interact with validators is known as a relay. Different relays have different rules (such as which of the aforementioned "flavors" of MEV they permit from block builders, and whether or not they comply with certain government sanction regulations), but ultimately they all serve this same marketplace function.
Rocket Pool currently offers its node operators access to multiple different relays:
NameRegulationMEV TypesFlashbotsComplies with OFAC Sanctions*All typesbloXroute Max ProfitUnregulatedAll typesbloXroute EthicalUnregulated"Benign" (no front-running or sandwiching)bloXroute RegulatedComplies with OFAC Sanctions*All typesBlocknativeComplies with OFAC Sanctions*All typesEden NetworkComplies with OFAC Sanctions*All typesUltra SoundUnregulatedAll typesAESTUSUnregulatedAll types
NOTE*Relays that comply with OFAC sanctions follow the blacklist of addresses that the United States Office of Foreign Assets Control (OFAC) maintains. We strongly encourage you to read more about the OFAC sanctions, network censorship, and make a carefully-informed decision about whether or not you believe you should comply with those sanctions and which relays you are comfortable using.More information can be found in articles such as these:https://home.treasury.gov/news/press-releases/jy0916https://www.coindesk.com/tech/2022/08/23/as-censorship-on-ethereum-begins-could-this-open-sourced-code-help-counter-it/https://blog.bitmex.com/ofac-sanctions-ethereum-pos-some-technical-nuances/https://www.paradigm.xyz/2022/09/base-layer-neutrality
If you're interested in exploring the relative market share and average tips per block from each of the relays, take a look at https://www.mevboost.org/. This site captures many metrics about the various MEV relays so you can better understand the popularity and returns of the relays.


MEV-Boost

There are many relays out there, and having your node automatically register and maintain contact with each of them can be a burdensome task. Luckily, the engineers at Flashbots produced and maintain a program explicitly designed to handle this relay management known as MEV-Boost.
MEV-Boost is a simple program: you tell it which relays you want to use and tell your Consensus client how to reach it, and it takes care of all of the registration, bidding, blind signing, and proposal management in conjunction with your Consensus client. It lets you passively participate in this builder-proposer-marketplace, and thus earn extra rewards with zero effort on your part.
MEV-Boost is open source and has been audited.
Below is a good visual depiction of how the entire MEV ecosystem functions, and where MEV-Boost fits in:

Image courtesy of Flashbots
The Rocket Pool Smartnode comes with MEV-Boost directly bundled in by default, enabling our Docker Mode and Hybrid Mode node operators to seamlessly take advantage of it. Native Mode users will need to set it up manually.


Rocket Pool and MEV

Because Rocket Pool validators are partially funded by the rETH stakers, the protocol requires that MEV rewards (as well as priority fees) be shared with the rETH stakers (minus the node operator's commission, of course). Node operators are not permitted to pocket the entire MEV reward for themselves when proposing with a Rocket Pool validator.
To that end, MEV-Boost is a critical component of the Rocket Pool network for several reasons:
It provides easy access to the network of MEV relaysIt ensures that the node operator isn't building their own blocks; this is important to ensure that a node operator isn't running their own searcher and stealing MEV without sharing it with the rETH stakersIt increases the overall returns for the rETH stakers, which keeps the protocol competitive with other, more centralized staking providers
The second point here is important: Rocket Pool as a protocol will ultimately rely on a Trusted Block Builder (or more accurately, a Trusted Relay) design to ensure that rETH stakers always receive their fair share of MEV rewards and priority fees.
Each of the relays listed above currently act in this role.
We are taking a three-phase approach towards tranistioning to the Trusted Block Builder design:


Phase 1: Opt-In!

In phase 1, MEV-Boost is provided to all node operators as an opt-in configuration. Node operators are encouraged to use it because it improves rETH's returns and thus keeps the protocol competitive, but are not required to use it. Node operators can elect to use one or more of the trusted relays listed above but cannot use a custom (untrusted) relay.
This phase ended in November 2022.


Phase 2: Opt-Out

In phase 2, MEV-Boost is enabled by default for all node operators. Node operators can elect to use one or more of the trusted relays listed above but cannot use a custom (untrusted) relay. Node operators that choose to opt-out of MEV-boost must do so explicitly before starting the Smartnode.
This is the current phase.


Phase 3: Required

In phase 3, MEV-Boost is no longer optional; it will be required for all node operators. Node operators must elect to use one or more of the trusted relays listed above but cannot use a custom (untrusted) relay.
There is currently no scheduled date for this phase.


Configuring MEV-Boost in the Smartnode

To learn how to configure MEV-Boost, please select which mode you are using below.
Docker ModeHybrid ModeNative ModeConfiguring MEV-Boost is easy with the Smartnode's configuration TUI. Start by running rocketpool service config and navigate to the MEV-Boost option:Check the box labeled Enable MEV-Boost to enable it.Once enabled, The screen will look like this (as of Smartnode v1.7.0):Below is a description of each option and how to use them.The MEV-Boost Mode box lets you toggle between a MEV-Boost instance that Rocket Pool manages, and an external one that you manage on your own. This is meant for advanced users that already have MEV-Boost set up and simply want to use it instead of having Rocket Pool run a second copy. Regular Docker Mode users should just leave this set to Locally Managed.The Selection Mode box lets you switch between Profile Mode and Relay Mode.Profile Mode is the default. It lets you select which relays to enable based on their "profiles". A relay's profile is made of the following choices: Whether it's regulated (complies with government sanctions lists such as the OFAC list and blacklists certain addresses) or unregulated (does not censor any transactions based on any blacklists)Whether it allows all types of MEV or explicitly prohibits bundles that involve sandwich attacks or front-running Ethereum usersYou can select multiple profiles.Each profile you select has a set of relays that adhere to it which are listed in the description box; enabling that profile will enable all of those relays.Advanced users can change this to Relay Mode, which lets them explicitly select which relays they would like to use.The Port box is not important for Docker mode users.The Expose API Port box is not important for Docker mode users.The Container Tag box is useful to manually upgrade the version of MEV-Boost that the Smartnode runs if Flashbots releases a new high-priority version you want to use before a Smartnode update with it is released.The Additional Flags box is used if you want to add supplemental config flags or parameters directly to the MEV-Boost container. Normally, it will not be useful.Once you've enabled MEV-Boost and enabled the relays you'd like, simply save and exit. The Smartnode will restart the relevant containers for you, and automatically set it all up for you.See below for instructions on how to check that it's working as expected. :::::


Checking MEV-Boost's Logs

To check on MEV-Boost's logs, run the following command (for Docker Mode users and Hybrid users with a locally-managed container):
rocketpool service logs mev-boost
The output will show you which relays you've enabled, their connection status, and begin listening for traffic from your Beacon Node:
mev-boost_1      | time="2022-09-28T22:02:06Z" level=info msg="mev-boost v1.3.1" module=cli
mev-boost_1      | time="2022-09-28T22:02:06Z" level=info msg="Using genesis fork version: 0x00000000" module=cli
mev-boost_1      | time="2022-09-28T22:02:06Z" level=info msg="using 4 relays" module=cli relays="[{0xac6e77dfe25ecd6110b8e780608cce0dab71fdd5ebea22a16c0205200f2f8e2e3ad3b71d3499c54ad14d6c21b41a37ae https://0xac6e77dfe25ecd6110b8e780608cce0da[email protected]boost-relay.flashbots.net?id=rocketpool} {0xb0b07cd0abef743db4260b0ed50619cf6ad4d82064cb4fbec9d3ec530f7c5e6793d9f286c4e082c0244ffb9f2658fe88 https://0xb0b07cd0abef743db4260b0ed50619cf6[email protected]bloxroute.regulated.blxrbdn.com?id=rocketpool} {0x9000009807ed12c1f08bf4e81c6da3ba8e3fc3d953898ce0102433094e5f22f21102ec057841fcb81978ed1ea0fa8246 https://0x9000009807ed12c1f08bf4e81c6da3ba8[email protected]builder-relay-mainnet.blocknative.com?id=rocketpool} {0xb3ee7afcf27f1f1259ac1787876318c6584ee353097a50ed84f51a1f21a323b3736f271a895c7ce918c038e4265918be https://0xb3ee7afcf27f1f1259ac1787876318c65[email protected]relay.edennetwork.io?id=rocketpool}]"
mev-boost_1      | time="2022-09-28T22:02:06Z" level=info msg="Checking relay" module=service relay="https://0xac6e77dfe25ecd6110b8e780608cce0da[email protected]boost-relay.flashbots.net?id=rocketpool"
mev-boost_1      | time="2022-09-28T22:02:06Z" level=info msg="Checking relay" module=service relay="https://0xb0b07cd0abef743db4260b0ed50619cf6[email protected]bloxroute.regulated.blxrbdn.com?id=rocketpool"
mev-boost_1      | time="2022-09-28T22:02:07Z" level=info msg="Checking relay" module=service relay="https://0x9000009807ed12c1f08bf4e81c6da3ba8[email protected]builder-relay-mainnet.blocknative.com?id=rocketpool"
mev-boost_1      | time="2022-09-28T22:02:07Z" level=info msg="Checking relay" module=service relay="https://0xb3ee7afcf27f1f1259ac1787876318c65[email protected]relay.edennetwork.io?id=rocketpool"
mev-boost_1      | time="2022-09-28T22:02:07Z" level=info msg="listening on 0.0.0.0:18550" module=cli
This indicates that it's running properly.
If you have validators already up and running, you will see messages like this every few minutes in the logs:
mev-boost_1      | time="2022-09-28T21:40:48Z" level=info msg="http: GET /eth/v1/builder/status 200" duration=0.147305645 method=GET module=service path=/eth/v1/builder/status status=200
mev-boost_1      | time="2022-09-28T21:40:48Z" level=info msg="http: POST /eth/v1/builder/validators 200" duration=0.052895118 method=POST module=service path=/eth/v1/builder/validators status=200
This indicates that your Beacon node was able to properly connect to it and register its validators, indicating that your node is now actively engaging with the MEV relays and is ready to receive blocks from block builders!


Next Steps

Now that MEV-Boost has been set up, you're ready to create a new minipool and start validating on the Ethereum network! Read the next section to walk through this process.


Overview

This section covers the processes of creating and migrating minipools (Rocket Pool validators). This is where you'll learn how to start validating the Ethereum network and earn rewards for it.


Prerequisites

Before running minipools, please make sure you:
Have set up a node machine (or virtual machine) and secured it (via the Securing your Node guide)Have the Smartnode installed and configured on itHave a node wallet loaded on your SmartnodeSynced your Execution and Consensus clientsProvisioned your node with a withdrawal address, set up your fallback clients (optional), opted into the Smoothing Pool (optional), and configured MEV


Guides

Creating a New Minipool (Validator) explains the process of creating a new Rocket Pool minipool and corresponding validator on the Beacon Chain. Whether you're making your very first minipool or already have some and would like to make another one, this guide will walk you through it step-by-step.
The Minipool Delegate explains a bit about what the minipool contract is, and introduces the delegate contract that contains most of its functionality. It also demonstrates how to update the delegate for your minipools after a network upgrade to take advantage of new features.
Converting a Solo Validator into a Minipool walks through the process of converting an existing validator outside of Rocket Pool (such as one you use for solo staking) directly into a Rocket Pool minipool without needing to exit the Beacon Chain and create a new minipool. If you're a solo staker that wants to take advantage of this capability, this is the guide for you!
Migrating a 16-ETH Minipool to 8-ETH shows how to reduce the bonded amount of ETH for a minipool from 16 ETH down to 8 ETH, giving you 8 ETH in credit that can be used to create a new minipool for free (though it still costs ETH for gas, of course).
The Deposit Credit System covers the "ETH Credit" system that lets you create new minipools without having to pay for their ETH bonds after you perform one of the above migrations.


Creating a New Minipool (Validator)

As a reminder, a minipool in Rocket Pool terms refers to a unique smart contract instance on the Execution Layer (ETH1) chain that your node manages. The minipool handles a portion of your ETH, known as the bond amount, and a portion of ETH from the rETH staking pool, known as the borrowed amount. It merges them together to form 32 ETH in total, which is then sent to the Beacon Chain deposit contract to create a new validator. Thus, in order to create a validator using Rocket Pool, you need to create a minipool.


Choosing a Bond Size

NOTE8-ETH bonded minipools are a feature of the Atlas upgrade, which was launched on April 17th 2023.
Before creating a minipool, the first step is to choose the amount of ETH you want to bond. With the Atlas update, Rocket Pool allows bond amounts of either 8 ETH or 16 ETH. This bond represents your literal stake in the game as a validator; if your node is penalized for poor performance or slashed for violating the rules of the protocol, the penalty is taken from your bond.
In addition to your ETH bond, creating a validator also requires supplemental collateral in the form of the RPL token. The amount of RPL you need to stake depends on your bond size; the minimum is 10% of your borrowed amount of ETH, and the maximum is 150% of your bonded amount of ETH.
If choosing 8 ETH, you stake 8 of your own ETH and "borrow" 24 ETH from the staking pool to complete the validator. The minimum RPL stake is 2.4 ETH worth of RPL (10% of 24), and the maximum is 12 ETH worth of RPL (150% of 8).
If choosing 16 ETH you stake 16 of your own ETH and borrow 16 ETH from the staking pool to complete the validator. The minimum RPL stake is 1.6 ETH worth of RPL (10% of 16), and the maximum is 24 ETH worth of RPL (150% of 16).


Rewards

From a profitability perspective (looking purely at ETH rewards and ignoring RPL), two 8-ETH bonded minipools with a 14% commission provide more rewards to the node operator than even 16-ETH bonded minipools at 20% commission (which, as of Redstone, is the highest possible reward configuration). At the same time, they also provide more rewards to the rETH holders as well due to the fact that the node operators are more efficiently putting the capital of the rETH holders to work.
Let's walk through a simple example to illustrate. Say we are a node operator with 16 ETH available to stake (plus the required RPL bond). Say we've earned 1 ETH of rewards on the Beacon Chain per validator. Here's how the math works out for a single 16-ETH minipool with a 20% commission, versus two 8-ETH minipools at 14% commission:
1x 16 ETH Minipool @ 20%:
Rewards: 1 ETH
Node Share = (16/32) + (16/32 * 0.2)
           = 0.5 + (0.5 * 0.2)
           = 0.5 + 0.1
           = 0.6 ETH

rETH Share = 1 - 0.6
           = 0.4 ETH

2x 8 ETH Minipools @ 14%:
Rewards: 2 ETH
Node Share = ((8/32) + (24/32 * 0.14)) * 2
           = (0.25 + (0.75 * 0.14)) * 2
           = (0.25 + 0.105) * 2
           = 0.71 ETH

rETH Share = 2 - 0.71
           = 1.29 ETH
In other words, a node operator will earn 18% more ETH via two 8-ETH minipools than they would with a single 16-ETH minipool at 20% commission.


Staking RPL

Before you can create a minipool, you'll first need to stake your RPL collateral. The minimum and maximum amounts are described above relative to ETH and depending on your desired bond size. The exact amount of RPL will change based on the ETH/RPL price ratio, which is snapshotted on-chain at regular intervals by the Oracle DAO.
There is no maximum to the amount you can stake, though you will only receive rewards for the first 150% of your bonded ETH at each checkpoint - anything above that will go unrewarded.
NOTERPL stake isn't handled on a per-minipool basis. When you stake RPL, you do it for your entire node. This means you'll only need to handle the total RPL stake for your node if you plan to run multiple minipools.


Staking via the Website

The easiest and safest way to stake RPL for your node is to use the protocol's Stake-on-Behalf feature, which was reintroduced with the Atlas upgrade. This way, you can stake RPL for your node while the RPL is still in the wallet you used to acquire it. In other words, you don't need to send RPL to your node's hot wallet in order to stake it.


Whitelisting an address to stake on behalf

You first must whitelist an address to have permission to stake on behalf of your node. This only needs to be performed once per address you wish to stake from. You can do this via the following Smartnode command:
bashrocketpool node add-address-to-stake-rpl-whitelist address-or-ens
Where address-or-ens is the address or and ENS name that resolves to your desired address. You will be asked to confirm the whitelist addition and after the transaction is confirmed, you can then navigate to the relevant page below.


Staking RPL on behalf of

Select which network you're using from the tabs below to be taken to it:
MainnetPrater Testnethttps://stake.rocketpool.net/stake-behalf
Start by connecting your wallet to the website using MetaMask, WalletConnect, or any of the other methods the website supports. You will then be presented with this dialog:

This is a two-step process. First, enter the amount of RPL you want to stake and click Approve - this will approve the staking contract to access that much RPL in your wallet, but no more than that amount.
TIPYou can approve more than the amount you intend to stake if you trust the Rocket Pool staking contract, and don't want to perform this extra Approve transaction each time you want to stake more RPL.
Once the RPL is approved, you will see this dialog:

Enter the amount of RPL you want to stake in the Stake RPL box, and enter your node's address in the on behalf of Node Address box. Make sure you have the correct node address before doing this! If you need to confirm your node's address, you can quickly retrieve it via the CLI using the rocketpool node status command.
When you've entered that information, press the Stake button and approve the transaction. It will be sent to the Ethereum network, and once included in a block, you're all set!
If you run rocketpool node status, you should see your staked RPL appear under the === RPL Stake === section.


Removing an address from the stake whitelist

If you ever want to remove an address from your stake-on-behalf whitelist, you may do so with the following Smartnode command:
bashrocketpool node remove-address-from-stake-rpl-whitelist address-or-ens
Where address-or-ens is the address or and ENS name resolving to the address you want to remove from the whitelist.


Staking via the Node CLI

If you cannot (or do not want to) use the website to stake your RPL, you can also stake it via the node's CLI directly.
First, transfer your RPL from the wallet you acquired it with to your node's address.
WARNINGPlease do this carefully and ensure you are sending the RPL to your node's address - transfers on Ethereum cannot be undone!Sending RPL to the wrong address will result in the loss of your RPL.Use the rocketpool node status command to verify your node's address if you aren't sure what it is.
Run the following command:
rocketpool node stake-rpl
Here is the output:
Please choose an amount of RPL to stake:
1: The minimum minipool stake amount for an 8-ETH minipool (100.794306 RPL)?
2: The maximum minipool stake amount for an 8-ETH minipool (503.971527 RPL)?
3: The minimum minipool stake amount for a 16-ETH minipool (67.196204 RPL)?
4: The maximum minipool stake amount for a 16-ETH minipool (1007.943054 RPL)?
5: Your entire RPL balance (1440.000000 RPL)?
6: A custom amount
Select how much you'd like to stake, then confirm the operation.
The first time you run this command, it will involve two transactions - one to approve the Rocket Pool staking contract to access your RPL, and one to stake your RPL with it. Subsequent runs will only require the stake transaction, since the token has already been approved.
Once both transactions finish, you can check your staked RPL amount with rocketpool node status. The following portion of the output is what you want to verify:
The node has a total stake of 300.000000 RPL and an effective stake of 300.000000 RPL.
This is currently 29.76% of its borrowed ETH and 89.29% of its bonded ETH.
It must keep at least 100.794305 RPL staked to claim RPL rewards (10% of borrowed ETH).
It can earn rewards on up to 503.971526 RPL (150% of bonded ETH).

The node has enough RPL staked to make 1 more 8-ETH minipools (or 2 more 16-ETH minipools).
This will show you how many minipools you can make of each bond size based on your RPL collateral.


(Optional) Finding a Custom Vanity Address for your Minipool

By default, when you create a new minipool, Rocket Pool will generate a random unique address for it. However, the Smartnode provides the ability to search for a custom vanity address for the minipool.
A vanity address is one where you personally pick the characters that the address starts with. This is a purely cosmetic exercise and will not have any practical impact on your minipool's operation. As Ethereum addresses are in hexadecimal, any of the following characters are legal:
0 1 2 3 4 5 6 7 8 9 a b c d e f
As a few examples, you could make your minipool's address start with a bunch of zeros (0x000000...), 0x600d (hex for "good") or 0xa77e57ed (hex for "attested", a fitting prefix for a minipool).
To find such a vanity address, you will need to search for it. This searching process involves picking a number, applying it as a "salt" to the hashing algorithm, and comparing the results against what you're looking for. The results are effectively random (though any given salt always produces the same result), so the only way to find an address with the prefix you want is to try lots and lots of them until you find a salt that works.
If you would like a custom vanity address to use for your minipool when you create it, you can use the following command to search for one:
rocketpool minipool find-vanity-address
This will prompt you for the prefix you want to search for, and ask which type of deposit you will be doing (a 16 ETH or a 32 ETH deposit - see below for more info on these types). Once you enter that information, it will begin trying lots and lots of salts until it finds one that produces your desired prefix!
Here is a complete example of the process:
$ rocketpool minipool find-vanity-address

Please specify the address prefix you would like to search for (must start with 0x):
0xa77e57

Running with 12 threads.
Found on thread 3: salt 0x5cd7fb = 0xA77E57c892C9e98B0B81289e4AfdA62fb59c5DDD
Finished in 1.91145873s
In this case, we searched for 0xa77e57 as the prefix and found the salt 0x5cd7fb which could generate it. In the next step, when we create a minipool, we can specify this salt as an optional argument to create the new minipool at the address associated with the salt (0xA77E57c892C9e98B0B81289e4AfdA62fb59c5DDD as shown above).
In general, each additional character you search for will multiply the search time by about 16. Because of this, we recommend you only look for prefixes of 7 or 8 characters max unless you have a very powerful machine with many CPU cores. Otherwise, it might take prohibitively long to find a salt that produces the prefix you want.
For example, an AMD 5600x with 6 cores (12 threads) at 4.8 GHz can search about 3.2 million salts per second. On average, it will take a few seconds to find a 6-character prefix, a few minutes to find a 7-character prefix, and a few hours to find an 8-character prefix.
NOTEThe salt that gets generated is specific to the following variables:The network you're using (either the Prater Testnet or Mainnet)The node addressThe bond amountThe saltIf you change any of those variables, the minipool address for a given salt will change as well.
For more advanced usage (such as searching for a different node address or changing how many CPU cores are used for searching), take a look at the help text with rocketpool minipool find-vanity-address --help.


Depositing ETH and Creating a Minipool

TIPIf the market value of rETH is higher than its ETH backing (i.e., rETH is at a premium on the market), there is an opportunity to arbitrage the difference when creating a minipool. The value of the arbitrage is equal to the amount of protocol ETH in the minipool times the premium (minus a small amount of gas). E.g., if making a minipool when there's a 2.5% premium: 16 ETH * .025 = 0.4 ETH. In other words, you could receive 0.4 ETH back during these conditions just for creating a minipool!If you're interested in taking advantage of this opportunity, consider using the community-developed rocketarb tool to capture the profit of the MEV rETH arbitrage opportunity that launching your minipool creates.To learn more about rocketarb, feel free to inquire about it on the RP discord server.
After everything you've done so far, you are finally ready to deposit your ETH, create a new minipool, and create an ETH2 validator. This is done with the following command:
rocketpool node deposit
NOTEIf you want to use a salt for a vanity address that you found using the process above, run the following command instead:rocketpool node deposit --salt <your salt, e.g. 0x1234abcd>
You will first see a note that depositing a new minipool will automatically distribute any balance in your node's fee distributor contract (used to capture MEV rewards if you're not opted into the Smoothing Pool):
Your eth2 client is on the correct network.

NOTE: by creating a new minipool, your node will automatically claim and distribute any balance you have in your fee distributor contract. If you don't want to claim your balance at this time, you should not create a new minipool.
Would you like to continue? [y/n]
If you already have minipools and a balance in your fee distributor, you may decide not to create another minipool if distributing this balance causes a taxable event in your jurisdiction.
Assuming you want to continue, the next question will ask what you want your bond size to be:
Please choose an amount of ETH to deposit:
1: 8 ETH
2: 16 ETH
After that you'll be notified of your commission rate for the new minipool, and a note on whether or not your node's credit balance can be used to cover the cost of the minipool bond for you:
Your minipool will use the current fixed commission rate of 14.00%.
You currently have 8.00 ETH in your credit balance.
This deposit will use 8.000000 ETH from your credit balance and will not require any ETH from your node.
You will next be prompted with the network's current gas costs recommendations; confirm your gas price selection and follow the rest of the prompts.
Your consensus client is synced, you may safely create a minipool.
+============== Suggested Gas Prices ==============+
| Avg Wait Time |  Max Fee  |    Total Gas Cost    |
| 15 Seconds    | 15 gwei   | 0.0244 to 0.0366 ETH |
| 1 Minute      | 10 gwei   | 0.0157 to 0.0235 ETH |
| 3 Minutes     | 7 gwei    | 0.0100 to 0.0150 ETH |
| >10 Minutes   | 6 gwei    | 0.0080 to 0.0120 ETH |
+==================================================+

These prices include a maximum priority fee of 2.00 gwei.
Please enter your max fee (including the priority fee) or leave blank for the default of 10 gwei:

Using a max fee of 10.00 gwei and a priority fee of 2.00 gwei.
You are about to deposit 8.000000 ETH to create a minipool with a minimum possible commission rate of 14.000000%.
ARE YOU SURE YOU WANT TO DO THIS? Exiting this minipool and retrieving your capital cannot be done until:
- Your minipool has been *active* on the Beacon Chain for 256 epochs (approx. 27 hours)
- The Shapella upgrade of the Ethereum network has been deployed
- The Atlas upgrade of the Rocket Pool protocol has been deployed
- Your minipool has been upgraded to use the Atlas delegate
 [y/n]
y

Creating minipool...
Transaction has been submitted with hash <transaction hash>.
You may follow its progress by visiting:
<link to transaction>

Waiting for the transaction to be included in a block... you may wait here for it, or press CTRL+C to exit and return to the terminal.

The node deposit of 8.000000 ETH was made successfully!
Your new minipool's address is: <new minipool address>
The validator pubkey is: <new validator public key>

Your minipool is now in Initialized status.
Once the remaining ETH has been assigned to your minipool from the staking pool, it will move to Prelaunch status.
After that, it will move to Staking status once 1h0m0s have passed.
You can watch its progress using `rocketpool service logs node`.
Note that creating a minipool is an expensive transaction! Pay close attention to the total cost and ensure that you accept it.
If you accept, your minipool creation will be triggered. Once the transaction completes, you will be given the address of your new minipool contract on the eth1 chain and its corresponding validator public key on the Beacon Chain. You can visit these with any block explorers if you'd like.


Confirming a Successful Stake

Upon creation, your minipool will be put into the initialized state. It will remain here until it's your turn in the Rocket Pool queue to be given 16 ETH from the staking pool so you can stake your new validator on the Beacon Chain.
Once this happens, your minipool will move into the prelaunch state for a certain period of time (currently 12 hours). Your 16 ETH deposit will be transferred to be Beacon Chain, and the Oracle DAO will verify that it is all correct. During this time, you can observe the validator by looking up its validator pubkey with a Beacon Chain explorer such as https://beaconcha.in (or https://prater.beaconcha.in for the Prater Testnet).
You can check on the new minipool's status with the rocketpool minipool status command. For example, when it has moved into prelaunch, you will likely see something like this:
1 Prelaunch minipool(s):

--------------------

Address:              <your minipool address>
Penalties:             0
Status updated:        2023-03-31, 04:51 +0000 UTC
Node fee:              14.000000%
Node deposit:          8.000000 ETH
RP ETH assigned:       2023-03-31, 04:51 +0000 UTC
RP deposit:            24.000000 ETH
Minipool Balance (EL): 31.000000 ETH
Your portion:          7.000000 ETH
Available refund:      0.000000 ETH
Total EL rewards:      7.000000 ETH
Validator pubkey:      <your validator public key>
Validator index:       0
Validator seen:        no
Use latest delegate:   no
Delegate address:      <your delegate address>
Rollback delegate:     <none>
Effective delegate:    <your delegate address>

0 finalized minipool(s):
After this prelaunch period, your minipool will enter staking status and send the additional 16 ETH from the staking pool to the deposit contract. This will be done by the rocketpool_node Docker container (or the rp-node service if you used the Native setup) - if, for some reason, you are taking abnormally long to enter staking status, looking at the logs for this container / service will likely tell you what's wrong. You can check these logs with the rocketpool service logs node command (or /srv/rocketpool/node_log.sh on Native mode setups).
Running rocketpool minipool status will then show something like this:
$ rocketpool minipool status

1 Staking minipool(s):

--------------------

Address:              <your validator address>
Penalties:             0
RP ETH assigned:       2023-03-31, 05:53 +0000 UTC
Node fee:              14.000000%
Node deposit:          8.000000 ETH
RP ETH assigned:       2023-03-31, 04:51 +0000 UTC
RP deposit:            24.000000 ETH
Minipool Balance (EL): 0.000000 ETH
Your portion:          0.000000 ETH
Available refund:      0.000000 ETH
Total EL rewards:      0.000000 ETH
Validator pubkey:     <your validator public key>
Validator index:      <your validator index number>
Validator active:     yes
Validator balance:    32.018460 ETH
Expected rewards:     16.010614 ETH
Use latest delegate:  no
Delegate address:     <your delegate address>
Rollback delegate:    <none>
Effective delegate:   <your delegate address>

0 finalized minipool(s):
Once the Beacon Chain accepts both of the deposits (one from you and one from the staking pool), your validator will enter the Beacon Chain queue where it will wait for its turn to become activated and start staking.
At this point, you're done! Congratulations! You have officially created a validator with Rocket Pool!
Have a look at the next sections in Monitoring and Maintenance to learn how to watch your validator's performance and health over time.


Creating Multiple Minipools

Conveniently, your Rocket Pool node is capable of hosting as many minipools as you want. You do not need to create a new node for each minipool.
If you would like to make a second (or third, or fourth...) minipool for your node, all you need to do is run rocketpool node deposit again. Note that you may need to stake more RPL first to maintain an overall collateral level of at least 10% of your borrowed ETH before you do this. Also, you won't be able to reuse an old vanity address salt - you'll need to search for another unique one for each of your minipools.


Next Steps

Now that you have a minipool up and running, the next steps will walk you through how to monitor the health of your node, check for and apply updates, and maintain it throughout its life.
Please read through the Monitoring and Maintenance section next to learn more about these topics.


The Minipool Delegate

Every validator you run has a minipool contract as its "owner" so-to-speak. The minipool is a unique contract specifically assigned to that validator; it acts as its withdrawal address. All reward and staking balance withdrawals from the Beacon Chain will be sent to the minipool contract.
Each minipool is unique to ensure that you (the node operator) have ultimate control over it. Nobody else controls it, nobody else can change it; it's entirely at your command.
That being said, in order to minimize gas costs during node deposits, the minipool itself contains very little actual functionality. Almost everything it can do is deferred to a delegate contract.
The minipool delegate contract is a special contract that contains the bulk of the logic required by minipools - things like fairly distributing the balance between you and the pool stakers, for example. Unlike minipools, where each minipool is a unique contract, the delegate is a single contract that many minipools can "forward" requests to.
Occasionally, the Rocket Pool development team will publish a new minipool delegate that adds new functionality. For example, in the Atlas update, we introduced a new delegate that had support for distributing skimmed rewards without needing to close the minipool.
Minipool can have their delegates upgraded to take advantage of this new functionality. Delegate upgrades are opt-in, so you can decide if and when you want to use them. That being said, they are usually required in order to take advantage of new functionality that network upgrades introduce.


Upgrading your Delegate

To upgrade a minipool to a new delegate contract, simply run the following command:
rocketpool minipool delegate-upgrade
This will present you with a list of your minipools that are not currently using the latest delegate and are eligible for upgrading:
Please select a minipool to upgrade:
1: All available minipools
2: 0x7e5702a2cE66B5B35E59B9Ac00eEAAa547881e40 (using delegate 0x5c2D33A015D132D4f590f00df807Bb1052531ab9)
3: 0x7E5703fdA638CD86c316B9EbAF76927fF695ADC5 (using delegate 0x5c2D33A015D132D4f590f00df807Bb1052531ab9)
4: 0x7E5704aD2a63eb90880426Dcd4a3811246dF3cB0 (using delegate 0x5c2D33A015D132D4f590f00df807Bb1052531ab9)
5: 0x7E5705c149D11efc951fFc20349D7A96bc6b819C (using delegate 0x5c2D33A015D132D4f590f00df807Bb1052531ab9)
6: 0x7E570625cE8F586c90ACa7fe8792EeAA79751778 (using delegate 0x5c2D33A015D132D4f590f00df807Bb1052531ab9)
7: 0x7E5700c82E38434C6c72890bb82f5B5305f4328a (using delegate 0x6aCEA7f89574Dd8BC6ffDfDca1965A3d756d5B20)
Select the one(s) you would like to upgrade from the list by entering the corresponding number on the left of the minipool address. Once selected, you will be prompted to confirm your gas price settings, and after that a transaction to upgrade the minipool will be sent:
Using a max fee of 26.00 gwei and a priority fee of 2.00 gwei.
Are you sure you want to upgrade 1 minipools? [y/n]
y

Upgrading minipool 0x7e5702a2cE66B5B35E59B9Ac00eEAAa547881e40...
Transaction has been submitted with hash 0xcd91c9a38f3438c3d8a45bb5f439014e5935dcb50b0704f3c5077f54174e99bb.
Waiting for the transaction to be included in a block... you may wait here for it, or press CTRL+C to exit and return to the terminal.

Successfully upgraded minipool 0x7e5702a2cE66B5B35E59B9Ac00eEAAa547881e40.
You can verify that it's using the latest delegate with rocketpool minipool status. Any minipools that are not using the latest delegate will have a yellow notification under their status letting you know that they can be upgraded:
Address:              0x7E5703fdA638CD86c316B9EbAF76927fF695ADC5
Penalties:            0
...
Delegate address:      0x5c2D33A015D132D4f590f00df807Bb1052531ab9
Rollback delegate:     <none>
Effective delegate:    0x5c2D33A015D132D4f590f00df807Bb1052531ab9
*Minipool can be upgraded to delegate 0x149aE025fFC7E7bbcCc8d373d56797D637bF5D33!


Converting a Solo Validator into a Minipool

When the Beacon Chain was first launched, validators were created with a special pair of cryptographic keys - the validator key and the withdrawal key.
The validator key is a "hot key", which means it needs to be stored on an active machine connected to the Internet; this is the key used to sign your attestations and proposals, and also serves as your "address" on the Beacon Chain (the hex string used to identify your validator).
The withdrawal key, on the other hand, is a "cold key" which means it does not (and in fact, should not) be stored on an active machine connected to the Internet. It is intended to be locked away in cold storage so it cannot be accessed until it is needed. Unlike the validator key, the withdrawal key isn't responsible for validation duties at all. Instead, its only job is to manage the withdrawing of your validator's funds on the Beacon Chain (once withdrawals had been implemented).
This dual-key system was the initial architecture the Beacon Chain launched with. At the time, neither the Merge nor withdrawals had been designed yet but this system was considered robust enough to handle whatever form the protocol took when both of them were implemented.
Fast forward to today, and now we have a much better understanding of how withdrawals work. Luckily, they have been implemented in a way that makes it possible for an existing solo staking validator on the Beacon Chain (that is using the old withdrawal key credentials) to convert directly into a Rocket Pool minipool without needing to exit the validator from the Beacon Chain!
If you are interested in learning more about this process, then this guide is for you. We'll cover how withdrawals work on Ethereum at a high-level, explain how the conversion process works, and end with a detailed walkthrough of how to convert your validator into a minipool.


Why Would I Convert?

Before getting into the technical details, a very important question to answer is why a solo staker would consider this process in the first place. Conversion into a minipool is not for everyone, but this section will help you make an informed choice about whether or not it's something you'd like to pursue.
Rocket Pool minipools enjoy several advantages over conventional solo staking validators:
They earn commission on the portion of ETH they borrow from the pool stakers (currently either 16 or 24 ETH).Your existing 32 ETH bond could be used to create up to three additional validators (on top of the one you already have).They are eligible for participation in the Smoothing Pool which pools all Execution layer rewards (e.g., from block proposals and MEV rewards) and fairly distributes them among participants during each rewards interval.They earn RPL inflation rewards (which currently provide a higher APR than ETH staking rewards).
That being said, there are some differences that are important to highlight:
Staking with Rocket Pool requires you to buy and stake the RPL token as collateral.You will have to accept smart contract risk, as the protocol is implemented as a series of smart contracts.Similarly, conventional node operation leverages the Smartnode stack; you will have to accept any risks associated with installing and running that software on your node.Being a node operator does involve learning some new concepts, so there is a learning curve associated with becoming one.Minipools are required to split their rewards with the pool stakers, so the validator's withdrawal address will be a smart contract on the Execution layer, not an EOA that you control. This also applies to your fee recipient for Execution layer rewards, which must also be a smart contract that can fairly split your rewards.Rocket Pool's Oracle DAO is responsible for shuttling information from the Beacon Chain to the Execution layer, and for detecting violations that the protocol cannot enforce (such as an illegal fee recipient address). Running a minipool means you will have to trust the Oracle DAO to do that job correctly.
We encourage you to carefully go through these pros and cons before deciding to convert your solo validator. If you would like to continue with the process, please read the next sections.


Prerequisites

In order to begin the conversion process, you will need to meet the following criteria:
If none of these conditions are blockers for you, then you are eligible to begin validator conversion.


Process Overview

The first step is to create a new "vacant" minipool. Unlike conventional minipools, which make a new validator during their creation, vacant minipools are special minipools designed to manage existing validators. As a consequence, vacant minipools behave slightly differently than conventional minipools during the prelaunch stage. Once initialization is finished and they enter the staking stage, they become conventional minipools.
During vacant minipool creation, you will be given the option of having the Smartnode automatically change your validator's withdrawal credentials from the old BLS withdrawal key to the new vacant minipool address. If you don't want to do this right now, you can have the Smartnode do it later with a dedicated command, or you can do it yourself with a third-party tool. Note that changing the validator's withdrawal credentials to the minipool address is required for conversion, so regardless of how you do this, it will need to be done for the process to complete succesfully.
Once the withdrawal credentials have been changed, you will have the option of importing the validator's private key into the Validator Client managed by the Smartnode. If you want the Smartnode to maintain the validator so you don't have to manage your own, this is an attractive option. If you prefer to maintain your own Validator Client and keep the keys there, you are welcome to do so.
At this point your new minipool will enter the scrub check period, where the Oracle DAO will continuously analyze your validator's information on the Beacon Chain to confirm that it remains legal. This includes:
The withdrawal credentials either haven't been migrated yet (are still the original 0x00 BLS key credentials) or have been migrated to the minipool's address. Migrating them to any other Execution layer address will cause the pool to be scrubbed. If the withdrawal credentials are still the original 0x00 BLS key credentials by the time the scrub check period ends, the pool will be scrubbed.The validator is in the actively staking state for the duration of the check. If it transitions to the slashed, exited, or withdrawn states, the pool will be scrubbed.
NOTEA scrubbed vacant minipool means that it is not a part of the Rocket Pool network, but it will still give you (the node operator) access to all of your funds via the typical token retrieval methods in the CLI. Funds are not lost if vacant minipools are scrubbed. More information on scrubbed minipools, their ramifications, and how to use them is included later in this guide.
After the scrub check passes, you will be able to promote your vacant minipool. This will finish the conversion and change it from a vacant minipool into a regular one. At this point the minipool will act like every other minipool on the network, and your solo validator will officially be converted into a Rocket Pool validator!
As part of the process, the network will snapshot your total rewards on the Beacon chain (and within your new minipool, if you get skimmed during the scrub check). It will recognize that all of those rewards belong to you and shouldn't be shared with the staking pool, so it will provide them all as a refund you can claim at any time once promotion is complete.
Below is a detailed walkthrough of the conversion process, including instructions for each step.


Step 1: Creating a Vacant Minipool

To begin the conversion process, run the following command with the Smartnode CLI:
rocketpool node create-vacant-minipool <validator pubkey>
For example, if you wanted to convert a solo validator with pubkey 0xb82ccba6093747559361a5495c7e2c607e76ea3543d556319355ce80289bb819fd787f715f60615cdd358c0476b40661, you would run:
rocketpool node create-vacant-minipool 0xb82ccba6093747559361a5495c7e2c607e76ea3543d556319355ce80289bb819fd787f715f60615cdd358c0476b40661
You will see a brief summary about what to expect during the process, then be prompted for which bond amount you'd like to use when creating this minipool:
Please choose an amount of ETH you want to use as your deposit for the new minipool (this will become your share of the balance, and the remainder will become the pool stakers' share):

1. 8 ETH
2. 16 ETH
If you select 8 ETH, you will convert your validator into an 8-ETH bonded minipool. Your original 32 ETH deposit will be converted into an 8 ETH deposit, with 24 ETH borrowed from the pool stakers. Once the conversion process is complete, you will have a credit balance of 24 ETH which you can use to create more minipools. Choosing this option will require your node to have a minimum of 2.4 ETH worth of RPL staked.
If you select 16 ETH, you will convert your validator into a 16-ETH bonded minipool. Your original 32 ETH deposit will be converted into an 16 ETH deposit, with 16 ETH borrowed from the pool stakers. Once the conversion process is complete, you will have a credit balance of 16 ETH which you can use to create more minipools. Choosing this option will require your node to have a minimum of 1.6 ETH worth of RPL staked.
Once you select an option, the Smartnode will run a few checks to confirm that the validator you entered and your node both pass all of the prerequisite requirements listed above. After that, it will ask you to confirm your gas price and then submit the transaction to create the new vacant minipool. Upon creation, you will be presented with the minipool's address:
Your minipool was made successfully!
Your new minipool's address is: 0x8F3F149e4416a94e0ee909dE32f8A11C2F3e211C
This is the address you will use when changing your validator's withdrawal credentials.
At this point, the Smartnode will ask if you would like to have the Smartnode do this automatically (along with importing the validator's private key into the Validator Client managed by the Smartnode, which is discussed later):
You have the option of importing your validator's private key into the Smartnode's Validator Client instead of running your own Validator Client separately. In doing so, the Smartnode will also automatically migrate your validator's withdrawal credentials from your BLS private key to the minipool you just created.

Would you like to import your key and automatically migrate your withdrawal credentials? [y/n]
If you answer y to this question, the Smartnode will do Steps 2 and 3 automatically; please see the Automatic Withdrawal Credential Change and Key Import section below.
If you answer n to this question, the command will end and you will have finished Step 1. Please go to the Step 2 section next.
NOTEIf you decline this process now, you can resume it at a later time using the CLI. Read the Step 2 and Step 3 sections below to learn how to do this.


Automatic Withdrawal Credential Change and Key Import

WARNINGIf you choose to have the Smartnode automatically change your withdrawal credentials and import your validator's private key, it is essential that you remove the validator key from your old Validator Client that you manage on your own, and shut down the old Validator Client to ensure it does not have the key loaded into memory still.You must also wait at least 15 minutes after doing so to ensure that it has intentionally missed at least two attestations. You can verify this by looking at a chain explorer such as https://beaconcha.in.If you do not wait for at least 15 minutes, your validator WILL BE SLASHED when the Smartnode's Validator Client begins attesting with your validator's key!We strongly recommend you enable doppelganger detection in the Smartnode configuration as well, to be as safe as possible against the risk of slashing.
If you choose to automatically import the validator key and change the withdrawal credentials to the minipool address, the Smartnode will first ask for the mnemonic used to generate both your validator's BLS private key and its corresponding original withdrawal key:
Please enter the number of words in your mnemonic phrase (24 by default):
24

Enter Word Number 1 of your mnemonic:
...

Enter Word Number 24 of your mnemonic:
Upon entering it, the Smartnode will derive your old BLS-based withdrawal key using the mnemonic and the validator's pubkey. It will then submit a message to the Beacon Chain, signed by your withdrawal key, indicating that you want to change the withdrawal credentials from the old BLS withdrawal key to the new minipool address:
Changing withdrawal credentials to the minipool address... done!
Finally, it will import your validator's key into the Smartnode's Validator Client and ask if you'd like to restart it, so it begins validating with that key:
Importing validator key... done!
Would you like to restart the Smartnode's Validator Client now so it loads your validator's key? [y/n]
y
Restarting Validator Client... done!
With that, steps 2 and 3 have been completed. You can verify that the withdrawal credentials have been properly changed and that the key is actively validating by using a chain explorer such as https://beaconcha.in
Go to the Step 4 section to learn about the scrub check.


Step 2: Changing the Validator's Withdrawal Credentials

When you've created the new vacant minipool, the next step is to change your validator's withdrawal credentials from the old 0x00 BLS-key credentials to the new 0x01 credentials that contain the new minipool address.
There are two ways to do this:
In this guide, we'll walk through how to use method 1 (the Smartnode). For more information on method 2, please consult the documentation for the tool you'd like to use.
Start by running the following command:
rocketpool minipool set-withdrawal-creds <minipool address>
For example, if the new vacant minipool address was 0x8F3F149e4416a94e0ee909dE32f8A11C2F3e211C, you would run this:
rocketpool minipool set-withdrawal-creds 0x8F3F149e4416a94e0ee909dE32f8A11C2F3e211C
The Smartnode will then ask for the mnemonic used to generate both your validator's key and its corresponding withdrawal key:
Please enter the number of words in your mnemonic phrase (24 by default):
24

Enter Word Number 1 of your mnemonic:
...

Enter Word Number 24 of your mnemonic:
After this, it will perform some safety checks to ensure your validator's withdrawal credentials can be changed. If it's successful, it will then submit a message to the Beacon Chain, signed by your withdrawal key, indicating that you want to change the withdrawal credentials from the old BLS withdrawal key to the new minipool address:
Changing withdrawal credentials to the minipool address... done!
That's it! You can verify that the withdrawal credentials have been properly changed by using a chain explorer such as https://beaconcha.in.


(Optional) Step 3: Import the Validator Key

Once you convert your validator into a minipool, you may want to have the Smartnode's Validator Client run it instead of the one you currently manage on your own. This has a few advantages:
It is "cleaner" from an organizational standpoint (the Smartnode manages your minipools, your externally-managed Validator Client manages your solo staking validators).It allows commands like rocketpool minipool exit (commands that require your validator key for signing messages) to work.
However, there are some very important considerations to understand before doing this:
You must ensure that your validator's key has been removed from your own Validator Client, and that you have waited for at least 15 minutes after removing it before importing it into the Smartnode. See the warning box below.You must ensure that you have your validator keystore and its password file backed up, because commands like rocketpool wallet recover and rocketpool wallet rebuild cannot regenerate them without a backup since they weren't derived from the Smartnode wallet's mnemonic.
If you would like to import your validator key into the Smartnode, continue reading below.
WARNINGIf you choose to have the Smartnode import your validator's private key, it is essential that you remove the validator key from your old Validator Client that you manage on your own, and shut down the old Validator Client to ensure it does not have the key loaded into memory still.You must also wait at least 15 minutes after doing so to ensure that it has intentionally missed at least two attestations. You can verify this by looking at a chain explorer such as https://beaconcha.in.If you do not wait for at least 15 minutes, your validator WILL BE SLASHED when the Smartnode's Validator Client begins attesting with your validator's key!We strongly recommend you enable doppelganger detection in the Smartnode configuration as well, to be as safe as possible against the risk of slashing.
Start by running the following command:
rocketpool minipool import-key <minipool address>
For example, if the new vacant minipool address was 0x8F3F149e4416a94e0ee909dE32f8A11C2F3e211C, you would run this:
rocketpool minipool import-key 0x8F3F149e4416a94e0ee909dE32f8A11C2F3e211C
The Smartnode will then ask for the mnemonic used to generate your validator's key:
Please enter the number of words in your mnemonic phrase (24 by default):
24

Enter Word Number 1 of your mnemonic:
...

Enter Word Number 24 of your mnemonic:
After this, it will cycle through the different keys generated from that mnemonic until it finds your validator's public key. It will then import it, and ask if you'd like to restart the Smartnode's Validator Client so it loads your key:
Importing validator key... done!
Would you like to restart the Smartnode's Validator Client now so it loads your validator's key? [y/n]
y
Restarting Validator Client... done!
With that, your validator key is now imported into the Smartnode and you should see it begin attesting. You can confirm by following the Validator Client's logs with this command:
rocketpool service logs validator
You can also verify that a chain explorer such as https://beaconcha.in can see your Validator Client attesting with your validator's key.


Step 4: Assign the Correct Fee Recipient

Once you've started the migration process, it is imperative that you ensure your fee recipient is set properly (either to your node's fee distributor or to the Smoothing Pool if you have opted into it). If you do not do this and leave it on the fee recipient for your solo validators, you will be penalized and a portion of your Beacon Chain stake will be deducted to compensate for the loss.
NOTEThis step is only required if you leave your validator key in your own externally-managed Validator Client.If you remove it from your own VC and import it into the VC managed by Rocket Pool, your fee recipient will be assigned to the correct address automatically by the node process.
As you may retain other solo-staking keys in your VC that you do not want to set to the fee distributor or Smoothing Pool, the only way to accomplish this is to use a VC configuration file to manually set the fee recipient for the validator being migrated.
This process depends on which Consensus Client you use; consult the documentation for the specifics but here are some helpful links:
Lighthouse: via validator_definitions.yml
Lodestar does not currently support setting validator-specific fee recipients. Please do not use Lodestar if you are keeping the key in your externally-managed VC with other solo keys that are not being migrated.
Nimbus: via the keymanager API
Prysm: via proposer-settings-file
Teku: via validators-proposer-config


Step 5: Waiting for the Scrub Check

By this time, you should have completed steps 1 and 2 (creating the vacant minipool and changing your validator's withdrawal credentials) and optionally step 3 (importing the key into the Smartnode). The next step is to wait for the scrub check to complete. This is a process carried out by the Oracle DAO to verify the following:
For example, if your validator had a Beacon Chain balance of 35 ETH when you performed step 1, the combined Beacon Chain and minipool balances must be at least 34.99 ETH throughout the entire duration of the scrub check.
You are given a grace period of approximately 2 and a half days to perform the withdrawal credentials change (85% of the scrub period's 3-day duration).
The scrub check is transient; you don't have to do anything during this time other than keep your validator online and performing well.
To monitor how much time is left in the scrub check, you can look at the node logs with the following command:
rocketpool service logs node
The relevant lines will look like this:
rocketpool_node  | 2023/03/06 04:51:32 Checking for minipools to promote...
rocketpool_node  | 2023/03/06 04:51:32 Minipool 0x8F3F149e4416a94e0ee909dE32f8A11C2F3e211C has 44m0s left until it can be promoted.
It will last for 3 days, after which you have passed and can proceed to Step 5 to promote the vacant minipool into a full one.


Working with Scrubbed Minipools

If your minipool unfortunately fails the scrub check and is dissolved, don't worry - your capital isn't lost. Dissolved vacant minipools essentially act as simplified withdrawal addresses:
They are not technically part of the Rocket Pool network.Any capital deposited into the minipool belongs solely to the node operator. It does not get split with the pool stakers.You are not awarded a deposit credit for creating the minipool.
You can access the minipool's balance at any time with the following command:
rocketpool minipool distribute-balance
This will send the minipool's entire balance to your node's withdrawal address.
When you've exited your validator from the Beacon Chain and its full balance has been sent to the minipool, you can retrieve it and close the minipool with the following command:
rocketpool minipool close
Once again, this will send the minipool's full balance to your node's withdrawal address.


Step 6: Promoting the Minipool

When the scrub check has been passed successfully, you can promote the vacant minipool to a full minipool. This can be done two ways:
The first method will promote the minipool for you automatically, assuming you have the node process / container running and the network's gas cost is below the automated transaction threshold you specified in the Smartnode configuration process (default of 150). In the node logs, you will see output like the following:
rocketpool_node  | 2023/03/06 05:37:00 Checking for minipools to promote...
rocketpool_node  | 2023/03/06 05:37:00 1 minipool(s) are ready for promotion...
rocketpool_node  | 2023/03/06 05:37:00 Promoting minipool 0x8F3F149e4416a94e0ee909dE32f8A11C2F3e211C...
rocketpool_node  | 2023/03/06 05:37:01 This transaction will use a max fee of 34.736742 Gwei, for a total of up to 0.009597 - 0.014396 ETH.
rocketpool_node  | 2023/03/06 05:37:01 Transaction has been submitted with hash 0x93c2662def6097da28e01b9145259736575ffc43b539b002b27e547065e66d7e.
rocketpool_node  | 2023/03/06 05:37:01 Waiting for the transaction to be validated...
rocketpool_node  | 2023/03/06 05:37:13 Successfully promoted minipool 0x8F3F149e4416a94e0ee909dE32f8A11C2F3e211C.
If your node process is disabled, you can use the second method via the following command:
rocketpool minipool promote
From here, simply select your vacant minipool from the list of minipools eligible for promotion and submit the transaction.


Claiming your Original Pre-Conversion Rewards

Upon promotion, your minipool will enter the staking status and has officially become a regular Rocket Pool minipool. You can review the details with this command:
rocketpool minipool status
This will show you the status of your new minipool, its balances, its refund, and so on. For example:
Address:              0x8F3F149e4416a94e0ee909dE32f8A11C2F3e211C
Penalties:            0
Status updated:       2023-03-06, 05:37 +0000 UTC
Node fee:             14.000000%
Node deposit:         8.000000 ETH
RP ETH assigned:       2023-03-06, 05:37 +0000 UTC
RP deposit:            24.000000 ETH
Minipool Balance (EL): 0.090012 ETH
Your portion:          0.001779 ETH
Available refund:      0.085000 ETH
Total EL rewards:      0.086779 ETH
...
Here you can see the following important information:
Node deposit shows how much ETH you personally bonded as part of this minipool (in this case, 8 ETH).RP deposit shows how much ETH you borrowed from the pool stakers to create the minipool (in this case, 24 ETH).Available refund shows how much of the minipool's balance goes directly to you (is not shared with the pool stakers. This amounts to your all of your rewards on the Beacon Chain at the time you created the vacant minipool.Minipool Balance (EL) shows the total balance of the minipool contract.Your portion (EL) shows how much of the balance belongs to you after subtracting the refund from the minipool's balance. In other words, this is your share of the rewards you've earned after you created the vacant minipool.Total EL rewards is your refund plus your post-conversion rewards.
To claim your refund, run the following command:
rocketpool minipool refund
Simply select your minipool from the list, approve the transaction, and your refund will be sent to your node's withdrawal address.


Using your Node Credit

Now that you have an active promoted minipool, you will notice your node has a credit balance when you run rocketpool node status:
Your Smartnode is currently using the Zhejiang Test Network.

=== Account and Balances ===
The node 0x9BA1401Eb7D779eC51f910B066e9C4351cD28911 has a balance of 355.785269 ETH and 16679.835547 RPL.
The node has 24.000000 ETH in its credit balance, which can be used to make new minipools.
In this example, since we converted the original 32 ETH validator bond into an 8-ETH minipool, we have received 24 ETH in credit. This credit can be used to create new minipools and validators for free!
Simply run the rocketpool node deposit command, and select which bond amount you would like to use. If there's enough ETH in your credit balance to cover the bond, it will be used automaticaly and you won't have to stake any additonal ETH (though you still have to pay for gas.
NOTEThe ETH used for your credit balance comes from the staking pool. If the staking pool doesn't have enough ETH to cover your credit balance, you won't be able to use it until more ETH has been deposited.


Migrating a 16-ETH Minipool to 8-ETH

Node operators have the ability to directly migrate their existing 16-ETH minipools into 8-ETH minipools. Doing so will add 8 ETH to their deposit credit balances which can be used to create additional minipools without requiring any ETH from the node operators.
In effect, this process allows a node operator to convert one 16-ETH minipool into two 8-ETH minipools for free (though it will still require ETH for gas and require enough RPL collateral to handle both minipools).
Migrating an existing 16-ETH minipool to an 8-ETH one is formally known as bond reduction. It is a two-step process and involves validation by the Oracle DAO. We'll walk you through the whole process in the sections below.


Bond Reduction Rules

A bond reduction involves the following steps:
To perform a successful bond reduction without being scrubbed, the minipool must follow these rules:
The minipool must obey these conditions for the entire duration of the scrub check, during which time the Oracle DAO will be watching it to ensure compliance with the conditions above.
If, at any time during the scrub check, a minipool is found to be in violation of these conditions, the bond reduction will be scrubbed. The minipool itself will not be affected; it will still happily live on as a 16 ETH minipool, validating and acting as though the whole bond-reduction process never happened. However, it will no longer be eligible for bond reductions. Once a minipool's bond reduction is scrubbed, it can never be attempted again.
NOTEUpon a successful bond reduction, the minipool's bond amount will be reduced from 16 ETH to 8 ETH and the minipool's commission will be reset to whatever the current network value is.If you reduce a 16-ETH minipool with a 20% commission, you will not keep that 20% commission. It will be reduced to the network value (currently set to a flat 14%).Note that as demonstrated by the example math section, an 8-ETH minipool at 14% is still more profitable than a 16-ETH minipool at 20% so holding onto a high commission rate is not a compelling reason to retain a 16 ETH bond.


Step 1: Beginning Bond Reduction

To begin the bond reduction process, enter the following command:
rocketpool minipool begin-bond-reduction
This will start by providing a brief blurb on the process (though, if you have read through this guide, it should all be familiar to you already). Once you acknowledge that you understand the process, it will show you which minipools currently have a bond that can be reduced, along with their current bond and commission:
Please select a minipool to begin the ETH bond reduction for:
1: All available minipools
2: 0x7E5703fdA638CD86c316B9EbAF76927fF695ADC5 (Current bond: 16 ETH, commission: 15.00%)
3: 0x7E5704aD2a63eb90880426Dcd4a3811246dF3cB0 (Current bond: 16 ETH, commission: 15.00%)
4: 0x7E5705c149D11efc951fFc20349D7A96bc6b819C (Current bond: 16 ETH, commission: 15.00%)
5: 0x7E570625cE8F586c90ACa7fe8792EeAA79751778 (Current bond: 16 ETH, commission: 15.00%)
Once you've selected one or more minipools to reduce, the Smartnode will check if those minipools are eligible for bond reduction.
To be eligible, these conditions must be satisfied:
The minipool has been upgraded to use the Atlas minipool delegate contract.The minipool's validator must have a Beacon Chain balance of at least 32 ETH.The minipool's validator must be pending or active.You have enough RPL staked to support the minimum RPL collateral level that would be required after the bond reduction.
If not, it will print a warning error explaining what needs to be done first; for example:
Please select a minipool to begin the ETH bond reduction for:
1: All available minipools
2: 0x7E5703fdA638CD86c316B9EbAF76927fF695ADC5 (Current bond: 16 ETH, commission: 15.00%)
3: 0x7E5704aD2a63eb90880426Dcd4a3811246dF3cB0 (Current bond: 16 ETH, commission: 15.00%)
4: 0x7E5705c149D11efc951fFc20349D7A96bc6b819C (Current bond: 16 ETH, commission: 15.00%)
5: 0x7E570625cE8F586c90ACa7fe8792EeAA79751778 (Current bond: 16 ETH, commission: 15.00%)
2

Cannot reduce bond for minipool 0x7E5703fdA638CD86c316B9EbAF76927fF695ADC5:
The minipool version is too low. It must be upgraded first using `rocketpool minipool delegate-upgrade`.
You do not have enough RPL staked to support this bond reduction; it would bring you below the minimum RPL staking requirement. You will have to stake more RPL first.
This shows that the selected minipool requires a delegate upgrade and the node needs more RPL staked in order to reduce that minipool's bond.
When you have satisfied the preconditions, selecting a minipool in this command will simply prompt you to choose your gas price for the transaction and confirmation of the action. Upon accepting the confirmation, the minipool's bond reduction will begin.


Monitoring the Scrub Check Timer

Once you've started a bond reduction, you can view how long until it's able to be completed in your node daemon logs:
Docker and Hybrid ModeNative ModeFor Docker Mode and Hybrid Mode users, this can be done with the following command:rocketpool service logs node
You will see a new entry noting how much time is left until the scrub check for your bond reduction is complete:
rocketpool_node  | 2023/02/25 09:04:21 Checking for minipool bonds to reduce...
rocketpool_node  | 2023/02/25 09:04:21 Minipool 0x7E5703fdA638CD86c316B9EbAF76927fF695ADC5 has 12m0s left until it can have its bond reduced.
Once this timer reaches zero and no longer appears in these logs, you can complete the bond reduction.


Step 2: Completing Bond Reduction

When the scrub timer has successfully ended, there are two ways to complete your minipool's bond reduction:
During the bond reduction, Rocket Pool distributes your minipool's existing balance using the minipool's pre-bond-reduction bond and commission to ensure both you and the rETH stakers get your fair share of the existing balance, and the bond reduction doesn't change the rewards either party would have gotten on that balance.


The Results of a Reduced Bond

You can verify the successful bond reduction using rocketpool minipool status.
Before the bond reduction, for the example minipool we've been following, that command would produce the following output:
Address:              0x7E5703fdA638CD86c316B9EbAF76927fF695ADC5
...
Node fee:             15.000000%
Node deposit:         16.000000 ETH
RP ETH assigned:       2023-02-08, 06:13 +0000 UTC
RP deposit:            16.000000 ETH
Minipool Balance (EL): 0.150713 ETH
Your portion:          0.086660 ETH
Available refund:      0.000000 ETH
Total EL rewards:      0.086660 ETH
...
Beacon balance (CL):   32.000152 ETH
Your portion:          16.000087 ETH
...
After the bond reduction, the command would return this output:
Address:              0x7E5703fdA638CD86c316B9EbAF76927fF695ADC5
...
Node fee:             14.000000%
Node deposit:         8.000000 ETH
RP ETH assigned:       2023-02-08, 06:13 +0000 UTC
RP deposit:            24.000000 ETH
Minipool Balance (EL): 0.086769 ETH
Your portion:          0.000000 ETH
Available refund:      0.086769 ETH
Total EL rewards:      0.086769 ETH
...
Beacon balance (CL):   32.000037 ETH
Your portion:          8.000013 ETH
...
Note how things have changed:
Node fee (commission) went from 15% to 14%Node deposit (your bond) went from 16 ETH to 8 ETHRP deposit (the amount you borrowed) went from 16 ETH to 24 ETHMinipool Balance (EL) went from 0.150713 ETH to 0.086769 ETHYour portion (EL) went from 0.086660 ETH to 0 ETHAvailable refund went from 0 ETH to 0.086769 ETHYour portion (CL) went from 16.000087 ETH to 8.000013 ETH
The changes to Node fee, Node deposit, RP deposit, and Your portion (CL) indicate that the bond was successfully reduced.
The changes to Minipool Balance (EL), Your portion (EL), and Available refund indicate the results of the minipool balance distribution that occured as part of the bond reduction process. To clarify how to interpret these results:
If you look at the transaction, you will also see that it sent 0.06413383 ETH from the minipool to the staking pool.In the "before" example, the staking pool's share is the minipool's balance minus the node operator's portion, or 0.150713 - 0.086660 = 0.064053 which is the amount transferred to the staking pool during the bond reduction (plus a small amount from a rewards skim that occurred during the scrub check).The node operator's share, on the other hand, doesn't get sent to the node operator's withdrawal address. It is instead bookmarked as an available refund, which is why the refund amount increased from 0 ETH to what was previously the "your portion" amount of the minipool's balance on the EL. You can claim this refund at any time using the following command:rocketpool minipool refund
There is one more important result of the bond reduction, which can be observed using rocketpool node status:
Your Smartnode is currently using the Zhejiang Test Network.

=== Account and Balances ===
The node 0x9BA1401Eb7D779eC51f910B066e9C4351cD28911 has a balance of 347.796908 ETH and 16799.835547 RPL.
The node has 8.000000 ETH in its credit balance, which can be used to make new minipools.
...
The bond reduction process has increased the node's deposit credit balance by 8 ETH. This credit can be used to make another 8-ETH minipool for free (no ETH required from the node wallet, except for gas)!


The Deposit Credit System

The deposit credit system is a mechanism to track ETH that was previously bonded by node operators but is no longer required and make it available for use again. The source of this credit comes from two places:
Migrating an existing 16-ETH bonded minipool down to an 8-ETH bonded minipool (which adds 8 ETH to the node operator's credit balance)Migrating an existing solo validator into a minipool (which adds either 16 or 24 ETH to the node operator's credit balance, depending on which type of minipool they create during migration)
Every node operator begins with a credit balance of 0 ETH. Either of these two actions will increase that balance accordingly.
This ETH is not made liquid and returned to the node operator; instead, it can be used to create additional minipools without requiring any ETH from the node operator.
The credit system is transparent to the node operator; it will automatically be used (with notifications in the Smartnode CLI explaining that it will be used) during either rocketpool node deposit or rocketpool node create-vacant-minipool operations if possible. If it cannot be used, the Smartnode will alert the user that it cannot be used and will require a normal ETH bond during either operation.
See the Credit Availability section below for more details.


An Example

Say you have a credit balance of 0 ETH, and a single minipool with a 16-ETH bond. You can then migrate that minipool to an 8-ETH bond. This will result in 8 ETH that is no longer bonded. That 8 ETH will be placed into your credit balance.
Now, say you want to create a second 8-ETH minipool. You run rocketpool node deposit as usual, and select 8-ETH as the bond amount. This normally requires you to provide 8 of your own ETH for the minipool. However, because you have a credit balance of 8 ETH, Rocket Pool will automatically use that instead:
Please choose an amount of ETH to deposit:
1: 8 ETH
2: 16 ETH
1

Your minipool will use the current fixed commission rate of 14.00%.
You currently have 8.00 ETH in your credit balance.
This deposit will use 8.000000 ETH from your credit balance and will not require any ETH from your node.

Your consensus client is synced, you may safely create a minipool.
The second set of lines here is the relevant one: they tell you that you have enough ETH in your credit balance to cover this deposit and that it is available for use, so it will use the balance automatically and won't require any supplemental ETH from your node wallet.
See the availability section below for details on credit balance availability.


Viewing your Current Credit Balance

To view your current credit balance, simply run the following command:
rocketpool node status
This produces a comprehensive list of details about your node, including its credit balance right at the top:
Your Smartnode is currently using the Zhejiang Test Network.

=== Account and Balances ===
The node 0x9BA1401Eb7D779eC51f910B066e9C4351cD28911 has a balance of 347.796908 ETH and 16799.835547 RPL.
The node has 8.000000 ETH in its credit balance, which can be used to make new minipools.
...


Credit Availability

In some situations, your node might have a credit balance available but cannot currently use it to deploy additional minipools.
The ETH for your credit balance is taken from the deposit pool. Thus, if you want to use 8 ETH in credit to create a new 8-ETH minipool, it will end up taking all 32 ETH for that minipool from the deposit pool and require none from you. Because of this, if the deposit pool does not have enough ETH in it to cover the pre-deposit value (currently set to 1 ETH), the balance will not be available.
In this situation, the Smartnode will alert you during a rocketpool node deposit operation that it cannot use your credit balance, and must instead use ETH from your node wallet to complete the bond. Doing so will not consume your credit balance; it will be left as-is and available for use later once the deposit pool has enough balance to cover it.


Overview

In this section, you'll learn about how to monitor the health of your node and your validators, track your earnings, and perform periodic maintenance such as updates.


Prerequisites

Before configuring your Smartnode, please make sure you:
Have set up a node machine (or virtual machine) and secured it (via the Securing your Node guide)Have the Smartnode installed and configured on itHave a node wallet loaded on your SmartnodeSynced your Execution and Consensus clientsProvisioned your node with a withdrawal address, set up your fallback clients (optional), opted into the Smoothing Pool (optional), and configured MEVCreated at least one minipool


Guides

Monitoring your Node's Performance provides some tools and tutorials for keeping tabs on your node's health (from a resource perspective, such as CPU and RAM consumption) and your validators' performance on the Beacon Chain. It covers a lot of fundamental tools you'll use during your tenure as an Ethereum validator.
Setting up the Grafana Dashboard walks through setting up the Smartnode stack's metrics tracker and the Grafana dashboard - a one stop shop for monitoring everything about your node and validators, and a staple in each node operator's arsenal. We strongly recommend exploring the Grafana dashboard and regularly checking in on it.
Checking for Updates covers the crucial processes of regularly updating your node with new security patches, how to update the Smartnode after a new release, and how to manually update client versions if your clients of choice release a new version that the Smartnode's latest release doesn't include yet. You should familiarize yourself with this entire section, as you may need to refer to it whenever an update is released.
Backing Up Your Node is an optional guide that describes how to back up your node's configuration and its chain data in case of a hardware failure.
Pruning the Execution Client is important for anyone running an Execution client that gradually consumes all of your SSD's disk space and requires periodic pruning (such as Geth or Nethermind) to reclaim some of that space. If you are running one of those clients, you should definitely familiarize yourself with the pruning process.
Changing Execution or Consensus Clients is a useful guide; it goes through the process of changing your client choice(s) and what can be expected during the process. This is another good guide to familiarize yourself with, just in case you ever have to switch clients for any reason down the line.


Monitoring your Node's Performance

Now that your node is up and running and you have one or more minipools attached, you'll need to keep an eye on everything to make sure it's running smoothly.
You can track your machine either:
It is recommended to use a combination of both depending on your needs.


Directly Tracking your Machine's Status

With respect to your machine's status, there are a few useful metrics you'll probably want to keep an eye on:
CPU UsageFree RAM remainingSwap space usage (if you enabled it)Remaining free disk spaceNetwork I/O (if your ISP imposes a data cap)
NOTEThe sections below show you some ways to monitor things, but they require you to be logged into the terminal of your machine. There is a better, much more convenient and much nicer-looking method that uses a Grafana web dashboard but it is still under development. Stay tuned for the completion of that section!


CPU, RAM, and Swap

The first three can be easily viewed with the htop program. This will give you a nice live view into your system resources, as shown by this screenshot from a Raspberry Pi:
htop

On the top display with the bars, the numbered bars each refer to a CPU core's current usage.
Mem shows you how much RAM you're currently using (in this screenshot, 1.75 GB) and how much you have total (3.70 GB).
Swp shows you how much swap space you're using (85.8 MB) and how much you have total (12.0 GB).
On the bottom table, each row represents a process. Your Execution (ETH1) and Consensus (ETH2) clients will likely be on top (in this case, Geth and Nimbus) which you can see in the rightmost column labeled Command.
The RES column shows you how much RAM each process is taking - in this screenshot, Geth is taking 748 MB and Nimbus is taking 383 MB.
The CPU% column shows you how much CPU power each process is consuming. 100% represents a single core, so if it's over 100%, that means it's using a lot from multiple cores (like Geth is here, with 213%).