How to Deploy a Node

Overview

This page explains how to set up and operate a Real Network node. The Real blockchain is EVM-compatible and runs under a Proof-of-Staked-Authority (PoSA) consensus with less than 3-second block times.


Node Types

  • Full Node: Syncs the entire blockchain and exposes RPC endpoints for queries.

  • Validator Node: Participates in block production and consensus. Requires staking and sentry node architecture.


Hardware and Network Requirements

Role

CPU

RAM

Disk

Network

Full Node

4 vCPU

16 GB

1 TB NVMe

100 Mbps

Validator

8 vCPU

32 GB

2 TB NVMe

200 Mbps

  • OS: Ubuntu 22.04 LTS (recommended)

  • Ports: 30303 (p2p), 8545 (HTTP RPC), 8546 (WS RPC), 6060 (metrics)

  • Time Sync: Keep system clock in sync using NTP.


Quick Start (Docker)

# Install dependencies
sudo apt update && sudo apt install -y docker.io docker-compose-plugin curl jq

# Create directories
sudo mkdir -p /opt/real/{data,config}

# Download configs
curl -L "<GENESIS_JSON_URL>" -o /opt/real/config/genesis.json
curl -L "<BOOTNODES_URL>" -o /opt/real/config/bootnodes.txt

# Create docker-compose.yml
cat > /opt/real/docker-compose.yml <<'YAML'
services:
  real-node:
    image: <REAL_NODE_IMAGE>:<TAG>
    container_name: real-node
    restart: unless-stopped
    ports:
      - "30303:30303/tcp"
      - "30303:30303/udp"
      - "127.0.0.1:8545:8545"
      - "127.0.0.1:8546:8546"
      - "6060:6060"
    volumes:
      - /opt/real/data:/var/lib/real
      - /opt/real/config:/config
    command: [
      "--data-path=/var/lib/real",
      "--chain=/config/genesis.json",
      "--bootnodes-file=/config/bootnodes.txt",
      "--nat=extip:<PUBLIC_IP>",
      "--port=30303",
      "--rpc-http-enabled=true",
      "--rpc-http-addr=0.0.0.0",
      "--rpc-http-port=8545",
      "--metrics-enabled=true",
      "--metrics-port=6060"
    ]
YAML

# Launch node
cd /opt/real && docker compose up -d

Binary Installation (Alternative)

# Download release
curl -L "<REAL_NODE_TARBALL_URL>" -o /tmp/real-node.tar.gz
sudo mkdir -p /opt/real/{bin,config,data}
cd /opt/real/bin && sudo tar -xzf /tmp/real-node.tar.gz

# Systemd service
sudo tee /etc/systemd/system/real-node.service > /dev/null <<'UNIT'
[Unit]
Description=Real Node
After=network-online.target

[Service]
ExecStart=/opt/real/bin/real-node \
  --data-path=/opt/real/data \
  --chain=/opt/real/config/genesis.json \
  --bootnodes-file=/opt/real/config/bootnodes.txt \
  --port=30303 \
  --rpc-http-enabled=true \
  --rpc-http-addr=127.0.0.1 \
  --rpc-http-port=8545 \
  --metrics-enabled=true \
  --metrics-port=6060
Restart=on-failure
RestartSec=5
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target
UNIT

sudo systemctl daemon-reload
sudo systemctl enable real-node
sudo systemctl start real-node

Fast Sync from Snapshot

# Stop node
sudo systemctl stop real-node || true

# Clear data
m -rf /opt/real/data && mkdir -p /opt/real/data

# Download snapshot
curl -L "<SNAPSHOT_URL>" | tar -xz -C /opt/real/data

# Restart
sudo systemctl start real-node

Becoming a Validator

  1. Generate validator keys (offline if possible).

  2. Fund the validator address with staking tokens.

  3. Register validator metadata via CLI or dApp.

  4. Stake the minimum required amount.

  5. Run the validator behind sentry nodes to protect its IP.


Monitoring and Maintenance

  • Metrics endpoint: http://localhost:6060/metrics (Prometheus)

  • Logs: docker logs -f real-node or journalctl -u real-node

  • Alerts: trigger if block height lags >100 blocks or peer count <3


Security Best Practices

  • Keep RPC on 127.0.0.1; never expose it directly to the internet.

  • Use firewalls (UFW/security groups) to restrict access.

  • Apply system and Docker updates regularly.

  • Back up validator keys and config files securely.

Last updated