Working with a NodeNode

Non-Validator Node Setup

Set up a W Chain mainnet full node (RPC node) on node v1.0.8. It follows the chain and serves queries but does not produce blocks.

A Non-Validator Node follows the chain and verifies every block, but does not take part in consensus or produce blocks. Developers, dApps, exchanges and explorers use one to query the blockchain through their own RPC endpoint. No stake is needed.

Use node v1.0.8

Since block 24,630,300 (12 October 2026) the network runs the v1.0.8 consensus rules. Older versions can no longer follow the chain. Every command on this page uses v1.0.8.

Mainnet only

This guide is for mainnet. Testnet node packages for v1.0.8 are not published yet. If you need a testnet node, contact the W Chain team.

Already running a node on an older version?

Don't set up a new node. Follow the upgrade guide instead: it replaces the binary and genesis.json and keeps everything else. It is written for validators, but the steps are the same for any node.

Download the v1.0.8 upgrade guide (PDF)

Step 1: Prepare the System

Your machine must meet these minimums:

ResourceMinimum
vCPUs2 or more
Memory8 GB
Disk200 GB, SSD or NVMe
OSUbuntu 20.04, 22.04 or 24.04 (x86-64 / amd64)
Network5 Mbps up and down

You can run a node on your own dedicated server, but a professional cloud provider such as AWS, DigitalOcean, Azure, GCP, Hetzner or Contabo is recommended.

Step 2: Install Dependencies

sudo apt update && sudo apt upgrade -y
sudo apt install -y curl

These commands use apt. Adjust them if your system uses a different package manager.

Step 3: Prepare Directory

mkdir -p ~/w-chain && cd ~/w-chain

The rest of this guide assumes the user is ubuntu, so the folder is /home/ubuntu/w-chain. If your user is different, use your own path everywhere you see /home/ubuntu/w-chain.

Step 4: Download Node v1.0.8 and genesis.json

Both come from the v1.0.8 release. It is published for Linux amd64, which is what AWS EC2 and most VPS providers use.

cd ~/w-chain
U=https://github.com/w-chain/node/releases/download/v1.0.8
curl -fL -O $U/w-chain-node-v1.0.8-linux-amd64.tar.gz
curl -fL -O $U/genesis.json
curl -fL -O $U/checksums-v1.0.8.txt
sha256sum -c checksums-v1.0.8.txt

curl prints download progress first. The last two lines must be:

w-chain-node-v1.0.8-linux-amd64.tar.gz: OK
genesis.json: OK

If anything says FAILED, delete the files and download them again.

Unpack the node and give it a short name. The rest of this guide calls it w-chain-node:

tar -xzf w-chain-node-v1.0.8-linux-amd64.tar.gz
mv w-chain-node-linux-amd64 w-chain-node
chmod +x w-chain-node

Do not edit genesis.json, and always take it from the v1.0.8 release. It switches on the v1.0.8 rules and lists the current bootnodes. An older copy either makes the node stop at block 24,630,300 or points at bootnodes that no longer exist.

Step 5: Verify Files

./w-chain-node version
grep -c wchainv1 genesis.json

You should see:

[VERSION INFO]
Release version = v1.0.8
Git branch      = fix/v1.0.8
Commit hash     = a474bc5bd34e2c35bbc432e7ef2e81a62b99673a
Build time      = Thu Oct  8 09:18:20 UTC 2026
4

The version must read v1.0.8 and the last line must be 4. If not, go back to Step 4.

Step 6: Initialize Keys and Blockchain Data Directories

This creates the data directory and the node's network identity:

./w-chain-node secrets init --data-dir main-chain --insecure

A non-validator never signs blocks, so you don't need to save or protect the keys this prints. They only identify your node to its peers.

Step 7: Create Server Config

Keep the node's settings in a config file instead of passing flags. From ~/w-chain, generate the template and open it:

cd ~/w-chain
./w-chain-node server export --type json
nano default-config.json

Set these values. Use absolute paths:

SettingValueNotes
chain_config/home/ubuntu/w-chain/genesis.jsonThe genesis file from Step 4
data_dir/home/ubuntu/w-chain/main-chainThe data directory from Step 6
grpc_addr127.0.0.1:9632Admin API, local only. It has no password
jsonrpc_addr127.0.0.1:8545 or 0.0.0.0:8545See "Exposing RPC" below
network → libp2p_addr0.0.0.0:1478Peer-to-peer, must be reachable from the internet
network → nat_addryour server's public IPSo peers can reach you
tx_pool → price_limit800000000000Minimum gas price in wei (800 Gwei)
sealfalseA non-validator must not seal

The relevant lines look like this:

default-config.json
"chain_config": "/home/ubuntu/w-chain/genesis.json",
"data_dir": "/home/ubuntu/w-chain/main-chain",
"grpc_addr": "127.0.0.1:9632",
"jsonrpc_addr": "127.0.0.1:8545",
"network": {
    ...
    "libp2p_addr": "0.0.0.0:1478",
    "nat_addr": "203.0.113.10",
    ...
},
"seal": false,
"tx_pool": {
    "price_limit": 800000000000,
    ...
}

