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 generated on the Consensus layer and automatically withdrawn periodically, 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.
As a quick reminder here's a breakdown of the different types of rewards and which layer they're provided on:
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:
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 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.
You can view your fee distributor's address and balance as part of:
The output will look like this:
{ style="display: block; margin: 0 auto" }
To initialize your node's distributor, simply run this new command:
If 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:
This will send your share of the rewards to your withdrawal address.
Whenever 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).
To ensure that node operators don't "cheat" by manually modifying the fee recipient used in their Validator Client, Rocket Pool employs a penalty system.
The Oracle DAO constantly monitors each block produced by Rocket Pool node operators.
If a node is opted out of the Smoothing Pool, the following addresses are considered valid fee recipients:
If a node is opted in to the Smoothing Pool, the following address is considered a valid fee recipient:
A fee recipient other than one of valid addresses above is considered to be invalid.
A minipool that proposed a block with an invalid fee recipient will be issued a strike. On the third strike, the minipool will begin receiving infractions - each infraction will dock 10% of its total Beacon Chain balance, including ETH earnings and send them to the rETH pool stakers upon withdrawing funds from the minipool.
Infractions are at a minipool level, not a node level.
The Smartnode software is designed to ensure honest users will never get penalized, even if it must take the Validator Client offline to do so. If this happens, you will stop attesting and will see error messages in your log files about why the Smartnode can't correctly set your fee recipient.
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:
{ style="display: block; margin: 0 auto" }
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 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.
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 Holesky, 28 days on Mainnet) before opting out to prevent gaming the system (e.g. leaving the SP right after being selected to propose a block).
The Smoothing Pool calculates the "share" of each minipool (portion of the pool's ETH for the interval) owned by each node opted in.
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 are interested in the complete technical details of Smoothing Pool rewards calculation, please review the full specification here.
To opt into the Smoothing Pool, run the following command:
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:
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.
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:
If opted into the Smoothing Pool, you will notice that the amount of ETH you receive for each interval is more than zero:
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.
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.