Get Help

Staking Eth with Blockdaemon

This walkthrough aims to show how a Blockdaemon client can generate their own Eth2 withdrawal address + backup. This is a prerequisite step before staking with Blockdaemon.

The wallet created with these instructions will be where the Eth2 staking rewards will eventually be sent to once transfers are enabled. Blockdaemon will have no ability to change the withdrawal address of a validator once the deposit has been made on the Eth1 chain, so this process is extremely important to complete correctly the first time.

  1. Client installs Go and Ethdo
    # Add to .bashrc or .zshrc
    export GOPATH="${HOME}/.go"
    export GOROOT="$(brew --prefix golang)/libexec"
    export PATH="$PATH:${GOPATH}/bin:${GOROOT}/bin"
    # On MacOS with homebrew installed 
    brew install go
    • Get the ethdo key manager, this is what the client will use to generate the keys.
    GO111MODULE=on go get
  1. Client Generates Withdrawal Wallet
    • Create the wallet with a strong passphrase (so don’t use withdrawal wallet passphrase as a passphrase).
      # Create Wallet
      ethdo wallet create --type=hd --wallet="Withdrawal" --walletpassphrase="withdrawal wallet passphrase"
      # View wallet seed and create a paper backup
      ethdo wallet seed --wallet="Withdrawal" --walletpassphrase="withdrawal wallet passphrase"
      # Check everything looks right
      ethdo wallet info --wallet="Withdrawal"
      • If you have setup your wallet correctly so far you should see:
        Type: hierarchical deterministic
        Accounts: 0
      • Note: The wallet location can be configured with --base-dir .
      • Default wallet locations are:
        - for Linux: $HOME/.config/ethereum2/wallets
        - for OSX: $HOME/Library/Application Support/ethereum2/wallets
        - for Windows: %APPDATA%\ethereum2\wallets
  2. Client creates one or more accounts within the wallet
    • Create an account within that wallet. Accounts have a second passphrase on them, so make sure to choose a strong password and make a note of it too.
      # Create the 'Primary' account within the 'Withdrawal' wallet
      ethdo account create --account=Withdrawal/Primary --walletpassphrase="withdrawal wallet passphrase" --passphrase="withdrawal account passphrase"
      # Now check again that everything looks all right
      ethdo wallet info --wallet="Withdrawal"
      • If you have successfully created your account within your wallet you should now see:
        Type: hierarchical deterministic
        Accounts: 1
    • Output the public key of this wallet.
    •     ```
          ethdo account info --account="Withdrawal/Primary"

      You should see something like:

          Public key: 0x93977c1233988b8ff39d42306bf36e83154a8a9098164b12858db8e8f54ca18e1886ebc1c20c527c97d183e1e36f0da8    ```
  1. Client backs up the mnemonic and wallet and account names
    • The client most importantly needs to keep the mnemonic secure and safe for the 2 or more years it will be until transfers are enabled on Eth2.
    • Having the wallet name and account name are also important to have to make sure recovery is straightforward. In the above example, the wallet name is Withdrawal and the account within it is Primary.
    • If the client has made multiple accounts within the wallet for obscuring the relationship between the validators, that is fine, it is just important to remember each account name to help the recovery process.
    • The client should confirm to blockdaemon that they have saved all of the below information securely. (Blockdaemon does not need to know any of these, just a confirmation is all)
           Wallet Mnemonic
           Wallet Passphrase
           Account Passphrase
           Wallet Name
           Account Name(s)
    • To reiterate, so long as the client has the mnemonic, all is not lost and the funds can likely be recovered through brute force scripts to guess the account within the wallet. But for the happy path, having the account and wallet names and accompanying passphrases to the encrypted ethdo wallet stored on their disk will be the easiest way to retain access to their withdrawal wallet.
  2. Client sends public address of withdrawal account to Blockdaemon and instructs us to create validators for them
    • With these public addresses, BD will create 1 or more validator clients in our infrastructure. These validators will have a withdrawal address set to the clients provided address. Again, there is no changing this withdrawal address once the deposit is made.
    • When BD have created the validators with the provided data, the process will output the required deposit data that will need to be included when the client makes their 32 eth deposit on Eth1 to activate their validator.
    • A BD team member will walk the client through making the Eth1 deposit using with the supplied deposit data and the clients Metamask. Sending 32 ether to the deposit contract without this data or with this data input incorrectly will risk the clients funds getting stuck forever.