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
Build from Source
Prebuilt node binaries are not published per release. Build from source.
# 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). rust-toolchain.toml pins the toolchain.
git clone https://github.com/selendra/selendra.git
cd selendra
git submodule update --init --recursive
cargo build --release
sudo install target/release/selendra-node /usr/local/bin/
selendra-node --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-node \
--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-node \
--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
cd ~/selendra && git pull && git submodule update --init --recursive
cargo build --release
sudo install target/release/selendra-node /usr/local/bin/
selendra-node --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