RPIP-42: Bond Curves Source

Introduce smaller ETH bonds to improve capital efficiency for Node Operators while maintaining the security of the Rocket Pool protocol.
⚠️ This RPIP is not recommended for general use or implementation as it is likely to change.
RPIP42
AuthorValdorff
StatusDraft
TypeProtocol
CategoryCore
Requires 43, 44
Created2024-03-08
DiscussionLink

RPIP-42: Bond Curves Source

Introduce smaller ETH bonds to improve capital efficiency for Node Operators while maintaining the security of the Rocket Pool protocol.

Abstract

This proposal dramatically increases the LTV used in the protocol (loan to value; the amount of ETH that can be borrowed per unit of bonded ETH). It does this safely by:

  • Enabling node-level penalties to mitigate/discourage MEV theft
  • Using forced exits as needed
  • Starting with lower LTV at lower total bonded ETH to mitigate/discourage MEV theft
  • Retaining sufficient bond per validator regardless of total stake to mitigate against slashing and abandonment
  • Providing increased capital efficiency with greater bond to encourage an NO to stake as large nodes instead of many small nodes

This proposal also explicitly tries to benefit the smallest NOs in a few ways, in line with the pDAO charter values of decentralization and prioritizing Ethereum health (see RPIP-23):

  • We willingly take on somewhat more MEV-theft risk for the smallest NOs (see Rationale)
  • We give precedence to small nodes staking some number of initial validators in the Node Operator queue (see RPIP-59)
  • There is a small but tangible financial benefit for large stakers that stake as few large nodes instead of many small nodes – this (alongside our vote power, which scales with the square root of vote-eligible RPL) helps preserve the strong governance voice of small NOs

Specification

Array indexing in this section is zero-based.

  • The oDAO SHALL be able to penalize stake at the node level when a Penalizable offense is committed
  • Prior to creating a validator, there MUST be no debt from penalties on the megapool
    • There SHALL be a function provided to pay off debt with ETH
    • There MAY be a convenience function to use a single ETH payment to pay off existing debt and create an additional validator
  • When a Node Operators creates a validator, with i validators in the megapool prior to adding:
    • If i < base_bond_array.length: the required user_deposit is the amount of additional ETH to bring the user’s total bond up to base_bond_array[i].
    • If i ≥ base_bond_array.length:, the required user_deposit is reduced_bond per validator.
  • When a Node Operators removes a validator, with i validators in the megapool prior to removing:
    • If i > base_bond_array.length: the Node Operator share before penalties is reduced_bond.
    • If i ≤ base_bond_array.length and i > 1: the Node Operator share before penalties is the amount of ETH that would bring the user’s total bond down to base_bond_array[i-2].
    • If i==1: the Node Operator share before penalties is the amount of ETH that would bring the user’s total bond down to 0 ETH.
  • Bulk validator creation/removal functions SHALL behave the same as multiple individual transactions.
  • If an NO has more total bonded ETH in their megapool than would be necessary based on the current settings (eg, reduced_bond is reduced), it SHALL be possible to reduce their bonded ETH and receive ETH credit for it
  • credit MUST be usable to create validators in a megapool
  • credit MUST be usable to mint rETH to the NO’s primary withdrawal address
  • The initial settings SHALL be:
    • base_bond_array: [4, 8]
    • reduced_bond: 4 ETH

Specification taking effect with Saturn 2

  • Update reduced_bond to 1.5 ETH

Penalizable offenses

This portion of the RPIP SHALL be considered Living. It may be updated by a DAO vote following the existing rules and conventions for RPIP modifications.

Offense Penalty Added Updated
MEV theft theft size + 0.2 ETH 2024-03-29 2024-03-29

Implementation thoughts

  • When showing legacy node status, there is not a trivial way to get the node index for a given address. That said, the other direction is trivial using RocketNodeManager.getNodeAt, so the work can get moved off-chain. Eg, one can iterate across all possible node indices and then pass in the node index that matches the node’s address; the smart contract can confirm the match to demonstrate legacy node status.

Rationale

  • Bond sizes were originally ideated per prior work.
    • base_bond_array is chosen to “sufficiently” dissuade MEV theft as a strategy
    • reduced_bond is chosen to “sufficiently” guard against slashing or abandonment risks
  • Follow-on work was done in discord
2.5% commission 4% commission
img.png img.png
  • Note that the bond curve has been chosen to ensure that minimum-size sock puppets are not the most efficient for theft. They get the most advantage from theft, but not the highest overall yield from a dishonest strategy.
  • Validators with base_bond deposits are prioritized to promote decentralization; new or smaller Node Operators can get up to base_bond_array.length validators launched ahead of larger Node Operators adding reduced_bond validators.

Copyright and related rights waived via CC0.

Citation

Valdorff, "RPIP-42: Bond Curves [DRAFT]," Rocket Pool Improvement Proposals, no. 42, March 2024. [Online serial]. Available: https://rpips.rocketpool.net/RPIPs/rpip-42.