Selendra

Documentation

Run Validator

Setup and operate a Selendra validator node

Validators secure the Selendra network through block production and finality participation. Requires minimum stake of 10,000 SEL and reliable infrastructure. Current network: 4 validators. Expansion: 20 by end of 2026, 50+ by end of 2027.

Requirements

Staking & Hardware

RequirementSpecification
Minimum Stake10,000 SEL (self-stake + nominations)
CPU8 cores @ 3.0GHz+ (Intel Xeon or AMD Ryzen 9)
RAM16GB minimum (32GB recommended, ECC)
Storage200GB NVMe SSD (1TB for headroom)
Network100 Mbps upload min, 1 Gbps preferred
UPS30-60 minutes runtime

Infrastructure & Technical

High availability essential: Block production timing critical. Missed blocks reduce rewards and trigger penalties.

Redundant internet recommended: Primary fiber + backup 4G/5G prevents single ISP failure.

Technical requirements:

  • Linux server management via command line
  • Systemd service management
  • Firewall and network security configuration
  • Resource monitoring and log analysis
  • Binary upgrades with minimal downtime
  • Governance event responses

Validator Setup

1. Initial Full Node

Run standard full node first. Verify synchronization before registering as validator. Follow full node setup guide.

2. Generate Session Keys

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

Response returns hex-encoded session keys. Save securely - required for registration.

3. Configure Validator Mode

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

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

[Service]
Type=simple
User=selendra
WorkingDirectory=/var/lib/selendra
ExecStart=/usr/local/bin/selendra \
  --base-path /var/lib/selendra \
  --chain mainnet \
  --validator \
  --name "YourValidatorName" \
  --pruning 256 \
  --state-cache-size 4 \
  --port 30333 \
  --prometheus-port 9615 \
  --prometheus-external
Restart=on-failure
RestartSec=10
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target

Key changes: --validator flag enabled, RPC ports removed (security), Prometheus retained for monitoring.

sudo systemctl daemon-reload
sudo systemctl restart selendra

4. Secure Keys

sudo chmod 700 /var/lib/selendra
sudo chown -R selendra:selendra /var/lib/selendra

Controller account: Controls validator settings and stake. Store offline in hardware wallet.
Stash account: Holds bonded funds. Keep private key in cold storage.


Registration

Via Polkadot.js Apps

Navigate to portal.selendra.org:

  1. Bond tokens: Network → Staking → Accounts → Validator → Bond

    • Stash account: Account holding SEL
    • Controller: Account managing validator
    • Value: 10,000 SEL minimum
    • Payment destination: Stash (reinvest rewards)
  2. Set Session Keys: Paste session keys from RPC call

  3. Validate: Set commission (0-100%), submit transaction

Via API

import { ApiPromise, WsProvider } from "@polkadot/api";
import { Keyring } from "@polkadot/keyring";

const wsProvider = new WsProvider("wss://rpc.selendra.org");
const api = await ApiPromise.create({ provider: wsProvider });
const keyring = new Keyring({ type: "sr25519" });
const controller = keyring.addFromUri("//YourSeedPhrase");

// Bond tokens
await api.tx.staking
  .bond(
    controller.address,
    "10000000000000000000000", // 10,000 SEL
    "Staked"
  )
  .signAndSend(controller);

// Set session keys
const sessionKeys = "0x1234...abcd";
await api.tx.session.setKeys(sessionKeys, "0x").signAndSend(controller);

// Start validating (5% commission)
await api.tx.staking
  .validate({
    commission: 50000000, // 5% (Perbill)
    blocked: false,
  })
  .signAndSend(controller);

Validator Operations

Performance Monitoring

Track continuously:

  • Block production: Assigned blocks must be produced within 1-second window
  • Finality participation: AlephBFT requires active participation
  • Peer connectivity: Maintain 25+ peer connections
  • System resources: CPU, RAM, disk I/O under 80% usage

Rewards & Commission

Validator rewards earned each era (24 hours) based on:

  • Era points for block production
  • Finality participation
  • Total stake backing validator
  • Commission rate

Commission: Deducted from nominator rewards only. Self-stake rewards unaffected. Typical APR: ~15%.

Reserved vs Non-Reserved Validators

Reserved (foundation nodes):

  • Participate every session
  • Cannot be banned
  • Reward adjustment for poor performance
  • Currently: 2 of 4 validators

