# Staking wizard _For simplicity, the specifications in this document only include the "solo staker" option. Most other protocols (Rocketpool, Stakehouse, Stakewise, etc.) can be used with the same specifications, with a few exceptions that must be addressed individually._ **Motivation** Simplicity is one of the main principles of Dappnode. As such, it's essential that we simplify the process of running an Ethereum validator using any available protocol (solo-staker, Rocketpool, Stakewise, Stakehouse, etc.). While these protocols share some similarities, such as the process for creating keystores, some may require additional steps. **Process of running an Ethereum validator** Currently, running a validator (solo-staker) in the Ethereum ecosystem requires the following steps: 1. Run an Execution Client 2. Run a Consensus Client 3. Run MEV boost (optional) 4. Run a remote signer (if running validator with signer mode) 5. Create validator keystores 6. Do the deposit 7. Import validator keystores Steps 1 to 4 have already been addressed in the Stakers UI on DAppNode, and a v1 stakers wizard with these steps has been implemented (see https://github.com/dappnode/DNP_DAPPMANAGER/pull/1393). To simplify even more the process of running a validator in DAppNode, steps 5 to 7 should be automated as much as possible. **Ethereum launchpad** Right now the step of **doing the deposit** is mainly done through the [Ethereum launchpad](https://launchpad.ethereum.org/). Furthermore, the step of **creating the validator keystores** is also detailed in the Launchpad, redirecting users to the [Deposit-cli](https://github.com/ethereum/staking-deposit-cli) or the [Wagyu](https://github.com/stake-house/wagyu-key-gen) app. The [Ethereum launchpad](https://launchpad.ethereum.org/) is currently the primary way to do the deposit required to become a validator. Additionally, the Launchpad details how to create validator keystores, redirecting users to either the [Deposit-cli](https://github.com/ethereum/staking-deposit-cli) or the [Wagyu](https://github.com/stake-house/wagyu-key-gen) app. ### Create validator keystores _In the Dappmanager staking wizard, this step is only shown for new validators, not for existing validators._ Creating validator keystores is one of the most critical steps, and the tool used cannot have any security vulnerabilities. Ideally, the tool would have undergone an audit. The seed must be displayed correctly to the user and require confirmation. Also, this step is required to implement the **automatic keystores import** step in DAppNode. This step can be done using the official and audited tools [Deposit-cli](https://github.com/ethereum/staking-deposit-cli) and [Wagyu](https://github.com/stake-house/wagyu-key-gen). A non-audited tool is [ethdo](https://github.com/wealdtech/ethdo). Tecnical details that we are concerned of: - Creating keystores securely and in an isolated manner - Displaying seed to the user - Setting withdrawal credentials on validator keystores creation **Approaches** In order to simplify the process of running a validator in dappnode, **creating keystores should be run inside a dappnode environment**. To achieve this there are several approaches: |Approach|Description|Advantages|Disadvantages| |---|---|---|---| |DAppNode package Wagyu| Having a dappnode package with the Wagyu UI app running on it. Modifying the src code we can allow to select the network and setting the withdrawal credentials | - App audited<br>- UI for keystores creation already developed<br>- Uses official deposit-cli tool under the hoods | - Requires a fork and mantaining it<br>- Requires modifications to support: tag (protocol) input, automatic withdrawal address if protocol known<br>- Requires to implement the automatic import<br>- UIX flow broken: its just another UI that we have to redirect the user to (from the staking wizard)<br>- It does not motivate at all | | Push Ethereum foundation to support non-interactive usage in the deposit-cli tool | Push Ethereum foundation to support non-interactive usage in the deposit-cli tool so we can use it in the dappmanager to create validator keystores in the staking wizard | - Audited<br>- Full control of the code<br>- UIX flow not broken<br> | - Need a grant to implement non-interactive usage<br>- A frontend is required in the dappmanager (Staking wizard) | | Use [Ethdo](https://github.com/wealdtech/ethdo) tool | Use the ethdo tool in the dappmanager to create validator keystores in the staking wizard | - Not required any external work<br>- Full control of the code<br>- UIX flow not broken<br> | - Not audited<br>- A frontend is required in the dappmanager (Staking wizard) | ### Import validator keystores _In the dappmanager staking wizard this step would be different for new validators and for existing validators. In new validators this step would be automatically implemented after step **Create validator keystores**. In existing validators this would be a UI step of the staking wizard_ Importing validators is done through the keymanager UI. In the dappmanager setup wizard, this step would be different depending if the user is creating new validators or has already validators. - **New validators**: at the end of the step **Create validator keystores** The keystores generated will be stored until the end of the wizard, when the signer is installed and the keystores can be imported. - **Existing validators**: For existing validators, instead of creating new keystores, users can upload their existing keystores in a "drag and drop" step within the staking wizard. These keystores are also stored until the end of the wizard, when the signer is installed and the keystores can be imported. **Staking brain launchpad API** In order to allow importing automatically keystores, the brain will expose an API for importing validator keystores following [the standard](https://ethereum.github.io/keymanager-APIs/#/Local%20Key%20Manager) with a few add ons: - Fee recipient - Tag (solo-staker, obol, rocketpool, etc) ### Do the deposit TBD