a beginner's guide to solo staking

What This Guide Covers

Introduction »

The era of Proof-of-Stake (PoS) is beginning for Ethereum. Mining will come to an end within a year and staking Ether will be the way to participate in securing the Ethereum network. At this point, there are a few options for staking your ETH:

While Staking as a Service is convenient and makes sense for a lot of people, this page is about Solo Staking and decentralizing Ethereum. I'm practiced in using a combination of Geth and Prysm and the guide will only be covering that combination at this time.

Pros and Cons of Staking Solo »

Believe it or not, there aren't only benefits to staking ETH on your own. The process can be difficult to set up and maintain- but staking solo means that the return on your investment will be greater.

Benefits »

  • You are helping to decentralize and secure the Ethereum network
  • Nice APR, better than basically any bank. You can check the official current APR on the Ethereum Foundation's website
  • Learning is fun! Learning about how to run ETH1 nodes, the beaconchain, updates coming in etc. could be stressful if it is breaking but very fun and rewarding

Risks »

  • 32 ETH costs ~$100k right now- that’s a lot of money to be throwing into something
  • Staking is long-term investment and the value of ETH could fluctuate wildly. If value drops I can’t cash out. If value rises I can’t cash out. Your ETH will also be locked in the validator until Ethereum is upgraded
  • Running a validator for a long time could be difficult. Any downtime costs money and checking in on it requires vigilance

The Goal of ETHdecentralized »

This webpage is meant to help folx set up their own solo validator- running completely on hardware in their own home. When followed well, you are meant to understand what each process is doing and to be comfortable supporting a decentralized network while earning some interest on an asset that will (hopefully!) grow in value over time.

I took notes while setting up my own validator for fun and to help others. If you need help, feel free to message me on reddit at u/nuclear-falcon on Reddit or nuclearfalcon#5639 in the EthStaker Discord.

If you find this guide useful, feel free to tip me at 0x6a855a77CAcd4eAfE5e53987DF814C89A3c25538

Before You Begin »

Some Recommended Reading... »

What Staking Actually Entails »

If you went through the materials in the "Before You Begin" section you should already have a general idea of what staking entails. If you didn't, this is where we begin to get into the details.

Steps to Stake ETH »

  1. Secure funding (32 ETH)
  2. Read the Advisories at the Ethereum Foundation Launchpad
  3. Secure Hardware
  4. Choose your Software Stack
  5. Complete the Launchpad and "Stake" using your hardware on a Testnet
    1. Run an Testnet ETH1 node
    2. Run a Beacon Node
    3. Complete the Testnet Launchpad and Generate Validator Keys
    4. Enter into a Validator Contract on your Testnet
    5. Import the Validator Keys into your Validator Client
    6. Start your Validator Client
    7. Wait for Approval
  6. Harden your system on the Testnet!
    • Disconnect it from the internet
    • Reboot your PC
    • Set up Monitoring & Alerting
    • Turn off your ETH1 Testnet Node
    • Add an ETH1 Fallback Provider
    • Change your System Time
    • Test everything that would make you more comfortable doing the real thing
    • Run the Testnet for a month
  7. Tear your Testnet down
  8. Begin Staking on the Mainnet
    1. Run an ETH1 node
    2. Run a Beacon Node
    3. Complete the Launchpad and Generate Validator Keys
    4. Enter into a Validator Contract
    5. Import the Validator Keys into your Validator Client
    6. Start your Validator Client
    7. Wait for Approval
    8. Monitor your system like a hawk
  9. Congrats, you're earning interest and securing Ethereum in a true, decentralized fashion.

Staking Hardware »

Where Will You Stake? »

This might strike you as an odd question, but you should definitely ask yourself, "where can I stake long-term where I live?" Staking on hardware that you own means that it must be:

  • Turned on 24 hours a day
  • Have a stable internet connection 24 hours a day (with a lot of bandwidth)
  • Able to be updated and checked on easily- your machine can't be hidden away in some closet unless you feel comfortable with remote access

When I set my machine up, I decided a small device on top of my desk would be best. I have it hooked up to one of my monitor inputs and can swap to it at any time. I also have a keyboard and mouse tucked away that I can pull out at a moment's notice.

