I’ve been interested in running an Ethereum node for a while now. Not because I don’t trust RPC companies (eg. Infura) or to make money, but because I want to break the abstraction of what exactly being part of a distributed system means. With proof of stake, you can also already earn money (albeit less and with some trust assumptions) from staking your ETH with an existing validator pool.
Also, I was going to be home for at least a month so thought it’d be a good time to do it. In a series of posts, I’ll share my experience.
Reasons to run a node
- Learning (break those damn abstractions)!
- Make money!
- A common question is how much can I make? It will be more than simply staking, but I haven’t figured out how to accurately calculate this. There is this tool: rocketpooltool.com
- Privacy
- When you use a public RPC, you send your IP address + wallet address
- Censorship resistance
- A public RPC could block your transaction
- Strengthen the network
- More nodes means the network is more resilient to failures
- Trust
- When you use a public RPC, you rely on them giving you the correct information eg. your wallet balance
- With your own copy of the chain, you can verify for yourself
- Voting
- In the event of a fork, you can directly vote which fork to go with based on what chain your node continues to build on
Do you need ETH to run a node? No! But this also means you won’t make any money. To make money, you need to stake ETH. All other reasons to run a node apply.
Do I need specialized hardware? No! You can run an Ethereum node on your laptop, desktop PC, or even a Raspberry Pi. All major operating systems are supported - Linux, MacOS, Windows.
Okay. You’re convinced you want to run a node even if not to become a validator and earn money, but just to join the network.
0. Pre-req
You can provision hardware in the cloud (or buy preconfigured machines) and use that to run a node, but I decided to use my own hardware. The cloud and preconfigured machines would only add more abstractions and I saw the hardware as an investment I could use for other things in the future as well (eg home file server).
To run a node at home, you need to consider the following:
- Physical space
- A desktop PC (personal computer) doesn’t take up that much space nor is that loud
- I’ve kept mine in the basement where its also relatively colder
- Network
- You need an ethernet connection, and your wifi plan should support unlimited data
- We were already on the unlimited data plan from our internet provider
- Power
- If you’re going to be a validator, you want stable power, ie few outages
- You should also consider the added cost of keeping a PC running 24/7
- Where I live, there are very few outages, and the electricity costs also marginal
- Solar is also popular here which greatly reduces the cost
1. Acquire Necessary Hardware
Here are the recommended specifications from the Ethereum Foundation:
- Fast CPU with 4+ cores
- 16 GB+ RAM
- Fast SSD with 2+TB
- 25+ MBit/s bandwidth
RocketPool also has an excellent guide on picking the hardware and even examples of what other node operators are using. This was my main point of reference.
We’re essentially building a PC here, so here are the main parts we need to get:
- CPU
- Memory
- Storage
At first I considered getting a NUC for the size convenience but decided against it, because if any of the parts inside fail, you have to replace the entire thing.
We don’t need a good video card (ie GPU) as nothing is computationally expensive here. It’s more just disk intensive as a lot of reads and writes are happening.
I ended up going with the following configuration from a local computer store, Memory Express:
- Motherboard: MSI Board
- PRO B760M-A WIFI DDR4 w/ DDR4-5333 (OC), 7.1 Audio, Dual M.2, 2.5G LAN, Wi-Fi 6E, Bluetooth 5.3
- I wanted one with
- at least 4 memory slots, 2 SSD slots, and a couple other HDD slots so I could expand in the future
- wifi + bluetooth
- $189.99
- CPU: Intel i5, 10 core, 2.50 GHz processor
- CoreTM i5-14400 Processor w/ 10 (6P+4E) Cores / 16 Threads, up to 4.7GHz
- supports the BMI2 extension as recommended by RocketPool
- $259.99
- Memory: 32GB DDR4 RAM
- Storage: 4TB SSD
- Samsung 990 PRO PCIe 4.0 NVMe SSD, 4TB
- MLC drive
- 4GB DRAM cache
- 22K Read IOPS
- 80K Write IOPS
- Rocketpool recommended:
- 2+ TB NVMes SSDs
- with a DRAM cache
- 5K Read IOPS, 5K Write IOPS
- TLC, MLC, or SLC drives. Do not recommend QLC drives
- didn't end up getting a heatsink as the motherboard already came with one and the Memory Express folks mentioned it wasn’t really needed
- $399.99
- Samsung 990 PRO PCIe 4.0 NVMe SSD, 4TB
- Power Supply
- MAG A650BN 80 Plus Bronze Power Supply, 650W w/ 16 Pin
- This was just what the Memory Express folks recommended
- I didn't get an uninterruptable power supply (UPS) in case of a power outage, as those are rare in my area
- $79.99
- Case
- Cooler Master Q300L V2 Micro ATX Case, Black w/ Tempered Glass Panel
- Wanted one with a glass panel because it looked cool
- Also got an extra fan installed since this case only came with one
- $69.99 + $14.99 for the fan
- Assembly Fee
- Yes, I paid to have them assemble it (was quite cheap). Hey look, I’m a software engineer, I know how to use a terminal not a screw driver, and didn’t want to accidentally static charge anything or bend some expensive pin
- $50.00
I ended up buying this during the Boxing Week sales, so the total came out to ~$1,200 CAD with taxes and all.
2. Setup OS
I had to wait a couple of business days for them to assemble it and then picked it up!
Connected a monitor with HDMI, a keyboard and mouse with USB, and turned it on! Since no OS had been installed, only the BIOS loaded and I made sure everything was showing properly.
I was planning on using this hardware to solely run a node, so ended up going with Linux. Specifically chose Ubuntu Server because I was familiar with Ubuntu from past work, it has a good community, and didn’t need a GUI.
- Downloaded the Ubuntu Server ISO image from the official website: ubuntu.com/download/server
- Latest version was
24.04.1 LTS
, which was a 2.6 GB ISO file.
- Latest version was
- Created a bootable USB flash drive with balenaEtcher
- Plugged in the USB into the PC and rebooted it
- Followed the on-screen Ubuntu installation instructions
- I didn't partition the SSD as I wanted to use it fully for the node
- I didn't encrypt the drive as I wouldn't be storing sensitive data on this machine and wasnt going to be travelling with it
- The computational overhead for encryption is not high, but there is an extra step in SSH to ensure the PC is unlocked in case of a restart
Once the installation was complete, I got the prompt to unplug the USB and restart it. It loaded and I was able to login. I also tested connecting via SSH from my personal laptop and it worked! Hooray!
At this point I wanted to move the PC to the basement but had a couple of things left to do so that I never have to be physically present at the PC.
- When the PC restarts, I want it to have the same IP
- Reserved an IP from my router's admin page under the DHCP Reservation section under LAN settings
- I want to be able to SSH into the PC from outside of my house too, but will set that up later
- If an outage happens, I want the PC to auto restart and load the OS automatically
- Updated my BIOS/UEFI Power Settings:
- Restore after AC Power Loss: [Power On]
- Edited the GRUB menu in Linux to auto select Ubuntu on startup:
sudo vi /etc/default/grub
- Set
GRUB_DEFAULT=0
- Set
GRUB_TIMEOUT=2
- Save and exit
- Run
sudo update-grub
- Reboot the PC
- Updated my BIOS/UEFI Power Settings:
That’s it for this part! Below is the PC in its final resting place.