[ODAO] Rewards Tree Spec v5

[ODAO] Rewards Tree Spec v5

Hello everyone,

Today I’m happy to bring forward a proposal for v5 of the Rewards Tree spec. This is a small adjustment to the the v4 rules that the Oracle DAO must follow when constructing the Merkle Tree that assigns RPL and Smoothing Pool rewards to each Rocket Pool node operator.

v5 is an important update to v4 because it adds support for 8-ETH-bonded minipools (LEB8s) in the upcoming Atlas protocol upgrade. Support for them is mandatory to ensure that node operators are given a fair share of the RPL and Smoothing Pool rewards on a per-minipool basis, regardless of the bond amount on those minipools.

From an actual rewards perspective, v5 doesn’t appreciably change RPL or Smoothing Pool rewards. It simplifies the calculation for Smoothing Pool using a new scheme based on a spec that @Patches and @Knoshua provided: [ODAO] Proposal for Rewards Tree Spec v2 - #8 by Patches

The v5 spec has been written and is available for review. @Peteris and I have working implementations of it which have agreed with each other for 5 consecutive rounds, so we are confident in its correctness but want to share it nonetheless.

We expect this ruleset to go into effect for either Interval 8 or Interval 9 (April 13th or May 11th) depending on when Atlas is launched as the first rewards interval post-Atlas must use v5.

Proposed Changes

This proposal includes 2 changes to the spec:

RPL Collateral Calculatiion

The minCollateral and maxCollateral for a node’s RPL rewards now use the amount of ETH borrowed from the staking pool (for the minimum) and bonded by the node operator (for the maximum) on a per-minipool basis, instead of a flat 16 ETH for both.

This change follows the Protocol DAO’s vote to cap the maximum amount of RPL bonded per-minipool based on the amount of ETH bonded rather than borrowed. The RPL limit for 16-ETH minipools is unchanged (1.6 ETH equivalent minimum or 10%, 24 ETH maximum or 150%) but the RPL limit for LEB8s is now 2.4 ETH equivalent minimum (10% of borrowed) and 12 ETH equivalent maximum (150% of bond). For Redstone, this results in identical RPL rewards to v4 and we don’t anticipate any controversy around this change.

Smoothing Pool Rewards Calculation

The entire process for calculating Smoothing Pool ETH rewards for nodes has been redesigned to make it easier to understand and compatible with the Atlas upgrade, which makes the ETH bonds for minipools variable.

This refers to the system derived from the aforementioned algorithm provided by @Patches and @Knoshua. While the method of calculation has changed, the rewards themselves are unchanged (or are only affected very slightly). At a high level, the new calculation scheme follows these rules:

  • Node eligibility based on opt-in and opt-out time has been removed; the eligibilty check now only checks if a minipool has 3 or more penalities. If it does, the owning node is ineligible for any Smoothing Pool rewards.
  • Minipools that activated after the interval ended or exited before the interval started are ignored.
  • After that, each attestation assignment is tallied, and each successful attestation on the Beacon Chain during the interval is recorded.
    • Attestations that belonged to minipools for eligible nodes that were opted in and active during the time of the attestation are tracked; others are discarded.
    • For each one, the minipool’s “score” is essentially increased by the fraction of 1 ETH that belongs to the node operator at the time of that attestation.
      • For example, a 16-ETH minipool with 20% commission would have its score increased by 0.6 (0.5 + 20% of 0.5).
      • An 8-ETH minipool with 14% commission would have its score increased by 0.355 (0.25 + 14% of 0.75).
      • A 16-ETH minipool that migrated to an LEB8 would use its 16-ETH bond and commission if the attestation happened prior to its migration, and its 8-ETH bond and commission if the attestation happened after its migration.
  • Once all attestations have been processed, the total score for all minipools is added up. Each node’s score becomes the sum of its minipool scores.
  • Each node’s ETH awarded is equal to the node’s score, divided by the total number of tracked (not missed) attestations, times the Smoothing Pool’s balance.
  • The rETH stakers receive an amount equal to the Smoothing Pool’s balance minus the total ETH awarded to node operators.

The benefit of this design is that it is very simple; it automatically accounts for each minipool’s commission, bond amount, smoothing pool opt-in status, and eligibility at the time of the attestation. The complex dance around determining eligibility and score by opt-in time and attestation count is replaced by this much more elegant process. The end result should be negligible differences compared to what v4 would produce, so we don’t anticipate any significant controversy around this change.


The current Smartnode implementation of the v5 spec is available here: smartnode/generator-impl-v5.go at atlas · rocket-pool/smartnode · GitHub

Activation Timing and Testing

It is critical that this ruleset is used for the first post-Atlas rewards period due to its support for LEB8s. Therefore, we expect this ruleset to go into effect for either Interval 8 or Interval 9 (April 13th or May 11th) depending on when Atlas is launched. As of this writing, this gives the community and the Oracle DAO a minimum of 9 weeks to propose any changes. Additionally, this will be included in our upcoming Smartnode v1.9.0 beta where it will be employed on both the Zhejiang and Goerli testnets for inspection and testing.

Let me know your thoughts below. Thanks all!


I fully approve. @jcrtp Excellent explanation and write-up. Great work to @knoshua and @Patches for the simple algorithm.


All good to me. Shout out to the contributors on this.

Sounds good to me. Good work!

This is great. Good work everyone!

It all makes perfect sense. Great simplification that’s accurate and fair too.

So a node with multiple minipools is entirely ineligible for smoothing pool rewards if any of their pools has 3 or more penalties, meaning this is basically a node lifetime SP ban? If they went back to using a correct fee recipient (or were penalized for other reasons, like building local blocks) their block rewards would go to the SP without them being able to claim a share.
This is probably fine as a small extra deterrent, even though NOs could still get around it by winding down their node and completely starting over.
In any case, the penalty system isn’t the focus here, just thinking through the implications :slight_smile:

I like that you are rewarding at the attestation level. This is probably as granular as you can get with this reward system. I like it!

This is pretty straight-forward to me. I like this move to successful per-attestation incremental add to the rETH balance contributing to share of SP.

There have not been any requests for adjustment in the weeks since proposing this spec, so it looks like it will become canon.

v5 will go live for Rewards Interval 8 on April 13th, but it will still be using the Redstone contracts. The first interval to use v5 with the Atlas contracts is expected to be Interval 9 on May 11th.