Selendra

Documentation

Run Full Node

Setup and operate a Selendra full node

Full nodes provide direct blockchain access without third-party RPC dependencies. Suitable for dApp backends, development, and private infrastructure.

Specs: Recent blockchain state with pruning (~200GB storage). Sync time: 4-8 hours.

Prerequisites

Ubuntu 22.04 LTS or Debian 12, 8GB RAM minimum, 200GB SSD, 50 Mbps internet, sudo access.


Installation

Download Binary

wget https://github.com/selendra/selendra/releases/latest/download/selendra
chmod +x selendra
sudo mv selendra /usr/local/bin/
selendra --version

Build from Source (Alternative)

# Install Rust and dependencies
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source $HOME/.cargo/env
sudo apt update && sudo apt install -y build-essential git clang curl libssl-dev llvm libudev-dev protobuf-compiler

# Clone and build (30-60 min)
git clone https://github.com/selendra/selendra.git
cd selendra && git checkout $(git describe --tags --abbrev=0)
cargo build --release
./target/release/selendra --version

Configuration

Service User

sudo useradd -r -s /bin/false selendra
sudo mkdir -p /var/lib/selendra
sudo chown selendra:selendra /var/lib/selendra

Systemd Service

Create /etc/systemd/system/selendra.service:

[Unit]
Description=Selendra Full Node
After=network.target

[Service]
Type=simple
User=selendra
Group=selendra
WorkingDirectory=/var/lib/selendra
ExecStart=/usr/local/bin/selendra \
  --base-path /var/lib/selendra \
  --chain mainnet \
  --name "YourNodeName" \
  --pruning 256 \
  --state-cache-size 4 \
  --rpc-cors all \
  --rpc-methods safe \
  --port 30333 \
  --rpc-port 9933 \
  --ws-port 9944 \
  --prometheus-port 9615 \
  --prometheus-external

Restart=on-failure
RestartSec=10
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target

Key parameters:

  • --pruning 256: Keep last 256 blocks (reduces storage)
  • --state-cache-size 4: Cache 4GB (adjust based on RAM)
  • --rpc-methods safe: Read-only RPC (security)
  • --rpc-cors all: Allow cross-origin (restrict in production: --rpc-cors https://yourdapp.com)

Firewall

sudo ufw allow 30333/tcp  # P2P (required)
sudo ufw allow 30333/udp
sudo ufw allow 9933/tcp   # HTTP RPC (if public)
sudo ufw allow 9944/tcp   # WebSocket RPC (if public)
sudo ufw allow from 10.0.0.0/24 to any port 9615  # Prometheus (restrict to monitoring)
sudo ufw enable

Start Node

sudo systemctl daemon-reload
sudo systemctl enable --now selendra
sudo systemctl status selendra

Monitor Sync

# Follow logs
sudo journalctl -u selendra -f

# Check sync status
curl -H "Content-Type: application/json" \
  -d '{"id":1, "jsonrpc":"2.0", "method":"system_health"}' \
  http://localhost:9933

Logs: "Syncing X bps" → catching up. "Idle (X peers)" → fully synced.
RPC: "isSyncing": false confirms sync complete.


RPC Access

Local: http://localhost:9933 (HTTP), ws://localhost:9944 (WebSocket)

Remote (secure): Use nginx reverse proxy with SSL:

server {
    listen 443 ssl;
    server_name rpc.yourdomain.com;
    ssl_certificate /path/to/cert.pem;
    ssl_certificate_key /path/to/key.pem;

    location / {
        proxy_pass http://localhost:9933;
        proxy_set_header Host $host;
    }

    location /ws {
        proxy_pass http://localhost:9944;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

Rate limiting: Add to systemd service:

--rpc-max-connections 100
--ws-max-connections 100
--rpc-max-request-size 15

Testnet Node

For development/testing:

ExecStart=/usr/local/bin/selendra \
  --base-path /var/lib/selendra-testnet \
  --chain testnet \
  --name "YourTestnetNode" \
  --pruning 256 \
  --rpc-cors all \
  --rpc-methods safe

Faster sync, useful for contract testing.


Maintenance

Disk Space

df -h /var/lib/selendra  # Monitor regularly
# Pruned nodes: ~5-10GB/month growth

Log Rotation

Create /etc/systemd/journald.conf.d/selendra.conf:

[Journal]
SystemMaxUse=1G
SystemMaxFileSize=100M
MaxRetentionSec=604800
sudo systemctl restart systemd-journald

Updates

sudo systemctl stop selendra
wget https://github.com/selendra/selendra/releases/latest/download/selendra
chmod +x selendra && sudo mv selendra /usr/local/bin/
selendra --version
sudo systemctl start selendra

Troubleshooting

IssueDiagnosticSolution
Won't startjournalctl -u selendra -xeCheck port availability, permissions, dependencies
Slow syncCheck peer count via RPCVerify port 30333 open, check firewall
High CPUNormal during syncAfter sync: increase RAM/cache, upgrade to NVMe, add rate limiting
CorruptionLogs show DB errorsStop node, rm -rf /var/lib/selendra/chains/selendra/db, restart (resync)

Performance Optimization

More cache:

--state-cache-size 8  # Use 25-50% of available RAM

Faster storage:

# Move to NVMe
sudo systemctl stop selendra
sudo mv /var/lib/selendra /mnt/nvme/selendra
sudo ln -s /mnt/nvme/selendra /var/lib/selendra
sudo systemctl start selendra

Network tuning: Add to /etc/sysctl.conf:

net.core.rmem_max=26214400
net.core.wmem_max=26214400
net.ipv4.tcp_rmem=4096 87380 16777216
net.ipv4.tcp_wmem=4096 65536 16777216

Apply: sudo sysctl -p


Hardware Requirements | Run Validator | Run Archive Node | Monitoring | Troubleshooting

Community

Telegram: t.me/selendranetwork | X: @selendranetwork | GitHub: github.com/selendra/selendra

Contribute

Found an issue or want to contribute?

Help us improve this documentation by editing this page on GitHub.

Edit this page on GitHub