# How to Run a Full ETH Node on Windows

By [ETHKL](https://paragraph.com/@ethkl) · 2022-09-07

---

From soon 🔜, to very soon to **now**, the Ethereum Merge has finally been estimated to happen on [September 16th](https://bordel.wtf/), a coming-of-age upgrade to transition to [Proof of Stake](https://ethereum.org/en/upgrades/merge/), reducing Ethereum’s energy consumption by ~99%.

Running a node now consists of 2 separate software for the **execution layer** and **consensus layer**, hence the adorable [panda meme.](https://twitter.com/icebearhww/status/1431970802040127498)

> This is a **Windows** aimed guide, using [Geth](https://geth.ethereum.org/) for execution and [Lighthouse](https://github.com/sigp/lighthouse) as consensus.

The Fine Print
--------------

At least according to [Ethereum.org](https://ethereum.org/en/developers/docs/nodes-and-clients/run-a-node/#requirements) :

Recommended specifications

*   Fast CPU with 4+ cores
    
*   16 GB+ RAM
    
*   Fast SSD with 1+TB
    
*   25+ MBit/s bandwidth
    

It also goes without saying that there will be some command line involved, so being technical as in having written “_hello world_” in any language is a nice-have.

Housekeeping
------------

To keep layers and data locations organized, we’ll create a folder named `ethereum` in any directory such as the C:// drive.

Inside of it, create 2 folders namely `execution` and `consensus`, your final folder structure looks like this.

![](https://storage.googleapis.com/papyrus_images/241ac3c38b8d2ed6054eccdc0f75d0bfbc1203a6faf03d959f27eb90dc429ae5.png)

Execution Layer
---------------

Good ol’ [Go Ethereum](https://geth.ethereum.org/) ( Geth ) remains a popular choice, due to extensive documentation and community support.

Head over to the [downloads](https://geth.ethereum.org/downloads/) page, and get the `64-bit archive` which you can then paste into your `execution` folder.

![](https://storage.googleapis.com/papyrus_images/c2e98a5c3f0535faa60957b2a1344179856844697648204072d9e1e8453210ac.png)

Start Geth on mainnet using the following command.

    geth --datadir "C:\ethereum\execution\mainnet" --http --authrpc.jwtsecret jwtsecret
    

The flags used are as follows, there is definitely [much more](https://geth.ethereum.org/docs/) you can nitpick on performance :

*   \--datadir : the location to store chain data, placed in the same folder for easy tracking
    
*   \--http : enable the HTTP server, which can be used for connections to apps such as Metamask
    
*   \--authrpc.jwtsecret : generates a new password file called `jwtsecret` for connecting with the consensus client later
    

A _green hacker matrix_ starts to fill the command prompt, and as long as you see that you’ve started on _“mainnet”_ and you’re _“importing new chain segments”_, your node is starting to sync.

![](https://storage.googleapis.com/papyrus_images/d44b324f2335e4c7288fe4a8fee6ec89c462f528893e0530122a77ae0940e5aa.png)

You can periodically check its sync status by opening another command prompt and connecting to the [Geth JavaScript](https://geth.ethereum.org/docs/interface/javascript-console) console.

    geth attach http://localhost:8545
    

You can then run any of the [JSON-RPC](https://ethereum.github.io/execution-apis/api-documentation/) commands such as to check an address’s ETH balance, get the current block number, or in this case check if your node has synced.

    eth.syncing
    

A response of `false` indicates that your node is in sync, and any other response indicates that you’re still syncing, and how many blocks you have to go.

In this case, we’re 53,292 blocks away with the `currentBlock` being 15399219 and the `highestBlock` being 15452511, referencing [Etherscan](https://etherscan.io/).

![](https://storage.googleapis.com/papyrus_images/e826d7e48fb0e42e7bf7c524cc53ed826dd4f5771c1ae51764585d539214b3e2.png)

Consensus Layer
---------------

The pairing we’ve chosen for consensus would be [Lighthouse](https://lighthouse-book.sigmaprime.io/intro.html), which you can [download](https://github.com/sigp/lighthouse/releases) the `x86_64-windows.tar.gz` and paste it into your `consensus` folder.

![](https://storage.googleapis.com/papyrus_images/52ac9045b2e7736b2a9ec17e93919f788f2b425dff40bc55d8260ecb5cd678eb.png)

Extract the zipped executable using any tool such as [7zip](https://www.7-zip.org/) or [Winrar](https://www.win-rar.com).

The connection between the execution and consensus layer nodes are password protected by something called a `jwtsecret`, which we’ve generated from Geth earlier.

Copy that file over into your `consensus` folder, which should leave you with the `lighouse.exe` application and the `jwtsecret` file.

![](https://storage.googleapis.com/papyrus_images/7a1668f265c4ebdded4f6d6f734979b30f7a97294b4bca951050d2e3f7d49ca6.png)

Begin syncing your consensus node with the following command.

    lighthouse beacon_node --datadir "C:\ethereum\consensus\mainnet" --http --execution-endpoint http://localhost:8551 --execution-jwt jwtsecret --checkpoint-sync-url "https://beaconstate.ethstaker.cc"
    

An explanation of the flags used :

*   \--datadir : the location to store chain data, similar concept as above
    
*   \--http : enable the HTTP server
    
*   \--execution-endpoint : the password-protected endpoint for your consensus node to connect to the execution node
    
*   \--execution-jwt : the password for the endpoint, it has to be the same across both nodes
    
*   \--checkpoint-sync-url : optionally, perform the initial sync using [checkpoint-sync](https://lighthouse-book.sigmaprime.io/checkpoint-sync.html) to a fully synced consensus node such as from [EthStaker](https://eth-clients.github.io/checkpoint-sync-endpoints/).
    

![](https://storage.googleapis.com/papyrus_images/dc05c2077c0dd2181af22242019eba1b6714152db6dae09fe678f75c3434b25f.png)

You can check if your consensus node has synced and all other [API methods](https://ethereum.github.io/beacon-APIs/#/) by opening a new command prompt and using this command.

    curl "http://localhost:5052/lighthouse/syncing"
    

A message of `false` indicates that your node has synced, anything other than that such as `BackFillSyncing` indicates that you are still syncing.

In this case, using [checkpoint sync](https://notes.ethereum.org/@launchpad/checkpoint-sync) we have the latest block information, and currently backfilling historical blocks, referencing [Beaconscan](https://beaconscan.com/).

    {
       "data":{
          "BackFillSyncing":{
             "completed":2237056,
             "remaining":2404672
          }
       }
    }
    

Wrapping Up
-----------

Treat yourself to a collection of this post’s NFT if you’ve made it this far!

Though it may seem daunting to have to manage 2 different clients now, running your own node is the best way to safeguard against [censorship](https://twitter.com/TornadoCash/status/1557048526986780677), protect your [privacy](https://twitter.com/ethstatus/status/1362439368934359042) and contribute to the [network’s decentralisation](https://etherscan.io/nodetracker).

As for what comes next you might want to look at ways of using and interacting with your node!

---

*Originally published on [ETHKL](https://paragraph.com/@ethkl/how-to-run-a-full-eth-node-on-windows)*
