Running your own Ethereum node

I’ve been interested in running my own Ethereum node for a few months. So recently, I started doing some research, ordered the hardware, settled on a client, and got one running. There was some issues I ran into during the process, but overall it wasn’t too difficult. I wanted to write about my experience and hopefully sway people into running their own.

Types of nodes

There’s a few different types that you can run. Note that these are different from miners and validators. There’s no financial incentive to run these, but they are critical infrastructure for the network. I ended up running a full node.

  • Archive - stores the full blockchain data. Useful for querying historical data, probably not very practical to run one these yourself.

  • Full - participates in block validation. Can store the full blockchain data, but is usually pruned.

  • Light - does not participate in block validation. Stores only block headers (information about what’s in the block), and requests additional data from full nodes.

Why run your own node?

As mentioned above, nodes are a critical piece of infrastructure. I wanted to run my own node so I could help decentralize the network. There’s also the added benefit of not having to rely on third party information about the state of the network. I can query my own local node to get information that I know is accurate. It was also a fun learning experience going through the process.

Hardware

I ordered a barebones Intel NUC (no operating system, hard drive, or memory) for maximum fun 😅

If you’re going to run a full node, the minimum for a processor is 4 cores and 16GB of memory. For storage, make sure you get an SSD, on initial sync there is a lot of read/write operations that an HHD might not be able to handle. The initial sync used about 400GB for me.

To install an OS, I created an Ubuntu bootable USB drive. I won’t go into all the details here, the Ubuntu docs for how to do this are good.

Hardware: Intel NUC w/ 4-core i5, 16GB DDR4 RAM and a 1 TB SSD
Hardware: Intel NUC w/ 4-core i5, 16GB DDR4 RAM and a 1 TB SSD

If piecing together your own hardware isn’t your thing, there are off the shelf solutions like DAppNode that are plug and play solutions, though the cost is a lot higher.

Choosing a client

Client diversity is important in the Ethereum ecosystem. Having multiple clients can help protect against critical bugs and attacks. If there are multiple clients, an exploit found in one client may not exist in another. The most popular client is Geth, by a large margin, running on over 80% of nodes. I wanted to help improve diversity and choose a minority client. I eventually settled on Nethermind, which is a C#/.NET implementation. Nethermind is currently at 2% at the time of this writing. See ethernodes.org for a complete breakdown of client distribution.

https://ethernodes.org

Ultimately whichever client you end up running is up to, but it’s important to get an equal distribution of client implementations across the network for maximum security.

The sync

When I was first going through the Nethermind docs, I started configuring the client to run as a service. I was running into issues with not having the right dependencies installed. After a few more failed attempts, I saw there was a Docker image available, so I just ended up running a containerized version; no need to worry about installing the required dependencies.

I ended up syncing a few times as I was messing around with different configurations, but it took about 15 hours for a full sync each time.

Next steps

I’m still trying to understand all of the different configurations that are available, and Nethermind has some cool metrics supported with Grafana and Prometheus that I’m going to explore next. I’m planning on doing a follow up once I figure out all of the cool things I can do 🙂