RPIP-3: SaaS Provider Standard
|Author||Mike Leach (@Wander)|
Table of Contents
Staking as a Service Provider Standard for ETH-only Clients
A standard interface for staking as a service (SaaS) providers.
The following provides a standard API for Rocket Pool SaaS provider contracts. RPRC-3 allows clients to stake ETH and requires providers to supply RPL collateral. Variations on this standard allow for assessing additional fees, such as fees to cover validator creation costs, or additional functionality such as returning unused ETH to the client.
An on-chain accounting standard for SaaS providers has benefits for both providers and users. Providers benefit from streamlined operations and increased interoperability, and users have increased visibility into their provider’s operations, allowing them to verify fees and other expenses are accounted for correctly.
A RPRC-3 standard contract brings together two actors which are not served by the base Rocket Pool protocol: 1) A client who wishes to earn staking rewards on their ETH without any RPL exposure and is willing to trust a SaaS provider to run a validator on their behalf. This actor benefits from an RPRC-3 relationship by earning extra rewards on their ETH above what rETH can provide. 2) A SaaS provider with unstaked RPL who wishes to increase capital efficiency of this holding by engaging in a trusted relationship with clients via staking RPL on behalf of the client. This actor benefits from an RPRC-3 relationship by earning RPL rewards from previously-unstaked RPL.
A multi-signature scheme for controlling the withdrawal and node wallets is RECOMMENDED.
Node Withdrawal Wallet Contract Specification
Fee percentage assessed on ETH rewards.
Array of addresses. When the admin wallet calls
processValidatorExit(n), addresses in the
exit array will be credited with their balance.
Address with administrative privileges.
When the node operator exits validators, they may call this method from the admin address to distribute assets.
function processValidatorExit(uint256 numValidators) public view
Gets the balance of ETH for an address.
function balanceOf(address owner) public view returns (uint256)
Deposits ETH and credits it to an address. Fails if the transaction does not include at least 16 ETH.
function ethDepositFor(address owner) public view
Adds the address to the exit queue.
function exit(address owner) public view
Node Wallet Specification
[can this be the same as a normal RP node wallet?]
Please cite this document as:
Mike Leach (@Wander), "RPIP-3: SaaS Provider Standard [DRAFT]," Ethereum Improvement Proposals, no. 3, March 2022. [Online serial]. Available: https://rpips.rocketpool.net/RPIPs/rpip-3.