RPIP-31: RPL Withdrawal Address Source

Adds an additional withdrawal address that facilitates splitting ETH bond and rewards from RPL bond and rewards

RPIP-31: RPL Withdrawal Address Source

Adds an additional withdrawal address that facilitates splitting ETH bond and rewards from RPL bond and rewards

Abstract

A proposal to add an additional withdrawal address that is the target for RPL bond withdrawals and RPL reward claims. Essentially there will be two withdrawal addresses: one for ETH; and one for RPL. The RPL withdrawal address will default to the ETH withdrawal address.

Rationale

This facilitates the splitting of ETH bond/rewards and RPL bond/rewards, allowing different actors to supply each collateral type. This can be achieved either as a direct trusted relationship (i.e whale marriage) between parties, through a staking-as-a-service provider, or through a third-party staking protocol integration.

The goal of the proposal is to support growth of the node operator set and to utilise RPL that is currently not being staked within the protocol.

There is a demand for parties to stake ETH with Rocket Pool without it necessary to take a position in RPL. There is also a demand from parties uninterested with running a Rocket Pool node to be able to loan unstaked RPL to other parties and earn yield on their loaned RPL.

https://dao.rocketpool.net/t/withdrawal-address-splitter-contract/563

Specification

  • The withdrawal address that has existed to date SHALL be known as the primary withdrawal address

Defaults

  • The RPL withdrawal address SHALL be initialized as unset for new node operators
  • The RPL withdrawal address SHALL be initialized as unset for existing node operators

Rewards & Withdrawn RPL

  • If a node's RPL withdrawal address is set, all RPL rewards and withdrawn RPL will go to the RPL withdrawal address
  • If a node's RPL withdrawal address is unset, all RPL rewards and withdrawn RPL will go to the primary withdrawal address

Setting the Address

  • As a node operator, I MUST be able to set an RPL withdrawal address so that I can direct my RPL bond/rewards
    • If a node's RPL withdrawal address is unset, the change MUST come from the node's primary withdrawal address
    • If a node's RPL withdrawal address is set, the change MUST come from the current RPL withdrawal address
  • As a node operator, I MUST be able to confirm the RPL withdrawal address from the new target address before it takes effect, to ensure it is the correct address
  • As the owner of the RPL withdrawal address, I MUST be able to unset my RPL withdrawal address

Withdrawing RPL

  • As the controller of the RPL withdrawn from a node, I MUST be able to call withdraw RPL as allowed by the protocol
    • If a node's RPL withdrawal address is unset, the call MUST come from one of: the node's primary withdrawal address, or the node's address
    • If a node's RPL withdrawal address is set, the call MUST come from the current RPL withdrawal address

Claiming RPL rewards

  • As the controller of the RPL for a node, I MUST be able to trigger a claim of RPL rewards
    • If a node's RPL withdrawal address is unset, the call MUST come from one of: the node's primary withdrawal address, or the node's address
    • If a node's RPL withdrawal address is set, the call MUST come from one of: the node's primary withdrawal address, the current RPL withdrawal address, or the node's address
  • As the controller of the RPL for a node, I MUST be able to trigger a claim of RPL rewards and restake a portion
    • If a node's RPL withdrawal address is unset, the call MUST come from one of: the node's primary withdrawal address, or the node's address
    • If a node's RPL withdrawal address is set, the call MUST come from the current RPL withdrawal address
  • If a node operator is in the smoothing pool a claim of RPL will also distribute ETH rewards

Staking RPL

  • As the controller of the RPL for a node, I MUST be able to stake additional RPL
    • If a node's RPL withdrawal address is unset, the call MUST come from the node's address, primary withdrawal address, or a specifically allowed address
    • If a node's RPL withdrawal address is set, the call MUST come from the current RPL withdrawal address, or a specifically allowed address
  • As the controller of the RPL for a node, I MUST be able to control the list of specifically allowed RPL staking addresses
    • If a node's RPL withdrawal address is unset, the call MUST come from the node's address
    • If a node's RPL withdrawal address is set, the call MUST come from the current RPL withdrawal address

Backwards Compatibility

The specification as written is backwards compatible with the current withdrawal address. The behaviour is as current for node operators who do not use the new functionality.

Security Considerations

In a situation were the node operator is different to the RPL owner, the RPL owner must rely on the node operator to exit minipools to unlock their RPL stake. A future RPIP may address this limitation once execution layer withdrawals are implemented in Ethereum.

Copyright and related rights waived via CC0.

Citation

Darren Langley, Kane Wallmann, "RPIP-31: RPL Withdrawal Address," Rocket Pool Improvement Proposals, no. 31, September 2023. [Online serial]. Available: https://rpips.rocketpool.net/RPIPs/rpip-31.