You will be working on this machine and checking in on it very often during the setup phase. Make sure it is super accessible and can be pulled up without much hassle. Where you decide to stake will influence your decision on your hardware's form-factor.

Hardware Research »

Staking ideally requires a dedicated machine. If your uptime is above ~50% you will come out even, but to make a good return on your investment you'll want to maximize the uptime and effectiveness of your validator.

There is a guide that was written on r/ethstaker that is fairly comprehensive about the hardware choices for staking. I was looking at this as a very long-term investment and tried to future-proof as much as possible.

On top of that guide (and thank you for it, LamboshiNakaghini!) there are the official hardware requirements from the Ethereum Foundation that are worth taking a look at.

For a brief overview of the recommended requirements shows us for an ETH1 node we'll need:

  • A "fast" CPU with 4+ cores
  • 16 GB+ of RAM
  • A "fast" SSD with at least 500 GB of free space
  • 25+ MBit/s bandwidth

With the added requirements of running a Beacon Node and a Validator, I would recommend a larger SSD and to not skimp on the CPU.

Hardware Decision »

Looking around my house I had a few paths I could go

  • The old desktop that's been sitting in one of my closets
  • A raspberry pi that's been sitting in a drawer
  • My day-to-day desktop that I use for gaming and projects
  • A new machine dedicated to staking

You might find yourself in a similar situation. The questions I asked myself that helped me make my final decision were "how long do I plan on doing this?" and "how can I make this as risk-averse as possible?"

My answers to the question were "a very, very long time" and "I need to acquire future-proof hardware that I'm comfortable with."

I landed on getting a NUC (Next Unit of Computing) from SimplyNUC that I customized to future-proof. When I'm putting down $60k (as of writing it is $73k to enter the contract) to run a validator that I plan on using for years, I figured I'd be ok dropping some money on a device that won't fail me. The small form-factor of the NUC allows me to sit it on my desk without it taking up any room and makes it easy to check on.

My Specs »

  • Intel® Core i7
  • 32 GB DDR4 Memory
  • 2 TB PCIe M.2 SSD
  • Windows 10 Pro
  • Small form factor (NUC11TZi7)

I decided to go with a strong CPU, a lot of memory (in case there are attacks on the network), a large SSD (the ETH1 node grows by about 1 GB/day), and Windows (because I am very comfortable on Windows).

These specs cost me $1,595.61 on and I ended up purchasing the NUC11TZi7 model with upgrades to the RAM and additional space on the SSD. I reached out to SimplyNUC and they are offering 5% off for anyone interested in staking on the Topaz i5 and i7 models with code ETH-STAKE at checkout.

I may have gone overboard on the specs, but worst case I can use this machine for other projects later or even resell it if it comes to that. I figured ~3% of my investment (ETH was trading at ~$1800 when I started staking) being spent on a machine that will last a minimum of 5 years would be worth it.

Staking Software »

There are a lot of combinations of software you can use to stake. You'll have to choose- at minimum- the following:

  • Operating System
  • ETH1 Client
  • ETH2 Client
For the purposes of this webpage, I'm going to give examples for what I'm most comfortable with. There are other options and the good news is if you follow the Ethereum Foundation Launchpad, you'll be exposed to all the available options! This guide will use the following:
  • Windows 10 Pro as an Operating System
  • Geth as an ETH1 Client
  • Prysm as an ETH2 Client

Your client choices really don't matter. In fact, if you use the most common configuration the network will- in theory- be less secure! If issues exist in a specific configuration and that configuration is popular, a higher proportion of the population is susceptible to those issues and that introduces risk. If you want to stake and have the technical know-how to do it using the docs without handholding, do it. That's the way to make Ethereum the most secure and the best way to know how to troubleshoot when you run into issues.

Go ahead and download Geth from the official website, and we'll start up an ETH1 client in the next section!

Testnet: ETH1 Client »

After installing Geth, pull up command prompt and enter the following command:

What you are doing here is entering command-line options for Geth. These options all together are:

  1. Starting GoEthereum (Geth) with
  2. Telling it to use the Goerli test network with
  3. Saying you want to download all of the blocks, verify all the headers, download the state, and verify the state against the headers with
  4. Enabling the HTTP server to open up the JSON-RPC API with

