RillCoin
RillCoin DocsTestnet Live
Reference

Node Setup

Run a RillCoin full node. Sync testnet in minutes. Supports mainnet, testnet, and regtest.

System Requirements

OSUbuntu 22.04+
RAM2 GB minimum
Storage20 GB SSD
NetworkStable internet

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.

Linux x86_64
# 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 --version
Linux ARM64 (e.g. Raspberry Pi 4, Oracle Ampere)
wget 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.

Install Rust (if not already installed)
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source ~/.cargo/env
rustup update stable
Clone and build
git 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 --version

Running the Node

Testnet (recommended for first-time setup)

bash
# 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:28332

Mainnet

bash
# Mainnet node (P2P: 18333, RPC: 18332)
rill-node \
  --network  mainnet \
  --data-dir ~/.rill/mainnet \
  --rpc-bind 127.0.0.1:18332

All 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: info

Systemd Service

For production nodes, run rill-node as a systemd service so it starts automatically and restarts on failure.

Create a dedicated user
sudo useradd --system --home /var/lib/rill --shell /bin/false rill
sudo mkdir -p /var/lib/rill
sudo chown rill:rill /var/lib/rill
/etc/systemd/system/rill-node.service
[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.target
Enable and start
sudo 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 -f

Verifying Sync

Once running, check your node's sync status via CLI or direct RPC:

bash
# 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 .
Expected output when synced
{
  "syncing":         false,
  "current_height":  42381,
  "peer_count":      8,
  "best_block_hash": "a3f8c9d2...64b2"
}

Port Reference

NetworkP2P PortRPC PortNotes
Mainnet1833318332Open P2P to internet; keep RPC local
Testnet2833328332Open P2P to internet; keep RPC local
Regtest3833338332Local development only

Firewall Configuration

bash
# 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.0

Data Directory

The data directory stores the blockchain, UTXO set, and peer database. Default locations:

Mainnet~/.rill/mainnet/
Testnet~/.rill/testnet/
Regtest~/.rill/regtest/

Override with --data-dir. The directory contains:

  • db/ — RocksDB data files (blocks, UTXOs, clusters)
  • peers.json — Known peer addresses
  • node.log — Node log file (if file logging enabled)

Upgrading

bash
# 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 -f

Troubleshooting

  • 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.