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.
Step 1: Prepare the System
Your machine must meet these minimums:
| Resource | Minimum |
|---|---|
| vCPUs | 2 or more |
| Memory | 8 GB |
| Disk | 200 GB, SSD or NVMe |
| OS | Ubuntu 20.04, 22.04 or 24.04 (x86-64 / amd64) |
| Network | 5 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 curlThese commands use apt. Adjust them if your system uses a different package manager.
Step 3: Prepare Directory
mkdir -p ~/w-chain && cd ~/w-chainThe 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.txtcurl prints download progress first. The last two lines must be:
w-chain-node-v1.0.8-linux-amd64.tar.gz: OK
genesis.json: OKIf 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-nodeDo 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.jsonYou 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
4The 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 --insecureA 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.jsonSet these values. Use absolute paths:
| Setting | Value | Notes |
|---|---|---|
chain_config | /home/ubuntu/w-chain/genesis.json | The genesis file from Step 4 |
data_dir | /home/ubuntu/w-chain/main-chain | The data directory from Step 6 |
grpc_addr | 127.0.0.1:9632 | Admin API, local only. It has no password |
jsonrpc_addr | 127.0.0.1:8545 or 0.0.0.0:8545 | See "Exposing RPC" below |
network → libp2p_addr | 0.0.0.0:1478 | Peer-to-peer, must be reachable from the internet |
network → nat_addr | your server's public IP | So peers can reach you |
tx_pool → price_limit | 800000000000 | Minimum gas price in wei (800 Gwei) |
seal | false | A non-validator must not seal |
The relevant lines look like this:
"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:8545and puts a reverse proxy (for example nginx or Caddy) in front of it, with HTTPS and rate limiting. If you must bind0.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/SHA256SUMSThis 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 SHA256SUMSBoth 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.gzmain-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-chainReplace 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.servicePaste this in:
[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.targetSave 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.serviceYour node now catches up with the network from the snapshot. Watch it:
journalctl -u w-chain-node -fYou 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:8545The result is the block number in hex.
Step 11: Firewall
Open only what you need:
| Port | Open 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 verboseTo 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 tcpIf 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-nodeLogging
journalctl -u w-chain-nodeIs 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
- Port 1478 is reachable from the internet and
nat_addris your public IP. genesis.jsoncame from the v1.0.8 release:grep -c wchainv1 genesis.jsonmust print4.sealisfalseand./w-chain-node versionreports v1.0.8.
Last updated on