Running Your Own 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.
Download: GitHub Releases (opens in a new tab)
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_ADDRESSWindows
# Download from GitHub releases
# Extract ZIP file
# Open PowerShell in extracted folder
.\derod-windows-amd64.exe --integrator-address=YOUR_DERO_ADDRESSmacOS
# Download for your architecture (Intel or Apple Silicon)
# Extract archive
cd dero-darwin-*
# Run daemon
./derod-darwin-amd64 --integrator-address=YOUR_DERO_ADDRESSSystem Requirements
| Component | Minimum | Recommended |
|---|---|---|
| CPU | 2 cores | 4+ cores |
| RAM | 4GB | 8GB+ |
| Storage | see note below | see note below |
| Network | Stable connection | 100+ Mbps |
| OS | Linux/Windows/Mac | Linux (best performance) |
Storage depends on your sync mode — this is the number that catches people out:
| Sync mode | Disk | Use 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 GB | typical 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:10101Advanced 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" \
--fastsyncKey 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.targetEnable and start:
sudo systemctl enable derod
sudo systemctl start derod
sudo systemctl status derodView logs:
journalctl -u derod -fMonitoring Your Node
Check Sync Status
# In daemon console (if running interactively)
status
Output:
Height: 7115506/7115506 ← Synced!
^local ^network
Peers: 16
Network: MainnetVia 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"
}' | jqFirewall Configuration
DERO ports (Stargate mainnet)
| Service | Default Port | Notes |
|---|---|---|
| P2P | 10101 | Randomized at startup — check derod log for actual port, or pin with --p2p-bind=0.0.0.0:10101 |
| RPC | 10102 | Daemon JSON-RPC |
| Wallet RPC | 10103 | Wallet JSON-RPC |
| GETWORK | 10100 | Miner 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 10102Testnet:
sudo ufw allow 40401/tcpSecurity: 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/tx2. 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:
| Flag | What it does | When to use |
|---|---|---|
--fastsync | Skip 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:port | Always 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 heightMaintenance
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_ADDRESSPruning (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 functionalSource: 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-addressto 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-amd64High memory:
# Enable low memory mode
./derod-linux-amd64 --prune-history=50000Port already in use:
# Change ports
./derod-linux-amd64 --p2p-bind=0.0.0.0:20101 --rpc-bind=127.0.0.1:20102Performance 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=100000For Home PC
# Optimize for home use (lower resource usage)
./derod-linux-amd64 \
--integrator-address=YOUR_ADDRESS \
--rpc-bind=127.0.0.1:10102Run 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:8080Open 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-141It 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:10102This 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
| Benefit | Description |
|---|---|
| Privacy | No third party sees your transactions/queries |
| Integrator Rewards | Earn 10% of blocks mined on your node |
| Network Health | Contribute to decentralization |
| Self-Sovereignty | Complete control, zero trust |
| Support Mining | Help friends/family mine |
| Learning | Understand blockchain deeply |
Further Reading
- DERO Daemon - Understanding the daemon
- Mining Guide - Start mining on your node
- RPC API - API documentation
Source Code:
- Daemon implementation:
cmd/derod/main.go - Configuration:
config/config.go - Pruning:
blockchain/prune_history.go
Related Pages
Node Operations:
- DERO Daemon - Understanding the daemon
- DERO Mining - Mine with your node
- Encrypted Network - P2P network details
APIs & Integration:
- Daemon RPC API - Full RPC reference
- Wallet RPC API - Wallet automation
Advanced:
- Smart Contracts - Run smart contracts on your node
- DERO Tokens - Understanding asset storage