Non-reserved (community nodes):

  • Rotating participation
  • Can be banned for underperformance
  • Performance thresholds: 50% block production minimum, 5000 finality threshold
  • Underperformance for 3 sessions triggers 2-era ban
  • Currently: 2 of 4 validators

Timing

  • Session: 4 hours (validator set rotation interval)
  • Era: 24 hours (reward distribution and stake updates)

Common Tasks

Change Commission

await api.tx.staking
  .validate({
    commission: 100000000, // 10%
    blocked: false,
  })
  .signAndSend(controller);

Commission changes apply next era. Communicate changes to nominators.

Rotate Session Keys

sudo systemctl stop selendra
rm -rf /var/lib/selendra/chains/selendra/keystore
sudo systemctl start selendra

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

# Update on-chain via portal: Staking → Set Session Keys

Update Node

sudo systemctl stop selendra
sudo cp /usr/local/bin/selendra /usr/local/bin/selendra.backup

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

sudo systemctl start selendra
sudo journalctl -u selendra -f

Plan updates during low-activity periods. Coordinate with other validators.

Unbond Validator

  1. Chill: api.tx.staking.chill().signAndSend(controller)
  2. Unbond: api.tx.staking.unbond('10000...').signAndSend(controller)
  3. Wait: 28 days unbonding period
  4. Withdraw: api.tx.staking.withdrawUnbonded(0).signAndSend(controller)

Validator Application

Current network operates permissioned mode. Applications required for new validators.

Application Requirements

Technical:

  • Demonstrated Linux administration experience
  • Blockchain operation experience (preferred)
  • 24/7 monitoring capability
  • Redundant infrastructure or HA setup

Network contribution:

  • Geographic diversity valued
  • Community engagement (documentation, support, development)
  • Long-term commitment (minimum 1 year)

Financial:

  • 10,000 SEL minimum self-stake
  • Operating cost coverage

Application Process

  1. Join community: Telegram (t.me/selendranetwork)
  2. Demonstrate capability: Run testnet validator 2+ weeks
  3. Submit application:
    • Technical setup description
    • Hardware specifications
    • Network location and ISP
    • Team background
    • Commitment timeline
  4. Governance review: Core team and community evaluation
  5. Onboarding: Guidance for mainnet setup

Timeline: 2-4 weeks from application to mainnet validator.


Security Best Practices

Critical security measures:

  • Never expose validator RPC publicly
  • Protect session keys with proper filesystem permissions
  • Cold storage for controller and stash (hardware wallets)
  • DDoS protection for public endpoints
  • Regular security updates (OS and binary)
  • Backup validator configuration

Network Security

# Configure firewall
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow ssh
sudo ufw allow 30333/tcp  # P2P port
sudo ufw enable

# Fail2ban for SSH protection
sudo apt-get install fail2ban
sudo systemctl enable fail2ban

Backup Strategy

# backup-validator.sh
BACKUP_DIR="/backup/selendra/$(date +%Y%m%d)"
mkdir -p "$BACKUP_DIR"

# Backup keystore
tar -czf "$BACKUP_DIR/keystore.tar.gz" \
  /var/lib/selendra/chains/selendra/keystore

# Backup configs
cp /etc/systemd/system/selendra.service "$BACKUP_DIR/"

# Remote backup
aws s3 sync "$BACKUP_DIR" s3://selendra-backups/validator-$(hostname)/

Advanced Topics

Storage Optimization

# Optimize filesystem
sudo mkfs.ext4 -m 0 -b 4096 -L selendra /dev/nvme0n1
sudo tune2fs -o journal_data_writeback /dev/nvme0n1

# Mount with optimal flags
echo '/dev/nvme0n1 /var/lib/selendra ext4 noatime,nodiratime 0 1' | \
  sudo tee -a /etc/fstab

Monitoring Alerts

Prometheus alerting rules:

groups:
  - name: validator_critical
    rules:
      - alert: ValidatorOffline
        expr: up{job="selendra-validator"} == 0
        for: 1m
        labels:
          severity: critical

      - alert: ValidatorMissedBlocks
        expr: increase(substrate_block_proposals_total[5m]) < 5
        for: 2m
        labels:
          severity: warning

      - alert: LowPeerCount
        expr: substrate_network_peers < 20
        for: 5m
        labels:
          severity: warning

Staking Guide | Hardware Requirements | Monitoring | Troubleshooting

Community

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

Direct support available for validator candidates.

Contribute

Found an issue or want to contribute?

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

Edit this page on GitHub