In order to run an ETH1 node, you have to sync it to your machine. This will take a while and will be using a lot of bandwidth and disk space. The "fast" syncmode allows you to do this much more quickly because you are downloading the state instead of generating it yourself. If you want to generate it yourself, you can use instead. is the default though and works just fine- and is actually faster.

When you run this command you'll see a lot of stuff going on in your command window. If you look at the first little bit you'll see the blockchain starting on the Goerli testnet, the HTTP-RPC opening up at , peers starting to be found and connected to, and finally chunks of blocks being downloaded.

If you look carefully, you might notice that the blocks will have an associated with them. Those blocks were generated that long ago and you're just catching up! Be patient because this can take a while- especically once you are on the Mainnet instead of the Testnet.

Once you're fully synced, move on to the next steps! If you move on beforehand it will still "work", but instead of downloading the beaconchain you'll be waiting for your ETH1 client to sync (and it will tell you that).

Testnet: ETH2 Client »

Installing Prysm »

Now on to the ETH2 client. We're using Prysm in this guide and installation instructions can be found here. Their instructions have you enter commands to accomplish a few tasks:

  1. Creating a folder and then navigating to that folder with . It will make that folder from your current location in command prompt. So remember that!
  2. Downloads the latest batch file from Prysmatic Labs' official Prysm GitHub repository and saves that file as "prysm.bat" in your current folder
  3. Adds a new entry to the registry under the current user's configured console defaults , names the value "VirtualTerminal Level" , and adds it ass a 32-bit number type with the data of "1" . NOTE: This last one isn't a super important thing to understand, and isn't unique to Prysm or ETH2 mining.

Prysm enables you to run a beacon node and a validator client. Great information about each of these can be found

Running a Beacon Node »

The Beacon Chain is a major part of the ETH2 upgrades. It introduces proof-of-stake to Ethereum, and conducts/coordinates the expanded network of shards and stakers. There are great articles linked from the link earlier in this paragraph that explain it super well. A Beacon Node is half of what you run locally to be able to help validate the Beacon Chain- the other half is the Validator Client. You don't have to completely understand the tech to run it on your machine, but it is good to read up on it because you're a part of it!

