Claiming Node Operator Rewards

As a Rocket Pool node operator, you are entitled to regular rewards that will be provided in the form of the RPL token and (if you are opted into the Smoothing Pool) some ETH as well. This section will describe how these rewards work and how you can claim them.

Rewards and Checkpoints

At regular intervals, Rocket Pool will flag a checkpoint on the network. Currently, checkpoints occur every 28 days.

At a new checkpoint, the Oracle DAO will collectively create a true snapshot of the state of the node operators in the Rocket Pool network, which it will use to determine the RPL and Smoothing Pool ETH rewards for each node during that interval. Note that "bonus commission" for Saturn 0 minipools is distributed using smoothing pool rewards (Saturn 0 minipools are the ones created after 2024/10/28, which have a contract commission of 5%).

This information is compiled into a Merkle Tree - an extremely efficient way to make all of the details available to smart contracts. The Merkle Tree is built into a JSON file and hosted on the InterPlanetary File System (IPFS) and mirrored on a GitHub repository that we maintain.

Once the tree is submitted, the Rocket Pool smart contracts will mint new RPL tokens and move them, along with the Smoothing Pool's entire ETH balance, into the Rocket Pool vault for secure storage. You can then view how many RPL and ETH rewards you earned during that interval and claim those rewards.

The rewards system has the following features:

  • Each interval is independent. The amount of RPL and ETH you earned in one interval does not affect the earnings for subsequent intervals.
  • You can let rewards accumulate for as long as you want. You do not need to claim rewards by a specific time; they will always be available for you to claim, and will always provide exactly the same amount of RPL and ETH regardless of when you claim them.
  • You can claim one interval at a time, or multiple intervals all at once.
  • Your first claim transaction uses about 85k gas. Each subsequent claim transaction costs about 55k gas.
    • If you're claiming multiple intervals at once, each supplemental interval costs 6k gas so it's most cost-effective to claim as many of them at once as possible.
  • You can restake some (or all) of your RPL rewards as part of the claiming transaction so it's all done in a single transaction (which further reduces gas costs).
  • Currently, all of your claims must be on Mainnet but we have the infrastructure in place to build the ability to claim on Layer 2 networks at a later date.

For more information on how the Merkle Tree is built and how rewards are calculated, please visit our research repository and view the official specifications. We've provided a brief explanation of them below.

RPL Rewards

RPL's current rewards rate is 5% inflation per year and rewards are paid out every 28 day period. As of 2024/10/21, the last period's inflation was 77,533. Since 70% is distributed to Rocket Pool node operators, that was 54,273 RPL that period.

This amount will be divided among all of the node operators on the network, based on their node weight. Node operators earn the maximum APY for staked RPL positions worth 0-15% of borrowed ETH. RPL stake beyond 15% borrowed ETH still earns further rewards, but at a reduced marginal APY.

If less than 28 days have passed between the time when you registered your node and the checkpoint, your rewards in that first rewards interval will be pro-rated to account for that. For example, if you registered on day 14 of the interval, you would receive 50% of normal rewards.

After that first interval, your node will have been registered long enough on subsequent intervals that you will receive full rewards for all of them.

The rocketpool node status command will show you your current collateralization ratio at any point of time. This collateralization ratio will be based on the prices at the time at which you run the command. However, if you want to know what your collateralization ratio will be at the next rewards round, follow the next steps:

  • Run the /when command in the "random" channel of the Rocketpool Discord, and see how many hours are left before the next rewards period starts.
  • The oDAO takes a price snapshot every 19.2 hours (i.e. around 5760 blocks * 12 seconds, excluding missed blocks). Therefore, checking the oDAO price submission contract in Etherscan will tell you whether a price snapshot was taken in the 19.2 previous hours before the time stated in the bullet point above. If that is the case, the price snapshot has been taken. If not, it is yet to be done and you can estimate when it will happen by looking at the last round of oDAO price submissionas, and adding 19.2 hours.
  • To check which RPL/ETH price ratio was taken as a snapshot by the oDAO for the next rewards round, check the oDAO price submission contract in Etherscan (which you can obtain by running the /get_address_of_contract contract:rocketNetworkPrices command in the "random" channel of the Rocketpool Discord). Afterwards, open one or more of the transactions submitted by the oDAO members.
  • Scroll down and in the "More Details" section, click on "+ Click to show more", and then click on "Decode Input Data".
  • The RPL price (shown in wei units) displayed in the Input Data box, divided by 10^18 (to convert it to ETH units) multiplied by the number of RPL staked, should be >= 1.6 ETH (for 16 ETH minipools) and >= 2.4 ETH (for LEB8s), times the number of minipools of each type which you operate.
  • If your collateral ratio is below the required amount as explained in the previous point, you can stake additional RPL in the time between the oDAO took the last price snapshot (see bullet point 3 above), and the time when the next rewards round begins (see bullet points 1 and 2 above), in order to bring your node back to a >=10% collateralization ratio.
  • An alternative to checking the oDAO price submissions in etherscan is to keep an eye on the "events" channel of the Rocketpool discord, and look for the RPL Price Update message from the Rocket Watch bot (see example below) within the last 19.2 hours before the next rewards period starts.

Smoothing Pool ETH Rewards

