Since I’ve upgraded to a 12th gen mainboard, I thought I could use my 11th gen as a server of some kind. Since I also upgraded the RAM and the SSD, I actually had everything needed to create a new machine.
As a blockchain enthusiast, I thought a Framework mainboard would be a very good candidate for an Ethereum node:
- Thanks to USB-C (and the battery connector), there is solid PSU support.
- The CPU/RAM/SSD spare parts I had from previous upgrades all fit the requirements.
- The new mainboard case made it easy to secure the mainboard.
TL;DR
I used Framework spare parts to build an Ethereum full node so you don’t have to. And it works great.
Hardware
Everything is available on the Framework marketplace, mainly because all of it (except the case which I bought specially for this) is made of spare parts from my previous Framework laptop iterations:
Total time to set it all up: <1 hour.
Software
- A docker-compose stack for the Ethereum node:
- Besu as the Ethereum execution client
- Lighthouse as the Ethereum concensus client
- Another docker-compose stack for monitoring:
- Grafana for dashboards (see below)
- Prometheus for time series
- Loki + Promtail for logs
-
Ansible to automate:
- The general setup of the machine (installing docker, docker-compose, securing the SSH connection…).
- The deployment/update of the 2 docker-compose stacks.
I chose Besu because:
- It does not have a big market share, so it’s good for decentralization.
- It does not require periodic pruning of it’s internal database. So it’s low maintenance: run and forget.
I chose Lighthouse because:
- It’s written in Rust. And as both a C/C++ and a Rust developer myself, I value the safety and modernity brought by Rust.
- It’s not the #1 market share holder, so it’s good for decentralization too.
Total time to write the playbook and automate everything: half a day.
Syncing the Ethereum blockchain
Before a node is operational, the entire blockchain must be synced. Which means 8 years of blocks/transactions that must be re-played. One. By. One.
Fortunately, both Besu and Lighthouse provide snap/fast syncing that leverage existing snapshots.
Still, Besu had ~14 million blocks to sync. Which took ~2 days. It might seam like a long time, but it’s actually very decent (some setups take up to 10 days, others never actually catch up…) with ~15ms per block (~1000x the “normal” block time).
The whole chain takes ~1.2TB (for 8 years of transactions):
And the sync process took 40-60% continuously during the 2 days:
Now since the thermals aren’t that good on the 11th gen mainboard, the fans were quite loud during those 2 days:
But no throttling as far as I can tell:
The gaps in the charts above are actually caused by me powering off the node and moving it to another room so I did not have to sleep with the fan spinning and making too much noise.
Running the node
When the sync was done, CPU decreases to ~15%, and the setup is perfectly silent now with a ~40C temperature:
Next steps
- PSU using an USB-C battery
- Off-grid power using solar panels
- Connectivity using a battery/solar powered LTE connection