To run a beacon node on the Pyrmont testnet using Prysm:

  1. Have a synced ETH1 client (aka Geth) running on your machine and know its IP and port (default is http://localhost:8545)
  2. Navigate to the folder with your prysm.bat file in it and run
  3. Let the beacon-chain sync! This shouldn't take nearly as long as the ETH1 client

At this point, your beacon node should be running and you should be seeing each new slot come in every twelve seconds!

Testnet: The ETH2 Launchpad »

Before you can enter into a Validator Contract, you must complete The Official ETH2 Testnet Launchpad. You read that correctly, there is no other way to become a validator at this time. Anywhere that isn't the official launchpad is NOT trustworthy for depositing and entering the validator contract.

There are 10 advisories to read through and understand before you will then be guided through picking your ETH1 client, ETH2 client, and then you'll come to the new part: Generating Key Pairs.

Safely Generating Your Keys »

Intructions on how to generate your keys are only available after going through the advisories in the launchpad and are very comprehensive. These keys are what allow you to run a validator node, and the generated mneumonic is literally the only way to ever get your funds back. It is imperitive that you follow the instructions very carefully. We are using the Pyrmont testnet so you'll need to use the flag when using the eth2.0-deposit-cli.

The full instructions on how to generate your keys are available at the official github repository for the eth2.0-deposit-cli. Even if you read my explanations for what you're doing, I recommend you follow the instructions on the testnet launchpad "Generate Keys" step.

  1. Download (or build) the official eth2.0-deposit-cli
  2. Move those files to a flash drive onto an "airgapped" PC. This means a computer that has never been connected to the internet. If you have an old laptop or a desktop that you can use that is able to be booted from a disk or USB drive, that's ideal. The reason for this is to avoid the chance of anyone ever being able to generate your withdrawal keys using you mneumonic
  3. Open the command prompt and navigate to the folder containing the
  4. Run the following command to generate a new mneumonic for the Pyrmont Testnet
    where actually reflects the number of validators that you are going to fund- this guide assumes a single validator (32 ETH). If you have more than 1 validator double check that you are running commands correctly.
  5. Follow the instructions carefully and write down your mneumonic on a piece of paper. The mneumonic is literally the only way you can ever withdraw your funds and cannot be regenerated after creation. Protect it.

After running the deposit-cli program, you'll notice two new files in a new folder called in the same path as the deposit-cli. There will be a deposit and a keystore.

From the Launchpad on the Generate Keys page, you can read about each file:

Keystore »

"You should see that you have one keystore per validator. This keystore contains your signing key, encrypted with your password. You can use your mnemonic to generate your withdrawal key when you wish to withdraw."

Deposit »

"The other file you just generated is deposit_data.json. This file contains the public key(s) associated with your validator(s); You will need to upload this in the next step."

The last part of the launchpad is to actually deposit ETH and enter into the contract, that's covered in the next sections.

Testnet: Getting some Goerli Network "Test ETH" »

Because this is a Testnet, and not the Mainnet, we won't be using real Ether to enter the validator contract. You'll need to get some "Test ETH" for the Goerli Test Network (Goerli Testnet).

If you haven't already joined the official EthStaker Discord, now would be a great time to do so! Here is an invite link that should take you directly to the Goerli Request Channel.

At this point, you should also have downloaded MetaMask, a browser extention (and mobile app) that acts as a key vault, token wallet, and even an exchange. We're using it as a wallet.

  1. Go to the MetaMask plugin in your browser or on you mobile device
  2. Change the network to the Goerli Test Network
  3. Copy your wallet address
  4. Navigate to the #request-goerli-eth channel in the EthStaker Discord Server
  5. Type in . Obviously replace the wallet address with your own.
After waiting a few minutes, you should see your Test ETH come into your Goerli wallet on MetaMask!

Testnet: Making the Deposit »

A very nerve-wracking part of starting a validator is making the deposit. In our case we are on the Testnet, so no real money is transferring hands. (NOTE: Please make sure that you are on the testnet launchpad and your MetaMask wallet is on the Goerli Test Network!) But when we have finished the testnet steps and you're comfortable with everything, you'll be depositing tens of thousands of dollars worth of ETH into a contract. Make sure you do it correctly and follow instructions on the The Official ETH2 Testnet Launchpad!

Use the Pyrmont Testnet Launchpad and continue through the steps! You'll need to upload your deposit.json file that you generated in the section above labelled Safely Generating Your Keys to the Launchpad website and it will connect to your MetaMask wallet automatically, so the process is pretty simple. After you enter the contract, you'll need to complete the next section very soon afterwards to avoid losing your validator balance. Please keep that in mind and only enter the contract when you are ready!

Testnet: Importing Your Validator Accounts »

Importing your validator keys into your ETH2 client will allow the client to run your validator node and cast votes You'll be running Prysm again but instead of the Beacon Node you'll be running the Validator.

Make sure your ETH1 Node is running and fully synced, and that your Beacon Node is running and fully synced, then complete the following steps

  1. Navigate to the folder where your validator keys are stored in the file explorer and copy the filepath to your deposit keys .json file.
  2. Open command prompt and navigate to the folder containing the prysm.bat file.
  3. Run
  4. You'll be prompted to read Prysm's Term of Use and accept them.
If everything goes smoothly, you'll have a validator account set up and you'll be ready to run a Validator!

Testnet: Running Your Validator »

Your validator client is one of the three programs that you will always need to be running on your hardware. This program is what reads your voting (attestation) assignments, casts the votes, and in the end earns you interest for validating and securing Ethereum.

Make sure your ETH1 Node is running and fully synced, and that your Beacon Node is running and fully synced, then complete the following steps

  1. Open command prompt and navigate to the folder containing the prysm.bat file.
  2. Run
If you made your deposit fairly recently, it might take quite a while- multiple hours- to start getting assignments. The nodes in the ETH2 network have to process your deposit before you are able to attest.

Continue running your ETH1 Node, Beacon Node, and Validator and as soon as you are accepted your validator will automatically start casting votes!

The flag allows you to open up Prysm's web interface. Navigate to http://localhost:7500 on your machine and you'll see a pretty little web GUI that has some statistics about your validator. I recommend you explore it a bit and read up on it!

Because this is the first time you are running your validator client and you used the flag, you'll be prompted to create a wallet. Keep everything about that wallet safe! Anyone with access to it will be able to steal your 32 ETH once withdrawals are enabled.

Testnet: Congratulations! »

If you made it this far, you are successfully validating on the Goerli Testnet for ETH2! There are still things to do while on your testnet to practice before you go to the Mainnet, but take a breather, crack open a cold one, and watch your validator balance slowly go up.

Building Confidence & Reliability »

After setting up your ETH1 node, your beacon-chain, and your validator you should have 3 command prompts running on your machine and you should be validating on the Pyrmont Testnet! This doesn't mean your work is done or even that it will continue to work perfectly. There are drills you can put yourself through and safety nets you can prepare to save you a lot of headache should things go wrong.

The Drill and Reliability sections are important not to skip. Without completing these steps it is possible that you'll miss attestations and proposals due to unpreparedness. If you are confident and prepared, things are less likely to go wrong!

Drill: Disconnect Your System from the Internet »

One of the first things to try is to disconnect your hardware from the internet. Watch each of the command prompts and how they respond. Your ETH1 node and your beacon-chain will immediately lose their peers.

Leave your machine disconnected for at least an epoch (6.4 minutes) to make sure that you miss an attestation. You might even miss two depending on your slot assignments. Reconnect and watch what happens! You might notice your Geth process searching for peers, then downloading a few blocks with in the log (6m36s was just an example). This means that it is grabbing some older blocks just like the first time you synced.

Your beacon-chain process might have to wait for your ETH1 node to fully sync. It will need to apply state transitions before it can start showing the slots in order again.

The validator process will probably warn you that it is waiting for the beacon-chain to sync to the latest head, then start attesting as normal. These are all things that if you don't have a lot of experience with the command prompt you should try to get comfortable reading and finding this type of information in the big walls of text that each of the processes generate. Your ISP may disconnect or you might accidentally unplug the router someday and you'll need to understand what the impact of that is on your system.

This wasn't meant to be difficult at all, but was an example of something that you might experience and have to deal with. Did all of your processes actually recover? If they didn't you might need to reboot them! What are the warnings that are coming up? If you can't solve them on your own, you can ask for help in the official ethstaker Discord.

Drill: Reboot Your System »

A step of complexity above disconnecting your already-running system is to reboot your system. You will need to update Windows at least once every few weeks. Updates require a system restart and system restarts require you to cleanly turn off and start up your system.

To cleanly reboot your system follow these steps:

  1. Stop your validator process by clicking within the command prompt and pressing . It may ask you if you are sure and you'll need to type then press
  2. In the same fashion, stop your beacon-chain process
  3. Lastly you'll need to shut Geth down. Pressing one time is enough to shut it down, but to shut down cleanly and preserve your database it will take a minute. You will see output in the command prompt that says something along the lines of
    and you'll need to wait until it shows the input for command prompt shortly after the stopped message:
  4. After all the processes have been stopped, reboot your PC. Possibly installing updates in the process
  5. When you have rebooted, log back in and start up your 3 main programs in order:
    1. Geth
    2. Prysm beacon-chain
    3. Prysm validator
  6. Check that you are properly validating again by reading the output of your validator process, checking your Prysm web interface, or looking on a service like

You've now done it once and you'll eventually need to do it again! This is something that will need to happen ~once a month on Windows, so keep that in mind for any other programs that you need to run at startup that you might install. I'll be introducing other programs in the Reliability & Monitoring sections.

Coming Soon & WIP »

These are sections coming soon:

  • Site Navigation (will be simple) ✓
  • Editing for accuracy ✓ (checked, but ongoing! Message me on Discord (and join the official ethstaker Discord) at if you have comments or questions)
  • Reliability & Monitoring advice (currently working on)
  • Drills to run to prep for Mainnet (currently working on)
  • Changes to make Windows better for Staking (This is will be encompassed in the above sections)
  • Mainnet setup

Last Updated: May 21st, 2021