Getting Started with Nethermind on Windows

Nethermind is an Ethereum Client built on .NET Core. It is extremely fast and efficient.

Website
Github
Read The Docs

  1. Download Nethermind from the official page
    • For this tutorial I’m going to use D:\Nethermind\
    • I’m going to extract the latest version (1.3.2 as of writing) to D:\Nethermind\1.3.2\ in order to have a ‘fresh’ copy.
    • I’m then going to copy the contents to D:\Nethermind\Current\ as this will be my ‘working directory’.NethermindPath
  2. Create a folder for your custom config files
    • I’m going to use D:\Nethermind\MyConfig\
  3.  Create folders for your data (Database, Log, Keystore)
    • I’m going to use D:\Nethermind\MyData\
      MyDataPath
      NethermindFolders
  4. Populate your Config Folder with optional Static-Nodes
    • If you have other nodes on your network or wish to statically assign peers you can create or copy “static-nodes.json” from the D:\Nethermind\Current\Data folder. Then simply add your enodes.
  5. Generate your configuration file
    • The default config file is “mainnet.cfg” located in D:\Nethermind\Current\configs\ copy this file to your MyConfig folder
    • You will want to modify a few options at the very least, below is my config.

{
  "KeyStore": {
	"KeyStoreDirectory": "D:/Nethermind/MyData/KeyStore"
  },
  "Init": {
    "WebSocketsEnabled": true,
    "StoreReceipts" : true,
    "IsMining": false,
    "ChainSpecPath": "D:/Nethermind/Current/chainspec/foundation.json",
    "GenesisHash": "0xd4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3",
    "BaseDbPath": "D:/Nethermind/MyData/Database/Mainnet",
    "LogFileName": "D:/Nethermind/MyData/Log/Mainnet.log",
    "StaticNodesPath": "D:/Nethermind/MyConfig/static-nodes.json"
  },
  "Network": {
    "DiscoveryPort": 30303,
    "P2PPort": 30303,
    "ActivePeersMaxCount" : 100
  },
  "JsonRpc": {
    "Enabled": true,
    "Host": "127.0.0.1",
    "Port": 8545   
  },
  "Db": {
    "WriteBufferSize": 64000000,
    "WriteBufferNumber": 4,
    "BlockCacheSize": 1536000000,
    "CacheIndexAndFilterBlocks": true,
    "BlockInfosDbCacheIndexAndFilterBlocks": false
  },
  "Sync": {
    "FastSync": true,
    "PivotNumber" : 9000000,
    "PivotHash" : "0x388f34dd94b899f65bbd23006ee93d61434a2f2a57053c9870466d8e142960e3",
    "PivotTotalDifficulty" : "13014076996386893192616",
    "FastBlocks" : true,
    "DownloadBodiesInFastSync" : false,
    "DownloadReceiptsInFastSync" : false,
    "UseGethLimitsInFastBlocks" : true
  },
  "EthStats": {
    "Enabled": true,
    "Server": "wss://ethstats.net/api",
    "Name": "name",
    "Secret": "secret",
    "Contact": "my contact info"
  },
  "Metrics": {
    "NodeName": "Mainnet",
    "Enabled": false,
    "PushGatewayUrl": "http://localhost:9091/metrics",
    "IntervalSeconds": 5
  }
}

The key aspects/modifications from default here are:

Keystore:
"KeyStoreDirectory": "D:/Nethermind/MyData/KeyStore"

Init:
"WebSocketsEnabled": true
"ChainSpecPath": "D:/Nethermind/Current/chainspec/foundation.json"
"BaseDbPath": "D:/Nethermind/MyData/Database/Mainnet"
"LogFileName": "D:/Nethermind/MyData/Log/Mainnet.log"
"StaticNodesPath": "D:/Nethermind/MyConfig/static-nodes.json"

Network:
"ActivePeersMaxCount" : 100

JsonRpc:
"Enabled": true

EthStats:
"Enabled": true
"Server": "wss://ethstats.net/api"

KeyStoreDirectory will ensure that when you upgrade your software in the future, your node will retain the same “enodeId” which is beneficial for peering purposes.

WebSockets enables you to connect to your node via WebSockets which is generally better performance than the JSON RPC method, also enabled.

ChainSpecPath is required simply for unattended launching. This is ‘default’ for mainnet.

BaseDbPath, LogFileName, and StaticNodesPath are all custom locations allowing us to put this data anywhere we want instead of in the home directory of the app when it’s launched.

ActivePeersMaxCount is simply allowing us to connect to more peers, default is 25.

Ethstats is enabled and the Server is updated with the working server endpoint for ethstats.net. If you don’t have a secret, google how to find it 🙂

MyConfigPath

You’re now ready to run your node with the command:

D:\Nethermind\Current\Nethermind.Runner --config "D:\Nethermind\MyConfig\mainnet.cfg"

You can make a shortcut to run this command or you can even place this in Task Scheduler to auto-start at login.

The benefit of following this guide is that when the next version is released, say, 1.4.0, you’ll be able to simply over-write everything in D:\Nethermind\Current\ with the new version and relaunch using your custom config file.

Note that currently these are the defaults for mainnet:

 "DownloadBodiesInFastSync" : false,
 "DownloadReceiptsInFastSync" : false

It is recommended to keep an eye on the official config file for updates. While you can enable these, it will add significant time to the initial sync process. These will get downloaded in the background after the Fast Sync has completed.

One thought on “Getting Started with Nethermind on Windows

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.