Exposing RPC

  • Only your own apps on this server use it: keep 127.0.0.1:8545.
  • Other machines need it: the safest setup keeps 127.0.0.1:8545 and puts a reverse proxy (for example nginx or Caddy) in front of it, with HTTPS and rate limiting. If you must bind 0.0.0.0:8545, allow 8545 in the firewall only from the IP addresses that need it.

Step 8: Utilizing Blockchain Backup File

Syncing from scratch takes days and gets slower as the chain grows. Start from the published snapshot instead. The mainnet/latest links always point to the newest snapshot. The current one is from 7 September 2026; your node syncs the remaining blocks from peers after it starts.

cd ~/w-chain/main-chain
B=https://wchain-sanpshot-677276113339-eu-central-1-an.s3.eu-central-1.amazonaws.com/mainnet/latest
curl -fL -O $B/trie.tar.gz
curl -fL -O $B/blockchain.tar.gz
curl -fL -O $B/SHA256SUMS

This is the slowest step: about 16 GB in total.

Verify before unpacking

A truncated download gives a corrupt database that fails in confusing ways later, so check both archives first:

sha256sum -c SHA256SUMS

Both lines must read OK. If one doesn't, delete that archive, download it again and re-check.

Unpack

tar -xzf trie.tar.gz && rm trie.tar.gz
tar -xzf blockchain.tar.gz && rm blockchain.tar.gz

main-chain now holds four directories: the new blockchain and trie, plus consensus and libp2p from Step 6.

Fix ownership

The files must belong to the user the service runs as:

sudo chown -R ubuntu:ubuntu /home/ubuntu/w-chain/main-chain

Replace ubuntu:ubuntu with your user and group if they differ. ls -ld /home/ubuntu/w-chain shows them.

Step 9: Create a System Service

Run the node as a systemd service so it survives reboots and restarts if it crashes:

sudo nano /etc/systemd/system/w-chain-node.service

Paste this in:

/etc/systemd/system/w-chain-node.service
[Unit]
Description=W Chain Node
After=network.target
StartLimitIntervalSec=1

[Service]
Type=simple
User=ubuntu
WorkingDirectory=/home/ubuntu/w-chain
ExecStart=/home/ubuntu/w-chain/w-chain-node server --config /home/ubuntu/w-chain/default-config.json
Restart=on-failure
RestartSec=5
LimitNOFILE=65535

[Install]
WantedBy=multi-user.target

Save and exit. Adjust User and the paths if your setup differs.

Step 10: Enable and Run the Node Service

sudo systemctl daemon-reload
sudo systemctl enable w-chain-node.service
sudo systemctl start w-chain-node.service

Your node now catches up with the network from the snapshot. Watch it:

journalctl -u w-chain-node -f

You want a steady stream of block committed lines with rising block numbers. To check how far it has synced, ask your node for its latest block and compare it with W Scan:

curl -s -X POST -H 'Content-Type: application/json' \
  --data '{"jsonrpc":"2.0","id":1,"method":"eth_blockNumber","params":[]}' \
  http://127.0.0.1:8545

The result is the block number in hex.

Step 11: Firewall

Open only what you need:

PortOpen to
1478/tcp (P2P)Everyone. Required
8545/tcp (RPC)Only the IPs that use your RPC, and only if you bound it to 0.0.0.0
9632/tcp (admin API)Nobody. Never expose it

Allow SSH first, or you will lock yourself out. If your SSH port is not 22, use your port number.

sudo apt-get install -y ufw
sudo ufw allow 22/tcp
sudo ufw allow 1478/tcp
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw --force enable
sudo ufw status verbose

To let one machine use your RPC, replace 1.2.3.4 with its IP:

sudo ufw allow from 1.2.3.4 to any port 8545 proto tcp

If Docker runs on the same machine, its published ports bypass ufw. Bind containers to 127.0.0.1, or use your provider's firewall instead.

Important Commands to Maintain and Monitor Your Node

Service

sudo systemctl start w-chain-node

Logging

journalctl -u w-chain-node

Is my node following the chain?

Count the blocks it committed in the last minute:

sudo journalctl -u w-chain-node -S -1min | grep -c 'block committed'

Blocks come about every 2 seconds, so a node that has caught up shows about 20–35. A number near 0 means it is not following the chain.

Troubleshooting

The node does not start: fork is not available: wchainv1… genesis.json is from v1.0.8 but the binary is older. Repeat Step 4 and check that ./w-chain-node version says v1.0.8.

The node runs but stays stuck or finds no peers

  1. Port 1478 is reachable from the internet and nat_addr is your public IP.
  2. genesis.json came from the v1.0.8 release: grep -c wchainv1 genesis.json must print 4.
  3. seal is false and ./w-chain-node version reports v1.0.8.

Last updated on