Neoxa / developers
Self-hosted

Run a Neoxa Smartnode

A complete, copy-pasteable walkthrough. Set up your own smartnode on a Linux VPS, register it on chain, and start earning 45% of block rewards. Mirrors the official neoxa.net/smartnode steps with VPS picks and verification commands added.

Reward share

Smartnodes earn 45% of every block reward. Miners get 45%, gamers 5%, treasury 5%.

Time to set up

About 30-45 minutes once you have a VPS. Most of that is waiting for the QT wallet to sync.

What you need

1,000,000 NEOX collateral, a VPS with a static IPv4, and a desktop running the Neoxa Core QT wallet.

Requirements

Collateral

1,000,000 NEOX locked in your control wallet. The collateral never leaves your wallet, and never goes to the VPS - it stays on the desktop QT. Moving or spending the 1M will deregister the smartnode immediately.

Hardware (VPS)

ResourceMinimum (official)Recommended
CPU2 cores2 cores (any modern x86_64)
RAM4 GB4 GB + 4 GB swap
Storage50 GB60-80 GB SSD
BandwidthUnmetered or 1 TB/moUnmetered preferred
OSUbuntu 22.04 / 24.04Ubuntu 24.04 LTS
IPv4Static, publicStatic, public; IPv6 optional
Uptime24/724/7 (POSe drops on downtime)

RAM rule of thumb: the daemon settles around 1.1-1.3 GB RAM per node, with brief spikes to ~1.7 GB during sync. 4 GB total leaves comfortable headroom for one node.

VPS picks

Any VPS with the specs above works. These are providers known to work well with Neoxa, ordered roughly by price.

Hetzner Cloud

CX22 (2 vCPU, 4 GB RAM, 40 GB SSD). EU/US locations, IPv4 included. Solid network.

~€5/mo

Contabo VPS S

4 vCPU, 8 GB RAM, 200 GB SSD. Generous specs for the price; node-friendly.

~€5-7/mo

OVH VPS Starter

2 vCPU, 4 GB RAM, 80 GB. Good network in EU/CA. Reliable for long-term hosting.

~€7/mo

Vultr Cloud Compute

2 vCPU, 4 GB RAM. Many regions, hourly billing. IPv4 included.

~$24/mo

DigitalOcean

Premium Intel 2 vCPU / 4 GB. Reliable but pricier than EU peers.

~$24/mo

Hetzner dedicated

If you plan multiple nodes: AX41 (32 GB+) hosts 20-30 nodes comfortably. Bare metal at VPS prices.

€40-50/mo

One node per VPS is simplest and what the official guide assumes. Running many nodes per host needs containers (podman/docker), MAC isolation, and careful memory tuning - out of scope here.


01Initial server setup

SSH into your VPS as root (or use sudo) and update the system.

sudo su
apt update && sudo apt upgrade -y && sudo apt install -y unzip fail2ban

02Add 4 GB swap

Even with 4 GB of RAM, swap protects against OOM kills during chain sync.

swapon --show
sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

03Configure UFW firewall

Lock down everything except SSH and the smartnode P2P port (8788).

sudo apt install ufw -y
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow ssh
sudo ufw allow 8788/tcp
sudo ufw enable

04Set up fail2ban

Protect SSH from brute-force.

sudo nano /etc/fail2ban/jail.local

Paste:

[sshd]
enabled = true
port = 22
logpath = /var/log/auth.log
maxretry = 3

Save (Ctrl+O, Enter, Ctrl+X) and reboot the VPS so the swap, firewall, and jail are all applied:

sudo reboot

Reconnect via SSH after ~30 seconds.

05Create the Neoxa user and install the daemon

Run the daemon as a non-root user. Replace new_username with whatever you want (e.g. neoxa).

sudo adduser new_username
sudo su new_username
mkdir neoxa
cd neoxa
wget https://github.com/NeoxaChain/Neoxa/releases/download/v5.1.1.4/neoxad-5.1.1.4-linux64.zip
unzip neoxad-5.1.1.4-linux64.zip
sudo chmod +x neoxad neoxa-cli
mkdir ~/.neoxacore && touch ~/.neoxacore/neoxa.conf

Always pull the latest release. Check GitHub releases for the current version and substitute the URL above.

06Set up the local control wallet

The control wallet runs on your desktop, not the VPS. It holds the 1M NEOX collateral and signs the registration. Pick the right binary:

In Neoxa Core QT:

  1. Wait for full sync. Won't work until the wallet is fully caught up.
  2. Settings → Encrypt Wallet. Set a strong passphrase and write it down.
  3. Generate a receiving address (File → Receiving addresses → New).
  4. Backup wallet.dat (File → Backup Wallet) to two safe locations.
  5. Send exactly 1,000,000 NEOX to the address from step 3. Send to yourself; do not send less, do not split.
  6. Wait for at least 1 confirmation on the collateral tx.

Critical: never spend, send, or move the 1,000,000 NEOX after this point. Doing so deregisters the smartnode immediately.

07Run protx quick_setup

