Basics
Running a Node

Running Your Own DERO Node

Run a DERO Node

Running a DERO node supports network decentralization, earns you integrator rewards (10% bonus), and gives you complete privacy without relying on third-party infrastructure.


Quick Start

Linux

# Download latest release
wget https://github.com/deroproject/derohe/releases/latest/download/dero-linux-amd64.tar.gz
 
# Extract
tar -xzf dero-linux-amd64.tar.gz
cd dero-linux-amd64
 
# Run daemon
./derod-linux-amd64 --integrator-address=YOUR_DERO_ADDRESS

Windows

# Download from GitHub releases
# Extract ZIP file
# Open PowerShell in extracted folder
 
.\derod-windows-amd64.exe --integrator-address=YOUR_DERO_ADDRESS

macOS

# Download for your architecture (Intel or Apple Silicon)
# Extract archive
cd dero-darwin-*
 
# Run daemon  
./derod-darwin-amd64 --integrator-address=YOUR_DERO_ADDRESS

System Requirements

ComponentMinimumRecommended
CPU2 cores4+ cores
RAM4GB8GB+
Storagesee note belowsee note below
NetworkStable connection100+ Mbps
OSLinux/Windows/MacLinux (best performance)

Storage depends on your sync mode — this is the number that catches people out:

Sync modeDiskUse when
Full / archival (default derod, no pruning)~230 GB+ today; plan for 500 GB (grows continuously)you need complete chain history and to answer queries about any past block or transaction
Fast sync + pruning (--fastsync --prune-history=100000)~50 GBtypical node or VPS — current state, recent history, validating new blocks

The full chain has grown from ~130 GB (early 2025) to 160+ GB (late 2025) and past 230 GB by mid-2026, and it keeps climbing — size a full node for the future, not for today. A pruned, fast-synced node stays light and is the recommended setup for a VPS or any node that does not need deep history.

Why SSD?

  • Blockchain requires fast random reads/writes
  • HDD will cause sync issues and slow performance

Configuration

Basic Setup

# Minimal configuration
./derod-linux-amd64 --integrator-address=dero1qy...
 
# With custom ports
./derod-linux-amd64 \
  --integrator-address=dero1qy... \
  --rpc-bind=0.0.0.0:10102 \
  --p2p-bind=0.0.0.0:10101

Advanced Configuration

# Production node with optimizations
./derod-linux-amd64 \
  --integrator-address=dero1qy... \
  --rpc-bind=0.0.0.0:10102 \
  --p2p-bind=0.0.0.0:10101 \
  --node-tag="MyNode" \
  --fastsync

Key flags:

  • --integrator-address - Your address for 10% rewards
  • --rpc-bind - RPC server address (default: 127.0.0.1:10102)
  • --p2p-bind - P2P network address (default: 0.0.0.0:10101)
  • --node-tag - Custom node identifier
  • --fastsync - Faster initial sync

Full list: ./derod --help


Running as a Service

Linux (systemd)

First, create a dedicated user and directory for the daemon:

sudo useradd -r -s /bin/false dero
sudo mkdir -p /opt/dero
sudo chown dero:dero /opt/dero
# Copy derod binary to /opt/dero/

Create service file /etc/systemd/system/derod.service:

[Unit]
Description=DERO Daemon
After=network.target
 
[Service]
Type=simple
User=dero
WorkingDirectory=/opt/dero
ExecStart=/opt/dero/derod-linux-amd64 --integrator-address=YOUR_ADDRESS
Restart=always
RestartSec=10
 
[Install]
WantedBy=multi-user.target

Enable and start:

sudo systemctl enable derod
sudo systemctl start derod
sudo systemctl status derod

View logs:

journalctl -u derod -f

Monitoring Your Node

Check Sync Status

# In daemon console (if running interactively)
status
 
Output:
  Height: 7115506/7115506   Synced!
         ^local   ^network
  Peers: 16
  Network: Mainnet

Via RPC

# Get node info
curl http://127.0.0.1:10102/json_rpc -d '{
  "jsonrpc":"2.0",
  "id":"1",
  "method":"DERO.GetInfo"
}' | jq
 
