Lux Docs
Run Nodes

Full Node

Run a Lux Network full node to verify transactions and support the network

Running a Full Node

A full node validates all transactions, maintains the current network state, and serves API requests. Running a full node contributes to network decentralization and gives you trustless access to blockchain data.

System Requirements

ComponentMinimumRecommended
CPU8 cores16+ cores
RAM16 GB32+ GB
Storage1 TB SSD2+ TB NVMe
Network100 Mbps1 Gbps
OSUbuntu 22.04+ / macOS 13+Ubuntu 24.04 LTS

Storage requirements grow over time as the chain accumulates state. NVMe storage is strongly recommended for acceptable sync times and sustained I/O performance.

Installation

The install script downloads the latest release and sets up a systemd service:

curl -sSfL https://raw.githubusercontent.com/luxfi/node/main/scripts/install.sh | sh

The binary is installed to /usr/local/bin/luxd and the data directory defaults to ~/.luxd/.

Configuration

Configuration File

Create a configuration file at ~/.luxd/config.json:

{
  "http-host": "0.0.0.0",
  "http-port": 9650,
  "staking-port": 9651,
  "public-ip-resolution-service": "opendns",
  "db-dir": "/data/luxd/db",
  "log-dir": "/data/luxd/logs",
  "log-level": "info",
  "network-id": "mainnet",
  "api-admin-enabled": false,
  "api-health-enabled": true,
  "api-info-enabled": true,
  "index-enabled": true
}

Key Configuration Flags

FlagDescriptionDefault
--network-idNetwork to join (mainnet, testnet, local)mainnet
--http-hostHTTP API listen address127.0.0.1
--http-portHTTP API port9650
--staking-portP2P staking port9651
--db-dirDatabase directory~/.luxd/db
--log-levelLogging verbosity (debug, info, warn, error)info
--index-enabledEnable transaction indexingfalse
--api-admin-enabledEnable admin APIfalse

Start the Node

# With default settings (mainnet)
luxd

# With config file
luxd --config-file=$HOME/.luxd/config.json

# With testnet
luxd --network-id=testnet

Syncing

When first started, the node must sync with the network. This involves downloading and verifying all blocks from genesis.

Sync Progress

Monitor sync progress via the Health API:

curl -s http://localhost:9650/ext/health | jq .

Or check if bootstrapping is complete:

curl -s -X POST --data '{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "info.isBootstrapped",
  "params": {
    "chain": "C"
  }
}' -H 'content-type:application/json' http://localhost:9650/ext/info

Response when fully synced:

{
  "jsonrpc": "2.0",
  "result": {
    "isBootstrapped": true
  },
  "id": 1
}

Expected Sync Times

NetworkInitial SyncNotes
Mainnet4-12 hoursDepends on disk I/O and network bandwidth
Testnet1-4 hoursSmaller state

Firewall Configuration

Open these ports for node operation:

PortProtocolDirectionPurpose
9651TCPInbound + OutboundP2P staking and gossip
9650TCPOutbound (or local only)HTTP API
# UFW example
sudo ufw allow 9651/tcp

Port 9650 (HTTP API) should not be exposed publicly unless you intend to run a public RPC endpoint. Restrict access with a firewall or reverse proxy.

Monitoring

Metrics Endpoint

The node exposes Prometheus metrics at:

http://localhost:9650/ext/metrics

Key Metrics to Watch

MetricDescription
lux_network_peersNumber of connected peers
lux_C_vm_eth_chain_block_countC-Chain block height
lux_db_read_sizeDatabase read throughput
lux_network_bandwidth_totalNetwork bandwidth usage

Grafana Dashboard

A community Grafana dashboard is available for monitoring Lux nodes. Import it by pointing Prometheus at the metrics endpoint and loading the Lux dashboard template.

Upgrading

Download the New Version

curl -sSfL https://raw.githubusercontent.com/luxfi/node/main/scripts/install.sh | sh

Restart the Node

sudo systemctl restart luxd

Verify

curl -s -X POST --data '{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "info.getNodeVersion"
}' -H 'content-type:application/json' http://localhost:9650/ext/info

Further Reading

On this page