Open the Debug Console in QT (Tools → Debug Console). You need four pieces of info:

1. Collateral txid

In the QT main wallet, go to Transactions, right-click the 1M NEOX tx, and copy Transaction ID.

2. Collateral output index

In the Debug Console:

smartnode outputs

You'll see something like { "abc123...": "0" }. The number after the colon is the output index (usually 0 or 1).

3. Your VPS public IPv4

On the VPS:

curl -4 ifconfig.co

Use the returned IP with port 8788.

4. A fee address (needs ~0.005 NEOX)

In the QT Debug Console:

listaddressbalances

Pick any address that holds at least 0.005 NEOX - the registration tx pays a tiny fee from this address.

Run quick_setup

In the QT Debug Console, substitute the four values you collected:

protx quick_setup <txid> <collateralIndex> <ip>:8788 <feeAddress>

QT prints a configuration block: BLS keys, owner / voting / payout addresses, and a ready-made neoxa.conf. Copy the entire block. The BLS private key in particular cannot be recovered later.

08Apply the config and start the node

Back on the VPS, stop the daemon if it's running:

~/neoxa/neoxa-cli stop

Open the config file and paste the block from quick_setup:

nano ~/.neoxacore/neoxa.conf

Save (Ctrl+O, Enter, Ctrl+X). Start the daemon:

~/neoxa/neoxad

It'll fork into the background. Wait for it to sync to the chain tip (about 10-30 minutes from a fresh server). Check sync status:

~/neoxa/neoxa-cli getblockchaininfo | grep -E '"blocks|verificationprogress'

Once verificationprogress is at 1.0:

~/neoxa/neoxa-cli smartnode status

You'll see "status": "Ready" within a few blocks. The official notice: "It takes a few blocks for your smartnode to be confirmed on the network."


Monitoring

Three commands to keep handy:

# am I synced and registered?
~/neoxa/neoxa-cli smartnode status

# what's my POSe (proof of service) score? lower is better, 0 = perfect
~/neoxa/neoxa-cli protx info <your-proTxHash> | grep -E 'PoSeScore|PoSeBan'

# when was my last paid block?
~/neoxa/neoxa-cli smartnode status | grep -E 'lastpaidblock|lastpaidtime'

If PoSeScore climbs above 0 it means the network missed a heartbeat from your node. Persistent score growth leads to a ban. Restart the daemon, check that port 8788 is reachable from outside, and confirm the BLS public key matches what was registered.

Auto-restart on crash

Wrap the daemon in a systemd service so it always comes back:

sudo nano /etc/systemd/system/neoxa.service

Paste (replace new_username):

[Unit]
Description=Neoxa daemon
After=network.target

[Service]
User=new_username
Type=forking
ExecStart=/home/new_username/neoxa/neoxad
ExecStop=/home/new_username/neoxa/neoxa-cli stop
Restart=on-failure
RestartSec=15
TimeoutStartSec=120

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable neoxa
sudo systemctl start neoxa
sudo systemctl status neoxa

Service-info updates

If you change VPS, IP, or BLS keys, you need to register the change on chain. From the QT Debug Console (the wallet that owns the collateral):

protx update_service <proTxHash> <newIp>:8788 <newBlsKey> "" <feeAddress>

Upgrade the daemon

~/neoxa/neoxa-cli stop
cd ~/neoxa
wget https://github.com/NeoxaChain/Neoxa/releases/download/v<NEW_VERSION>/neoxad-<NEW_VERSION>-linux64.zip
unzip -o neoxad-<NEW_VERSION>-linux64.zip
sudo chmod +x neoxad neoxa-cli
sudo systemctl restart neoxa     # if using systemd
~/neoxa/neoxa-cli getblockchaininfo

Troubleshooting

"smartnode status: Failed"

Almost always means the node can't be reached from outside on port 8788. Check from another machine:

nc -zv <your-vps-ip> 8788

If it fails: confirm ufw status shows 8788/tcp ALLOW, and that your VPS provider's network firewall (Hetzner/OVH/Vultr have these) also allows it.

"PoSeBan" set to true

The network has banned your node for repeated heartbeat failures. To revive it: fix the issue (network, daemon crash, etc.) then run from QT:

protx update_service <proTxHash> <ip>:8788 <blsKey> "" <feeAddress>

This re-announces the node and clears the ban.

Daemon won't start: "Cannot obtain a lock on data directory"

Another neoxad process is already running. Kill it:

pkill -9 neoxad
sleep 2
~/neoxa/neoxad

Out of memory during sync

Either you skipped the swap step (do it) or your VPS has less than 4 GB. Add more swap or upgrade the VPS.

Sync stuck at the same block for 10+ minutes

Restart the daemon. If it persists, check ~/.neoxacore/debug.log for errors. Often a peer issue; the daemon picks new peers on restart.


What's next

Once your node is Ready:

This guide mirrors the official walkthrough at neoxa.net/smartnode with extra context (VPS picks, systemd, troubleshooting) added. If anything diverges from the official source, the official guide wins.