As a reminder, a minipool
in Rocket Pool terms refers to a unique smart contract instance on the Execution Layer 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.
Minipool creation is governed by two queues.
The first is the Rocket Pool deposit queue, which is managed by the Rocket Pool protocol & determines when your minipool will receive it's borrowed ETH. There needs to be ETH available in the deposit pool to match your 8 ETH with 24 ETH in the deposit pool & create the minipool.
The second is the Beacon Chain queue, which is managed by the Ethereum Beacon Chain & determines when your validator will become active.
Please be aware that the time it takes for your minipool to become active can vary greatly depending on your position in each queue & the current state of the network.
The Beacon Chain validator queue activation (and exit) times can vary greatly depending on the current state of the network.
This is outside Rocket Pool's control and is a function of the Beacon Chain itself.
The following tool provides a good estimate of how long you can expect to wait: https://www.validatorqueue.com/
Please review this tool to get an idea of how long you can expect to wait for your validator to become active.
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.
In order to stake on behalf of your node an address must be whitelisted. Your withdrawal address is always whitelisted, and you may skip this step if your RPL is held by your withdrawal address. You only need to whitelist an address once in order to stake from it. You can do this via the following Smartnode command:
Where address-or-ens
is the address or 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.
Select which network you're using from the tabs below to be taken to it:
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 to look up your node address.
Enter your node address & click "Lookup".
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.
This will check that the address is a registered node & that the node has whitelisted the connected wallet. Withdrawal addresses are whitelisted by default, however if you wish to allow other addresses you will need to whitelist them via the following command on your node.
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.
You 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 be able to stake on behalf of a node.
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.
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.
If you ever want to remove an address from your stake-on-behalf whitelist, you may do so with the following Smartnode command:
Where address-or-ens
is the address or and ENS name resolving to the address you want to remove from the whitelist.
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.
Please 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:
Here is the output:
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:
This will show you how many minipools you can make of each bond size based on your RPL collateral.
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:
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:
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:
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.
The salt that gets generated is specific to the following variables:
If 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
.
If 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.16 ETH * .025 = 0.4 ETH
.
In other words, you could receive 0.4 ETH back during these conditions just for 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:
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 a Beacon Chain validator. This is done with the following command:
If you want to use a salt for a vanity address that you found using the process above, run the following command instead:
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):
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.
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:
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.
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 Execution Layer and its corresponding validator public key on the Beacon Chain. You can visit these with any block explorers if you'd like.
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 24 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 8 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://holesky.beaconcha.in for the Holesky 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:
After this prelaunch period, your minipool will enter staking
status and send the additional 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:
The transaction to migrate from prelaunch
to staking
is submitted automatically by your node and is subject to the gas settings in rocketpool service config
.
If the gas settings prevent the node from submitting the transaction, or there is insufficient ETH in the node wallet to pay for the transaction, the minipool will become dissolved
two weeks after it entered prelaunch
.
If this happens, retrieving the balance is a costly and lengthy process, so make sure to monitor your minipool closely until it reaches staking
status!
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.
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.
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.
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.