Along with RPL rewards, the Smoothing Pool's entire ETH balance is distributed during rewards checkpoints. Out of the entire Smoothing Pool's rewards balance, the percentage which corresponds to pool stakers (50% for 16 ETH minipools, or 75% for LEB8s), minus the respective node commission, will be sent to the rETH contract. There it can either 1) be burned for ETH from pool stakers that want to exit, or 2) be used to create more minipools. The remaining portion will be distributed amongst the eligible node operators.

Nodes that are opted into the smoothing pool for the interval, even if only part of the time, are eligible for a portion of the Smoothing Pool's total balance. The balance is snapshotted at the rewards checkpoint, and the Oracle DAO determines each eligible node's portion. The portion is determined by the following factors:

  • Amount of time in the Smoothing Pool this interval
  • Attestation performance on the Beacon Chain for each minipool
  • The commission of each minipool

If you'd like to know more, please see the research repository linked above for a full breakdown of how the rewards are calculated.

(Optional) Generating the Rewards Tree

When a new rewards checkpoint is reached, the Oracle DAO will begin to build the rewards tree for that interval. Building this tree currently takes approximately 2 hours, and the rewards for the interval aren't available to claim until the tree has been built and submitted. Once it's available, your node will automatically download this file and you'll be able to view and claim your rewards for that interval.

If you'd like to generate the tree yourself instead of downloading the pre-built one from the Oracle DAO, you can do so!

  • Enter the rocketpool service config TUI.
  • Navigate to the Smartnode and TX Fees section.
  • Change the Rewards Tree Mode from Download to Generate.
  • If your primary Execution client is not an archive node, you can add a URL for a separate archive node in the Archive-Mode EC URL box.
    • This is needed to generate historical rewards trees.
    • The Archive EC will only be used for tree generation; it will not be used for any other Smartnode duties.
    • Infura and Alchemy offer archive node access. Note that the free tiers are usually not sufficient to handle tree generation, so you will need one of the paid tiers.

Now your Smartnode will build the tree completely independently from the Oracle DAO, using only the data provided by your Execution and Consensus clients. You can watch it during a rewards interval checkpoint with rocketpool service logs watchtower.

If you'd like to rebuild past trees from previous intervals, you can do so with the following command:

rocketpool network generate-rewards-tree

Follow the prompts, and then use rocketpool service logs watchtower to view its progress.

Claiming Rewards

To view your pending unclaimed rewards, run the following command:

rocketpool node claim-rewards

As intervals go by and you accumulate rewards, the output will look like this:

Here you can quickly see how many rewards you've earned at each interval, and can decide which one(s) you want to claim.

You can also specify an amount you want to restake during this claim:

This will let you compound your RPL rewards in one transaction, which saves on gas costs.

Simply follow the prompts, ensure your node wallet has enough ETH to pay for the gas costs of claiming, and you're done! Your rewards will be sent to your withdrawal address.

TIP

To view your node's total rewards, including those you've already claimed, use the following command:

rocketpool node rewards

This will provide a breakdown of how much RPL and ETH you've claimed so far, and how much is still unclaimed:

=== ETH === You have earned 8.1935 ETH from the Beacon Chain (including your commissions) so far. You have claimed 0.0634 ETH from the Smoothing Pool. You still have 3.4788 ETH in unclaimed Smoothing Pool rewards. === RPL === The current rewards cycle started on 27 Sep 22 21:26 EDT. It will end on 30 Sep 22 21:26 EDT (20h35m17s from now). You currently have 675.616380 unclaimed RPL from staking rewards. Your estimated RPL staking rewards for this cycle: 36.851544 RPL (this may change based on network activity). Based on your current total stake of 6615.797278 RPL, this is approximately 67.77% APR. Your node has received 208.551820 RPL staking rewards in total. You may claim these rewards at any time. You no longer need to claim them within this interval.

Execution-Layer Rewards in your Fee Distributor

If you're not opted into the Smoothing Pool, the Execution-layer portion of your rewards from block proposals (including transaction fees and MEV) will be sent to your node's Fee Distributor contract instead.

To check the balance of your Fee Distributor, you can either use a chain explorer like https://etherscan.io or simply run rocketpool node status - there will be a section called Fee Distributor and Smoothing Pool that shows it:

=== Fee Distributor and Smoothing Pool === The node is not opted into the Smoothing Pool. To learn more about the Smoothing Pool, please visit https://docs.rocketpool.net/guides/redstone/whats-new.html#smoothing-pool. The node's fee distributor 0xA0bfbFC582f5814585f8455Ed6D7B620eA9a9EE4 has a balance of 1.143598 ETH.

Distributing the Balance

To access the Fee Distributor's balance, you will distribute it (hence the name, Fee Distributor). This will calculate your share of the rewards (based on your node's average minipool commission) and send it to your node's withdrawal address; the rest is sent to the staking pool.

Distribution can be done at any time. You can sit on the balance and let it accumulate if you choose, or distribute it regularly.

To distribute the balance, run the following command:

rocketpool node distribute-fees

This will show how much goes to you and how much goes to the staking pool:

Your node's average commission is 15.00%. Your fee distributor's balance of 1.143599 ETH will be distributed as follows: Your withdrawal address will receive 0.657569 ETH. rETH pool stakers will receive 0.486030 ETH.

Simply confirm the gas price you want and submit the transaction. Once it's been completed, your portion of the rewards will be available in your node's withdrawal address.