Node Setup
Run a RillCoin full node. Sync testnet in minutes. Supports mainnet, testnet, and regtest.
System Requirements
Running a full node on testnet works fine with 2 GB RAM and a basic VPS. Mainnet storage requirements will grow over time as the chain extends. For production mainnet nodes, 8 GB RAM and 100 GB SSD is recommended.
Option A: Install from Binary
Pre-built binaries are available for Linux x86_64 and ARM64. This is the recommended method for most users.
# Download latest release
wget https://github.com/rillcoin/rill/releases/latest/download/rill-node-linux-x86_64.tar.gz
# Verify download
sha256sum rill-node-linux-x86_64.tar.gz
# Compare with SHA256SUMS published in the GitHub release
# Extract and install
tar xzf rill-node-linux-x86_64.tar.gz
sudo mv rill-node /usr/local/bin/
sudo chmod +x /usr/local/bin/rill-node
# Verify
rill-node --versionwget https://github.com/rillcoin/rill/releases/latest/download/rill-node-linux-arm64.tar.gz
tar xzf rill-node-linux-arm64.tar.gz
sudo mv rill-node /usr/local/bin/Option B: Build from Source
Building from source requires Rust 1.85+ stable toolchain. This ensures you can audit and verify all code before running it.
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source ~/.cargo/env
rustup update stablegit clone https://github.com/rillcoin/rill
cd rill
# Build the node binary (release mode for production)
cargo build --release -p rill-node
# Install
sudo cp target/release/rill-node /usr/local/bin/
rill-node --versionRunning the Node
Testnet (recommended for first-time setup)
# Start testnet node (P2P: 28333, RPC disabled by default)
rill-node --network testnet --data-dir ~/.rill/testnet
# With RPC enabled (required for rill-cli and mining)
rill-node \
--network testnet \
--data-dir ~/.rill/testnet \
--rpc-bind 127.0.0.1:28332
# With verbose logging
RUST_LOG=rill_node=debug rill-node \
--network testnet \
--data-dir ~/.rill/testnet \
--rpc-bind 127.0.0.1:28332Mainnet
# Mainnet node (P2P: 18333, RPC: 18332)
rill-node \
--network mainnet \
--data-dir ~/.rill/mainnet \
--rpc-bind 127.0.0.1:18332All CLI Flags
--network <NET>mainnet, testnet, or regtest. Default: mainnet--data-dir <PATH>Data directory for blocks and state. Default: ~/.rill/{network}--rpc-bind <ADDR>Bind address for JSON-RPC server. Example: 127.0.0.1:28332--p2p-port <PORT>P2P listen port. Defaults per network (18333/28333/38333)--connect <ADDR>Connect to a specific peer on startup (can be repeated)--max-peers <N>Maximum number of outbound P2P connections. Default: 16--log-level <LEVEL>Logging level: error, warn, info, debug, trace. Default: infoSystemd Service
For production nodes, run rill-node as a systemd service so it starts automatically and restarts on failure.
sudo useradd --system --home /var/lib/rill --shell /bin/false rill
sudo mkdir -p /var/lib/rill
sudo chown rill:rill /var/lib/rill[Unit]
Description=RillCoin Full Node
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=rill
Group=rill
ExecStart=/usr/local/bin/rill-node \
--network testnet \
--data-dir /var/lib/rill/testnet \
--rpc-bind 127.0.0.1:28332
Restart=on-failure
RestartSec=10
TimeoutStopSec=60
KillSignal=SIGTERM
# Security hardening
NoNewPrivileges=true
ProtectSystem=strict
ProtectHome=true
ReadWritePaths=/var/lib/rill
[Install]
WantedBy=multi-user.targetsudo systemctl daemon-reload
sudo systemctl enable rill-node
sudo systemctl start rill-node
# Check status
sudo systemctl status rill-node
# Follow logs
sudo journalctl -u rill-node -fVerifying Sync
Once running, check your node's sync status via CLI or direct RPC:
# Via rill-cli
rill-cli getsyncstatus --rpc-endpoint http://127.0.0.1:28332
# Via curl
curl -s -X POST http://127.0.0.1:28332 \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"getsyncstatus","params":[],"id":1}' | jq .{
"syncing": false,
"current_height": 42381,
"peer_count": 8,
"best_block_hash": "a3f8c9d2...64b2"
}Port Reference
| Network | P2P Port | RPC Port | Notes |
|---|---|---|---|
| Mainnet | 18333 | 18332 | Open P2P to internet; keep RPC local |
| Testnet | 28333 | 28332 | Open P2P to internet; keep RPC local |
| Regtest | 38333 | 38332 | Local development only |
Firewall Configuration
# Allow P2P (required for network participation)
sudo ufw allow 28333/tcp # testnet
sudo ufw allow 18333/tcp # mainnet
# RPC should NEVER be exposed to the internet
# Default bind is 127.0.0.1 — do not change to 0.0.0.0Data Directory
The data directory stores the blockchain, UTXO set, and peer database. Default locations:
~/.rill/mainnet/~/.rill/testnet/~/.rill/regtest/Override with --data-dir. The directory contains:
db/— RocksDB data files (blocks, UTXOs, clusters)peers.json— Known peer addressesnode.log— Node log file (if file logging enabled)
Upgrading
# Stop the node
sudo systemctl stop rill-node
# Download new binary
wget https://github.com/rillcoin/rill/releases/latest/download/rill-node-linux-x86_64.tar.gz
tar xzf rill-node-linux-x86_64.tar.gz
sudo mv rill-node /usr/local/bin/rill-node
# Restart
sudo systemctl start rill-node
sudo journalctl -u rill-node -fTroubleshooting
- No peers connecting — Check that the P2P port is open in your firewall. Try adding a bootstrap peer with
--connect. - RPC connection refused — Ensure the node was started with
--rpc-bind. Check the port matches your network (28332 testnet, 18332 mainnet). - Node stuck not syncing — Check peer count via
getsyncstatus. If zero peers, verify firewall and DNS. - Disk full warning — RocksDB compaction can temporarily use extra space. Ensure at least 20% free space at all times.