Nethermind
Overview
Official Links
1. Initial configuration
Create a service user for the execution service, create data directory and assign ownership.
sudo adduser --system --no-create-home --group execution
sudo mkdir -p /var/lib/nethermind
sudo chown -R execution:execution /var/lib/nethermind
Install dependencies.
sudo apt update
sudo apt install ccze curl libsnappy-dev libc6-dev jq libc6 unzip -y
2. Install Binaries
Downloading binaries is often faster and more convenient.
Building from source code can offer better compatibility and is more aligned with the spirit of FOSS (free open source software).
3. Setup and configure systemd
Create a systemd unit file to define your execution.service
configuration.
sudo nano /etc/systemd/system/execution.service
Paste the following configuration into the file.
[Unit]
Description=Nethermind Execution Layer Client service for Holesky
Wants=network-online.target
After=network-online.target
Documentation=https://www.coincashew.com
[Service]
Type=simple
User=execution
Group=execution
Restart=always
RestartSec=3
KillSignal=SIGINT
TimeoutStopSec=900
WorkingDirectory=/var/lib/nethermind
Environment="DOTNET_BUNDLE_EXTRACT_BASE_DIR=/var/lib/nethermind"
ExecStart=/usr/local/bin/nethermind/nethermind \
--config holesky \
--datadir="/var/lib/nethermind" \
--Network.DiscoveryPort 30303 \
--Network.P2PPort 30303 \
--Network.MaxActivePeers 50 \
--JsonRpc.Port 8545 \
--JsonRpc.EnginePort 8551 \
--Metrics.Enabled true \
--Metrics.ExposePort 6060 \
--JsonRpc.JwtSecretFile /secrets/jwtsecret \
--Pruning.Mode=Hybrid \
--Pruning.FullPruningTrigger=VolumeFreeSpace \
--Pruning.FullPruningThresholdMb=300000
[Install]
WantedBy=multi-user.target
To exit and save, press Ctrl
+ X
, then Y
, then Enter
.
Run the following to enable auto-start at boot time.
sudo systemctl daemon-reload
sudo systemctl enable execution
Finally, start your execution layer client and check it's status.
sudo systemctl start execution
sudo systemctl status execution
Press Ctrl
+ C
to exit the status.
4. Helpful execution client commands
sudo journalctl -fu execution | ccze
A properly functioning Nethermind execution client will indicate "Received new block". For example,
Nethermind.Runner[2]: 29 Sep 03:00:00 | Received new block: 8372 (0x425ab9...854f4)
Nethermind.Runner[2]: 29 Sep 03:00:00 | Processed 8372 | 0.17 ms | slot 13,001 ms |
Nethermind.Runner[2]: 29 Sep 03:00:00 | - Block 0.00 MGas | 0 txs | calls 0 ( 0) | sload 0 | sstore 0 | create 0
Nethermind.Runner[2]: 29 Sep 03:00:00 | - Block throughput 0.00 MGas/s | 0.00 t/s | 7217.16 Blk/s | recv 0 | proc 0
Nethermind.Runner[2]: 29 Sep 03:00:00 | Received ForkChoice: Head: 8372 (0x425ab9...854f4), Safe: 8350 (0xfd781...c2e19f), Finalized: 8332 (0x9ccf...88684c)
Nethermind.Runner[2]: 29 Sep 03:00:00 | Synced chain Head to 8372 (0x425ab9...2881a5)
Now that your execution client is configured and started, proceed to the next step on setting up your consensus client.
If you're checking the logs and see any warnings or errors, please be patient as these will normally resolve once both your execution and consensus clients are fully synced to the Ethereum network.