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
| Issue | Diagnostic | Solution |
|---|---|---|
| Won't start | journalctl -u selendra -xe | Check port availability, permissions, dependencies |
| Slow sync | Check peer count via RPC | Verify port 30333 open, check firewall |
| High CPU | Normal during sync | After sync: increase RAM/cache, upgrade to NVMe, add rate limiting |
| Corruption | Logs show DB errors | Stop 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
Related Documentation
Hardware Requirements | Run Validator | Run Archive Node | Monitoring | Troubleshooting
Community
Telegram: t.me/selendranetwork | X: @selendranetwork | GitHub: github.com/selendra/selendra
Found an issue or want to contribute?
Help us improve this documentation by editing this page on GitHub.