# Returns:
{
  "height": 7115506,
  "stableheight": 7115498,
  "topoheight": 7115506,
  "difficulty": 36457876,
  "network": "mainnet"
}

Check Connected Peers

curl http://127.0.0.1:10102/json_rpc -d '{
  "jsonrpc":"2.0",
  "id":"1",
  "method":"DERO.GetPeerList"
}' | jq

Firewall Configuration

DERO ports (Stargate mainnet)

ServiceDefault PortNotes
P2P10101Randomized at startup — check derod log for actual port, or pin with --p2p-bind=0.0.0.0:10101
RPC10102Daemon JSON-RPC
Wallet RPC10103Wallet JSON-RPC
GETWORK10100Miner connections (dero-miner --daemon-rpc-address=127.0.0.1:10100)
⚠️

Typo in Captain's example. The --p2p-bind=0.0.0.0:10102 above is verbatim from Discord — 10102 is the RPC port (see the table). For P2P, pin 0.0.0.0:10101 to match the convention and the UFW example below.

If you're behind NAT, pin the P2P port before opening firewall rules — randomization will silently break port forwarding.

Mainnet (UFW example):

# P2P (pin the port first with --p2p-bind, then open the same port here)
sudo ufw allow 10101/tcp
 
# GETWORK (only if miners connect from outside the host)
sudo ufw allow 10100/tcp
 
# RPC (local access only — never expose to the internet)
sudo ufw allow from 127.0.0.1 to any port 10102

Testnet:

sudo ufw allow 40401/tcp
⚠️

Security: Do NOT expose RPC port (10102) to the internet unless you know what you're doing. It should only be accessible locally or via trusted network.


Initial Sync

Sync Methods

1. Full Sync — complete history

./derod-linux-amd64
 
# Downloads and validates the entire blockchain from genesis
# Time: several hours (depends on connection/CPU)
# Disk: full archival (~230 GB+, see System Requirements)
# Result: fully validated node that can answer queries about any past block/tx

2. Fast Sync — recommended for most nodes

./derod-linux-amd64 --fastsync
 
# Downloads recent state snapshots instead of replaying from genesis
# Time: 30-60 minutes
# Result: functional, secure node. Pair with --prune-history to keep disk small.

Most operators want fast sync + pruning (see "For VPS/Server" under Performance Optimization). Choose full sync only if you specifically need the complete historical chain.

Fastsync vs --add-priority-node — what each flag does

These two flags are commonly conflated. They solve different problems:

