How to stake for Ethereum 2.0 with DappNode
There are multiple ways you can start staking for Ethereum 2.0 but for the sake of this tutorial, I am going to use DappNode. I’ll explain some of the thinking behind it if you are still debating on what is right for you but if not you can skip ahead to the how to portion.
Minimum requirements vs Recommended requirements
Let’s get into the nuances of hardware requirements by:
Client implementation: The above is one client’s (Prysm) requirements which may vary widely from something like Nymbus which is aimed at running a client on lower powered devices such as a Raspberry Pi or a phone.
Standard use: Hardware requirements are much like a factories output. When everything is running smoothly, the upper bounds of the capacity seems wasteful.
Problematic times: However, during problematic times such as COVID, we really wish Clorox and Lysol factories could exceed the 100% limit. The same applies to increased strain on the blockchain or your machine resources.
Phase: Ethereum 2.0 will be deployed in 6, arguably 7 phases. Each one of those will have different requirements so you need to ask yourself, “How many phases am I willing to stake for” and “In which phase am I willing to upgrade the hardware?”
Based on the above, here is what I bought totalling: $717
Intel NUC8i5BEH — $389
32GB laptop RAM (16GB x 2) — $99
2TB SSD — $229
DappNode OS — Free
Temporary For Set Up
An 8GB USB (This is to install the OS so you can use any old USB you have laying around. Please note that it will erase the files on the USB.)
Computer monitor (This is only during the installation so you can use your current desktop monitor for 10 minutes and then put it back.)
Keyboard with USB (Also only during the installation so borrow one for 10 minutes.)
Ethernet cable (You can use wifi but you may miss some blocks with the latency)
Data only or pre-paid plan
My thinking on this is goes into the 4 categories listed above: Client implementation, standard use, problematic times, and phase of development. You can agree with my rationelle, not agree with the risk parameters, or have a different time horizon all together. All are OK and you can buy something else based on where we differ and what you may find after doing a bit of research about what is available on the market. Here are my in depth thoughts about why I chose what I did.
I have built a few Bitcoin and Ethereum nodes on a Raspberry Pi as a fun hobbyist project on the weekends. However since staking requires you to be online, I wanted to ensure I had something more stable despite Nymbus being able to work on a Pi4 and Lighthouse saying the ability is TBD but looking good. The i5–760 is 10 years old and has a benchmark rating of 2,591 however the recommended processor comes in at 7,042. Since Phase 0 is only introducing the Beacon Chain and not any data or execution, I wanted to future proof myself for phase 1, 1.5, and 2 without spending a ton of money on this. After doing some research I found the i5–8258U comes in at 8,380 which surprisingly scored higher than the newer i5–10210U which came in at 6,457. The only benefit to the newer model is that it is 2x power efficient but since the cost of running the 8th gen model is only $1.28 per month, I thought it was a pretty good trade off. These requirements may come down as people like Danny Ryan are pretty confident about but it may rise with each phase. If anyone wants a side by side comparison of the 4 processors mentioned, you can click here.
For anyone not familiar with Intel processors, they have 4 main categories (i3, i5, i7, and i9) ranging from entry level to higher end respectively. They also include the generation which is the next number, and then the model number and maybe a variant letter. So an i5–8258U is a midrange (i5) two year old (8th gen as the current is 10th) version of the 258 processor that is (U) ultra efficient. This is a laptop processor compared to the desktop version of the 258. You can find the one that is best for you. Again, I wanted to give myself some leniency on being future proof without spending a lot of money on this.
32 GB RAM
This is the decision I struggled with the most but happy with the outcome. When I originally started looking into a staking node, I was going to go with 16GB of RAM instead of the 8GB that many talked about but then the Medalla testnet crash happened. Reading the post mortem there was a Lighthouse client that was seen using 30GB of RAM which the team is addressing. Granted this is 100x the normal but here lies a risk decision.
When the testnet crashed, nodes that couldn’t handle the strain were taken offline and the chain could no longer reach finality as it dipped below the 66% threshold for active validators. New nodes couldn’t come online to save the network as the chain needs to reach finality in order to add new committees from the queue. This means the only way to resurrect the chain was if the validators that crashed could process the mess and get back online. I’ll touch more on this in the optional section, but staying online is key to ensure you don’t get slashed or to maximize profits. I also wanted the buffer to handle the network growth. ETH2 needs 16,000 validators to launch but the connectivity overhead only increases as the size of the network grows. As a conservative guess I expect 30,000 to 50,000 validators.
Additionally, I bought two 16GB chips instead of one 32GB chip to create redundancy. When I was in college, I was doing an online test and noticed my laptop starting to slow down dramatically. After the test I was looking at some performance metrics and realized my 8GB laptop said I only had 4GB of RAM. I realized that one of the chips failed so my laptop was relying on one, instead of two 4GB chips. Had it crashed and I only had one 8GB chip, I would have failed that test as my laptop would have died and I would have had to spend the day rebuilding the laptop and miss the test deadline. It is also cheaper.
This is where I feel as though I went overboard but I’ll play devil's advocate and say that 500GB and even 1TB may not be enough. If I am going to do this, I want to buy one set up and stake as long as humanly possible without spending more money on a second computer should a Pi4 not be enough or deal with downtime if I need to upgrade parts. Additionally, I should note you will need an SSD for this. The read/write speeds needed for ETH2 will be too slow if you want to repurpose an old hard drive but you can build a Bitcoin node with one.
At the time of writing this, the size of the blockchain for Geth is 467GB while it is 304GB for Parity to run a full node. This goes back to my earlier point about the requirements varying based on the client implementation. I could also use fast sync on Geth and get the blockchain size down to 170GB. My concerns are 1. will the requirements change and 2. what is the growth rate of the chain. I doubt the requirements will change but I also know that there is no guarantee that Geth or Parity will be around for a few years ands new clients like Turbo Geth could take over.
However, I am more concerned about the growth of chain. I am going to liberally say that the bull market in 2017 was from August to February to make it easier to understand the chart. During those 6 months the chain tripled in size from 10 to 31GB. Then the chain 5x during a bear market which lasted 2 years. You won’t be able to withdraw or move your ETH deposit until phase 2 launches which at a minimum we expect is 2 years away. That being said, I fully expect a full blown bull market sometime in 2021 and I expect the number of dapps and users to grow along with it. In 2017, there was a ton of ICO activity but dapps were just starting to come online and major companies like Reddit weren’t looking to put anything on a public blockchain. I am much more confident in saying you shouldn’t buy a 500GB SSD but cautiously hesitant to say that 1TB may not even be enough. Pick something depending upon 1. how long you want to stake 2. when you believe phase 2 launches 3. which client you want to use and 4. how fast the chain will grow over the course of questions 1 and 2 and how that impacts 3.
I am not sure if you agree or disagree with those hardware parameters but there are two ways to take the edge off. I know this is for the advancement of ETH2 but you can buy all of these parts on Lolli or through Amazon via Fold and earn some free Bitcoin back. Keep the Bitcoin, stake in Uniswap, or sell it for fiat, it all helps cover the costs of your node. Now for some software considerations.
DappNode OS is a free open source project that is based off of Linux but allows you to run multiple chains at once or multiple dapps. When I was looking into what I wanted to do, I knew I didn’t want to open a docker container on an old Windows or Mac computer. I would have to pay attention to versioning and both require forced updates which means downtime for my validator. I was going to install Ubuntu on it but I was already seeing issues with people using version 20 as version 18 was more stable along with needing non-free networking drivers. There is also the comfort level of command line and constantly having to look up the all of the recommended parameters for the best performance. I also started looking into noncustodial staking pools so I could send less than the required 32 ETH but for one reason or another none looked appealing as I wanted to run my own node and not trust their software signing for my funds. See rushed Prsym update and Stakewise as one example. I also didn’t want to wait a year for exchanges that I don’t trust to enable staking services so I could take advantage of sending less than 32 ETH. Moreover, we should further decentralize the network and use our own nodes. Prism has already stated it is running in Google Cloud while Lighthouse is on AWS. Regardless of you own situation, this will enable you to solo stake or take back some control if you don’t want to completely trust a staking pool with 0.01 ETH.
DappNode sells hardware devices if you don’t feel like looking for parts and building your own as well. Ironically the devices they sell are very similar to what I opted to build before I started getting concerned about Linux. If you are looking for a user interface that enables you to point and click then this may be for you. My only concern was my concern about staking pools: Will it be around in 2 years? With a good first product, grants from The Ethereum Foundation, Aragon, the EU, and the options to donate on Gitcoin I think they will be. If you use this option, I encourage you to donate on Gitcoin whenever their matching pools become available.
Battery and an old phone with a data plan
This all comes down to ensuring you don’t get penalized, slashed, and maximize profits. As mentioned earlier, staking requires you to be online. The Beacon Chain will randomly assign validators to propose a block as well as committees to validate a block. If your validator is online and chosen, you can earn some level of ETH as a reward. If your validator is offline and chosen, you’ll be penalized for missing it.
Paul Hauner explains that if your node is down for a week, you’ll be penalized with a 0.3% loss which is 0.096 ETH of the 32 ETH needed to solo stake. That is $134 at Ethereum’s peak price of $1,400. This is different from being slashed should your validator vote twice or there is an extreme situation as in with the Medalla testnet. The minimum slashing is 1 ETH with a maximum of 16 ETH which is $1,400 or $22,400 at peak price. I personally think Ethereum will reach new all time highs over the next 7 phases of ETH 2 development so creating redundancy may be optimal for you.
Download the software
Download DappNode OS. While that downloads, install Etcher or your preferred way of burning system images. Plug in a USB drive that you are OK with the contents being erased. Open Etcher, click Select Image to select the DappNode file you just downloaded. Click flash and while that is installing, let’s set up the computer.
Setting up the computer
Setting up a NUC couldn’t be easier. Unscrew the bottom of the unit, slide in your SSD or screw in your hard drive if you bought an M2 SSD.
Next you’ll install the RAM. Hold it by the sides so the oils from your hands don’t get on the gold tips that transmit data. You can slide in your RAM into the bottom slot, press downward, and you’ll hear a click if you put it in securely. If you bought two RAM chips for redundancy like I did, slide the second one into the top slot.
Screw it all back together, plug in the power source, plug in the ethernet cable to the back of your router, hook up the monitor, and we can boot up the operating system. You can use wifi if you prefer but since staking is all about up time, I recommend using an ethernet cable to ensure you have the best connection and don’t miss any blocks.
Once you plug the device into the back of the router, plug in a desktop monitor, and a keyboard. Again, you won’t need these full time, this is only to set up the device. Plug in the USB that you burned Dappnode OS on and turn on the device. You will see a screen with some writing on it and then you’ll get to a series of questions.
- Select a language — Language: [English or your native language]
- Select your location — Country, territory or area: [United States or your own country]
- Configure the keyboard — Keymap to use? [American English or your own]
- Configure the network — Hostname: [dappnode]
- Set up users and passwords — Root password: [Leave blank (twice)]
- Set up users and passwords — Username for your account: [dappnode]
- Set up users and passwords Choose a password for the new user: [Your own password]
- Set up users and passwords — Re-enter password to verify: [Confirm the password you created]
- Configure the clock — Select your time zone: [Select your own region]
- Partition disk — Partitioning method: [Guided — use entire disk and set up LVM]
- Partition disk — Select disk to partition: [SCSIX (0,0,0) (sda) — your hard drive brand and size]
- Partition disk — Selected for partitioning: [All files in one partition]
- Partition disk — Write the changes to disks and configure LVM? [Yes]
- Partition disk — Amount of volume group to use for guided partitioning: [Continue]
- Partition disk — Write the changes to disks? [Yes]
- Install the GRUB boot loader on a hard disk — Install the GRUB boot loader to the master boot record? [Yes]
- Install the GRUB boot loader on a hard disk — [/dev/sda your band of hard drive and size]
- Your public IP — [Unless you have a fixed IP leave it blank]
- Finish the installation — Installation complete [continue]
Once you go through the set up it will need to reboot. Remove the USB and it should boot up on its own. You should get to a black screen that will tell you to your user name and password. Go ahead and enter that and it will take you to another screen that tells you to enter: dappnode_connect
It will take a moment to process but while it does, download OpenVPN on any device that you want to check in on your node from remotely. I highly encourage you to download it on both your laptop/desktop as well as your phone. This way you can always check on your node in case something goes wrong in the Ethereum space or there is something minor such as a wifi outage.
By this time you will see a giant QR code on the monitor. Open the camera app on your phone, hold it up to the QR code and scan it. This will take you a page where you can download the VPN file. Download the file and open the OpenVPN app on your phone. Press the plus sign, click file, then import the file you downloaded. This allows you to securely log into the device while not being on the same wifi network. Repeat the same steps for your laptop or desktop as well. Please note that file allows you to log in remotely so please be mindful of how you get the file from your phone to another device and how you store the file in general. I’d advise against leaving it in your email and if you leave it in iCloud, Google Drive, or any other cloud storage provider, make sure you have a strong password and 2FA set up. If anyone gains access to that file, they can access your node remotely. Once it is downloaded, you can press Go to my.dappnode which will take you to the dashboard of the device.
One important thing you should do is change a BIOS setting. Restart the device and go into the Intel settings. Move over to the right where it says “power” and then in the secondary power settings change the After Power Failure mode to “Power On.” This is to ensure if you have a power outage, your device will automatically turn back on and your node will resume staking. If you do not do this step, you will have to always manually turn your device back on after a power outage. Save your settings and then test it by unplugging the device and plugging it back in. It should power back on automatically and once you have reached the Dappnode dashboard successfully after your simulated power outage, you are all done with the physical set up. You can put your computer monitor and keyboard back and clean up anything else. Your node needs to remain on so keep it somewhere out of sight but reachable should you need to do anything with it in the future.
Set Up Your Ethereum Node
In order to start start staking, you’ll need to download the Ethereum blockchain also known as an ETH1 client.
Mainnet: Download Geth, TurboGeth, Nethermind, or OpenEthereum if you want to do this on mainnet. A full node on mainnet will take about 24 to 48 hours to fully sync depending on your internet speed. You can use a light client or remote node, use Infura. This is a good option if you did not buy a large SSD but remember, if you rely on another company for the data 1. if that company has a server outage, your node will not validate and 2. because it will take a little longer to get your validator data because you are effectively streaming your ETH1 node, you will most likely have a worse attestation performance.
Testnet: Download Georli Geth if you want to do this on testnet which will fully sync in a few hours.
Set Up The Beacon Chain And Pick A Validator
Testnet: Install the Pyrmont Validator in the dappstore. The only available client as of this update (11/28/20) is Prysm.
Mainnet: The only available client as of this update (11/28/20) is Prysm. If you would like to use Prysm feel free to download this now. The client teams said they would release mainnet ready version the week leading up to mainnet. I would guess the dappnode team should have the packages ready in the dappstore within a few days of at least two client teams releasing final software. Look each day as it leads up to genesis.
If you don’t have Metamask installed, I would install it for ease of use but if not use your preferred wallet.
Testnet: Switch the network over to the Goerli testnet, copy your ethereum address, then head over to the Goerli Faucet to get some free testnet ether by posting on Twitter or Facebook. Click on “Give Me Ether” so you can get the 32 ether needed for the deposit as it defaults to 14 ether. Head over to the Pyrmont Launchpad and follow the steps.
Mainnet: Have your 32 ether ready to go in Metamask or your hardware wallet plugged into Metamask. You cannot use an exchange for this. Go to Mainnet Launchpad and go through each step. I know mainnet is ready but I would recommend testnet to familiarize yourself with the risks involved with staking to see if you are psychologically willing to go through with this on mainnet. It will ask you how many validators you want to run (32 ETH per validator) and then give you instructions on how to set it up based on your computer’s operating system. Download the command line tool for your operating system and paste in the command based on your operating system. Copy after the OS:
Pyrmont for testnet OR mainnet for mainnet. Do NOT type pyrmont/mainnet.
For Linux: ./deposit new-mnemonic — chain pyrmont/mainnet
For Windows: .\deposit.exe new-mnemonic — chain pyrmont/mainnet
For MacOS: ./deposit new-mnemonic — chain pyrmont/mainnet
You will need to type in:
How many validators do you want to run:1
Language: English or your native language
Password: Your own password. Do not lose this or you won’t be able to retrieve your funds. There is no reset password.
Password confirmation: retype your password
This will generate a new 24 word seed to create your validator keys as well as your signing keys. Write these down as you will need these if something goes wrong to retrieve your funds. On the next step you will need to type in those 24 words in order to generate your keys. Once your keys are generated, go back to the Launchpad tab, scroll to the bottom, and move to the next page.
You will be asked to upload your deposit data file. In the folder that you just downloaded to get to the command line interface you will see two files in the folder labeled validator keys: One says deposit data and the other says keystore. Upload the deposit data and click continue.
Connect your wallet through Metamask or another choice. If you are in Brave, you’ll need to disable the shields or Metamask won’t connect. Make sure you are still on the Goerli testnet and you should see your wallet that you sent the faucet ETH to a while ago.
You’ll see the last bit of warnings. TAKE THESE SERIOUSLY. I know it is a testnet but pretend this is real. That is why you are running the testnet in the first place. This is going to be a 2 year commitment so don’t YOLO into it.
You’ll go to the final transaction screen. Press Initiate the Transaction and Metamask will pop up with the window to send your 32 testnet ETH.
If you are doing this on mainnet, the deposit contract is
0x00000000219ab540356cBB839Cbe05303d7705Fa. There is ONLY ONE deposit contract. Scammers will absolutely tell you there are multiple. I linked to the Ethereum blog for a reason. There is only one. Also, follow the instructions in the Launchpad. Do not send your ether directly to the contract itself or it will be lost forever. This happens every day. The Launchpad will initiate it correctly for you so you do not waste your ether.
TADA. I know, super lackluster right? Now for some more lackluster stuff to do before you can actually start staking. Go back to DappNode, click packages, then click on your validator package. It’ll open a new tab. Click on import, go to the file you downloaded earlier with the deposit and keystore files. This time you’ll upload the keystore file. Enter the password to the keystore files when you were in the command line and then click import validator.
Go back to the dashboard in the same tab and you’ll see your 32 ETH balance, some node stats, and your ETH2 pubkey and your deposit transaction. Click on the arrow next to the pub key and you’ll see your deposit in the validator queue. As soon as you are through the queue, you’ll be officially staking on ETH2. Your time will vary. I set this up early on and it took 12 days. Others are able to get it in within a few hours now.
This is a testnet so I would highly encourage to press every red button you see because nothing bad will happen with testnet ether.
- Unplug your device and power it back. Did it resync on its own?
- Plug the device into a friend’s router. This needs to be up and running for 2 years. The chances of you buying a new router is fairly high. Is everything OK on a new network?
- Get familiar with attestations and how to improve your score. You may want to try and connect to more peers or get a better router or improved ISP now.
- Ask yourself why you’re doing this. Is it to help dentralize Ethereum and jumpstart the network or are you looking to make a profit. If it is financially motivated, do these returns cover the cost of the node and the best bank for your gwei.
- Do anything you can possibly think of now while you still can. Please DM me for other tests and suggestions.
I’ll preface this entire section by saying that as long as you are online at least 50% of the time, you should break even if not return a profit. Most people starting out confuse being penalized vs being slashed. Odds are you aren’t a malicious actor so you don’t need to worry about being slashed. However, you may want to worry about something as common as a power outage. A lot of telecommunication companies still provide internet and phone service during a power outage. Unfortunately most people don’t have their modems or routers plugged into a backup power source to notice. If your internet service provider is one of these, all you need is backup battery. Please note that if your power goes out and you spend your time streaming Netflix, your power source will die and your node will go offline anyway.
If your internet service provider isn’t one of those companies or you don’t know, you could get the same effect with an old phone and a pre-paid or data only SIM card. You can use your old phone as a wifi hotspot and your node may or may not be able to keep up with the head of the chain, but your penalties will be much lower than if you were offline entirely. I suggest a pre-paid or data only SIM so you don’t need to pay a monthly bill on a phone you aren’t using. You can go to Best Buy, Target, or any number of stores and buy a few GB of data just in case or get a free SIM from Google Fi and they will only charge you the data if you use it. When your power goes out, your node will still be online. You can turn on your old phone, turn on the hotspot, connect the DappNode to the wifi hotspot and you are good to go with only 5 minutes of downtime tops.
The good thing about all three of these things is that you most likely have an old cell phone laying around and a battery and SIM card can be purchased and set up within the hour if needed. You could also use your current cell phone as a hotspot but I don’t want to recommend draining your primary device in case you need it and it is an emergency.