FlagWhat it doesWhen to use
--fastsyncSkip historical block bodies during initial sync; download recent state snapshots instead.One-time onboarding to get your node online quickly. Bootstrap-only flag — it's a no-op after first sync, so you can leave it on or drop it; either way you'll keep validating new blocks normally.
--add-priority-node=ip:portAlways keep this specific peer connected during sync.When you want to bias the sync process toward a peer you trust (a friend's node, a foundation seed, etc.).

You can use both at the same time — fastsync to skip history, priority node to choose your seed.

Monitoring Sync Progress

# Check height increasing
watch -n 5 'curl -s http://127.0.0.1:10102/json_rpc -d '\''{"method":"DERO.GetInfo"}'\'' | jq .result.height'
 
# Synced when local height = network height

Maintenance

Updating Your Node

# Stop daemon
pkill derod
 
# Download latest release
wget https://github.com/deroproject/derohe/releases/latest/download/dero-linux-amd64.tar.gz
 
# Extract and replace
tar -xzf dero-linux-amd64.tar.gz
 
# Restart with same settings
./derod-linux-amd64 --integrator-address=YOUR_ADDRESS

Pruning (Reducing Disk Usage)

# Start with pruning enabled
./derod-linux-amd64 --prune-history=100000
 
# Keeps last 100,000 blocks, prunes older
# Reduces disk usage significantly
# Node remains fully functional

Source: Pruning implementation in blockchain/prune_history.go


Earning Integrator Rewards

The 10% Bonus Explained

Every 10 miniblocks:

Blocks 1-9:  Regular (distributed to miners)
Block 10:    Integrator (goes to your daemon address)

Requirements:

  • Run your own daemon
  • Set --integrator-address to your wallet
  • Have miners connected (or mine yourself)

Rewards:

  • Base miner rewards: 88.4%
  • Integrator bonus: 10%
  • Pool fee (you keep): 1.6%
  • Total: 100% (vs 98.4% on public pools)

Source: blockchain/miniblocks.go


Troubleshooting

Common Issues

Sync stuck:

# Check peers
curl http://127.0.0.1:10102/json_rpc -d '{"method":"DERO.GetPeerList"}'
 
# If no peers, check firewall (port 10101)
# Try adding seed nodes manually (usually not needed)

High CPU usage:

# Use nice to lower priority
nice -n 19 ./derod-linux-amd64

High memory:

# Enable low memory mode
./derod-linux-amd64 --prune-history=50000

Port already in use:

# Change ports
./derod-linux-amd64 --p2p-bind=0.0.0.0:20101 --rpc-bind=127.0.0.1:20102

Performance Optimization

For VPS/Server

# Optimize for server environment
./derod-linux-amd64 \
  --integrator-address=YOUR_ADDRESS \
  --rpc-bind=0.0.0.0:10102 \
  --p2p-bind=0.0.0.0:10101 \
  --fastsync \
  --prune-history=100000

For Home PC

# Optimize for home use (lower resource usage)
./derod-linux-amd64 \
  --integrator-address=YOUR_ADDRESS \
  --rpc-bind=127.0.0.1:10102

Run your own block explorer

You don't have to rely on explorer.dero.io. The explorer binary ships in the same release as derod and talks to your local daemon.

./explorer-linux-amd64 --daemon-address=127.0.0.1:10102 --http-address=0.0.0.0:8080

Open http://127.0.0.1:8080 in your browser.

Running a local explorer is the privacy-preserving default: public explorers see every query you make — block lookups, address checks, TX inspections — while the command Captain shared above runs against your own daemon, so nothing leaves the host.


Seed nodes are bootstrap only

DERO's seed nodes are not a control plane. They exist so a fresh node can find its first peers; after that, peer exchange takes over and the seed nodes can vanish without affecting your daemon.

If you want to fully decouple from the default seed list, run --add-priority-node=<friend's IP>:10101 (see Fastsync vs --add-priority-node above) and you never have to talk to a seed node again.


--remote is convenience, not sovereignty

The wallet CLI accepts a --remote flag that connects to a public DERO Foundation node instead of your own daemon:

./dero-wallet-cli-linux-amd64 --remote
# Connects to node.derofoundation.org:11012 — config/config.go:140-141

It works — and for read-only operations or quick balance checks it's fine. What you give up is the self-sovereignty premise of the rest of this page: with --remote, you're trusting one party's view of the chain. They could censor your transactions, lie about your balance, or correlate every query you make.

For anything that matters — large balances, smart-contract operations, payment processing, anything you'd describe as "real" — point your wallet at your own daemon:

./dero-wallet-cli-linux-amd64 --daemon-address=127.0.0.1:10102

This is the whole point of running a node.


Security Best Practices

1. Firewall Rules

  • ✅ Allow P2P port (10101)
  • ❌ Block RPC port from internet (10102)
  • ✅ Use SSH keys (if remote server)

2. System Security

  • ✅ Keep OS updated
  • ✅ Run daemon as non-root user
  • ✅ Use strong passwords
  • ✅ Enable automatic security updates

3. Backup

  • ✅ Backup wallet seed phrase (25 words)
  • ✅ Document integrator address
  • ✅ Note configuration settings
🚫

Never expose RPC port to the internet! It can be used to query blockchain data and potentially DOS your node. Use SSH tunneling or VPN if remote access needed.


Benefits of Running a Node

BenefitDescription
PrivacyNo third party sees your transactions/queries
Integrator RewardsEarn 10% of blocks mined on your node
Network HealthContribute to decentralization
Self-SovereigntyComplete control, zero trust
Support MiningHelp friends/family mine
LearningUnderstand blockchain deeply

Further Reading

Source Code:

  • Daemon implementation: cmd/derod/main.go
  • Configuration: config/config.go
  • Pruning: blockchain/prune_history.go

Related Pages

Node Operations:

APIs & Integration:

Advanced: