diff --git a/LICENSE b/LICENSE deleted file mode 100644 index cf3714f..0000000 --- a/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -GNU GENERAL PUBLIC LICENSE -Version 3, 29 June 2007 - -Copyright (C) 2007 Free Software Foundation, Inc. -Everyone is permitted to copy and distribute verbatim copies -of this license document, but changing it is not allowed. - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . diff --git a/README.md b/README.md index 4d9de92..259d2dc 100644 --- a/README.md +++ b/README.md @@ -1,197 +1,355 @@ -# Pezkuwi Validator Installer +# Pezkuwi Beta Testnet - Validator Package v2.0.0 -One-click validator installer for Pezkuwi testnet. Cross-platform scripts for automated node deployment. +Simplified validator setup package for Pezkuwi blockchain beta testnet with 8 validators running on a single machine. -## 🚀 Quick Start +## Features -### Linux / macOS (One-Line Install) -bash -curl -sSf https://raw.githubusercontent.com/pezkuwichain/pezkuwi-validator-v1.0.0/main/scripts/linux/install-validator.sh | bash +- **One-command setup** - Automated installation and configuration +- **Automatic dependency checking** - Detects and guides installation of required tools +- **Shared SDK build** - Single Pezkuwi-SDK build shared across all validators +- **Single DKSweb frontend** - One frontend instance with auto-update from GitHub +- **Real validator keys** - Pre-configured with actual beta testnet validator keys +- **Systemd service management** - Easy start/stop/restart with systemd +- **Helper scripts** - Convenient management scripts for all validators +- **Nginx deployment** - Production-ready frontend deployment +## System Requirements -**⚠️ Note:** This will install Pezkuwi validator to `~/.pezkuwi/` directory. +### Required Dependencies +- **Git** - Version control +- **Rust & Cargo** - Substrate/Polkadot SDK compilation +- **Node.js & npm** - Frontend build (v16+ recommended) +- **Build tools** - build-essential, cmake, clang, libssl-dev, pkg-config +- **Nginx** - Frontend web server +- **Systemd** - Service management (included in Ubuntu) -### What Gets Installed? +### Recommended System +- **OS**: Ubuntu 20.04 LTS or newer +- **CPU**: 4+ cores +- **RAM**: 8GB+ +- **Storage**: 50GB+ SSD +- **Network**: Stable internet connection -- **Binaries**: pezkuwi, pezkuwi-prepare-worker, pezkuwi-execute-worker (67 MB) -- **Chain Spec**: Testnet configuration -- **Systemd Service**: Auto-restart on failure -- **Validator Keys**: Automatically generated +## Directory Structure -### Test Installation (Dry Run) -bash -# Download script and review it first -wget https://raw.githubusercontent.com/pezkuwichain/pezkuwi-validator-v1.0.0/main/scripts/linux/install-validator.sh -less install-validator.sh -bash install-validator.sh +``` +beta_testnet/ +├── README.md # This file +├── setup.sh # Main setup script +├── config/ # Global configuration +├── scripts/ # Helper scripts +│ ├── start.sh # Start individual validator +│ ├── stop.sh # Stop individual validator +│ ├── status.sh # Check validator status +│ └── logs.sh # View validator logs +├── validators/ # Validator-specific data +│ ├── validator1/ +│ │ ├── config/ +│ │ │ └── keys.sh # Validator 1 keys (RPC: 9944, Bootnode) +│ │ ├── data/ # Blockchain data +│ │ ├── keys/ # Keystore +│ │ └── logs/ # Log files +│ ├── validator2/ # RPC: 9945, P2P: 30334 +│ ├── validator3/ # RPC: 9946, P2P: 30335 +│ ├── validator4/ # RPC: 9947, P2P: 30336 +│ ├── validator5/ # RPC: 9948, P2P: 30337 +│ ├── validator6/ # RPC: 9949, P2P: 30338 +│ ├── validator7/ # RPC: 9950, P2P: 30339 +│ └── validator8/ # RPC: 9951, P2P: 30340 +├── shared/ # Shared resources +│ ├── pezkuwi-sdk/ # Shared SDK build +│ └── dksweb/ # Shared frontend +└── systemd/ # Systemd service templates +``` -### Windows (PowerShell) +## Port Allocation -**⚠️ Run as Administrator** -powershell -iwr -useb https://raw.githubusercontent.com/pezkuwichain/pezkuwi-validator-v1.0.0/main/scripts/windows/install-validator.ps1 | iex +| Validator | RPC Port | P2P Port | WS Port | Prometheus | +|-----------|----------|----------|---------|------------| +| 1 (Boot) | 9944 | 30333 | 9944 | 9615 | +| 2 | 9945 | 30334 | 9945 | 9616 | +| 3 | 9946 | 30335 | 9946 | 9617 | +| 4 | 9947 | 30336 | 9947 | 9618 | +| 5 | 9948 | 30337 | 9948 | 9619 | +| 6 | 9949 | 30338 | 9949 | 9620 | +| 7 | 9950 | 30339 | 9950 | 9621 | +| 8 | 9951 | 30340 | 9951 | 9622 | +## Quick Start -**What Gets Installed?** +### 1. Initial Setup -- **Binaries**: pezkuwi.exe, pezkuwi-prepare-worker.exe, pezkuwi-execute-worker.exe -- **Windows Service**: PezkuwiValidator (auto-start enabled) -- **Dependencies**: Chocolatey, NSSM (service manager) -- **Firewall**: Ports 30333 and 9944 (manual configuration may be required) +Run the main setup script with a validator number (1-8): -**Manual Installation (if one-liner fails):** -powershell -# Download script -Invoke-WebRequest -Uri "https://raw.githubusercontent.com/pezkuwichain/pezkuwi-validator-v1.0.0/main/scripts/windows/install-validator.ps1" -OutFile "install-validator.ps1" +```bash +cd /home/mamostehp/pezkuwi-validator-v2.0.0/beta_testnet +sudo ./setup.sh 1 +``` -# Review script -notepad install-validator.ps1 +This will: +- Check all dependencies +- Clone/update Pezkuwi-SDK (if needed) +- Build SDK in release mode (shared build) +- Clone/update DKSweb frontend (if needed) +- Build and deploy frontend with Nginx +- Insert validator keys +- Create systemd service +- Start the validator -# Run as Administrator -.\install-validator.ps1 +### 2. Setup Additional Validators +```bash +sudo ./setup.sh 2 +sudo ./setup.sh 3 +# ... up to 8 +``` -**Check Service Status:** -powershell -Get-Service PezkuwiValidator +### 3. Verify All Validators Are Running +```bash +./scripts/status.sh +``` -### Docker (Recommended for Production) +## Helper Scripts Usage -**Prerequisites:** Docker 20.10+ and Docker Compose 2.0+ -bash -# Clone repository -git clone https://github.com/pezkuwichain/pezkuwi-validator-v1.0.0.git -cd pezkuwi-validator-v1.0.0/docker +### Start Validator -# Start validator -docker-compose up -d - -# View logs -docker-compose logs -f pezkuwi-validator - - -**With Monitoring (Prometheus + Grafana):** -bash -docker-compose --profile monitoring up -d - - -**Access:** -- Validator RPC: http://localhost:9944 -- Prometheus: http://localhost:9090 -- Grafana: http://localhost:3000 (admin/pezkuwi123) - -📚 **Full Docker documentation:** [docker/README.md](./docker/README.md) - -## 📋 Prerequisites - -- **OS**: Linux (Ubuntu 20.04+, Debian 11+, Fedora 35+) -- **CPU**: Minimum 2 cores (4+ recommended) -- **RAM**: Minimum 4GB (8GB+ recommended) -- **Storage**: 50GB+ free space -- **Network**: Public IP with ports 30333 (P2P) and 9944 (RPC) open - -## 🔧 What Does the Installer Do? - -1. ✅ Checks system requirements -2. ✅ Installs dependencies -3. ✅ Downloads Pezkuwi binaries from GitHub Releases (67 MB compressed) -4. ✅ Extracts binaries to `~/.pezkuwi/bin/` -5. ✅ Downloads chain specification -6. ✅ Generates validator keys automatically -7. ✅ Creates systemd service (auto-restart enabled) -8. ✅ Starts validator node -9. ✅ Displays node ID and useful commands - -## 📊 Post-Installation - -### Check Node Status -bash -sudo systemctl status pezkuwi-validator - - -### View Live Logs -bash -sudo journalctl -u pezkuwi-validator -f +Start a single validator: +```bash +./scripts/start.sh 1 +``` +Start all validators: +```bash +for i in {1..8}; do ./scripts/start.sh $i; done +``` ### Stop Validator -bash -sudo systemctl stop pezkuwi-validator +Stop a single validator: +```bash +./scripts/stop.sh 1 +``` -### Restart Validator -bash -sudo systemctl restart pezkuwi-validator +Stop all validators: +```bash +for i in {1..8}; do ./scripts/stop.sh $i; done +``` +### Check Status -## 📁 Installation Directory +Check single validator: +```bash +./scripts/status.sh 1 +``` -All files are installed to: `~/.pezkuwi/` +Check all validators: +```bash +./scripts/status.sh +``` -~/.pezkuwi/ -├── bin/ # Binaries -├── config/ # Chain spec -├── data/ # Blockchain data -└── keys/ # Validator keys +### View Logs +View logs for a validator: +```bash +./scripts/logs.sh 1 +``` -## 🔑 Your Validator Keys +Follow logs in real-time: +```bash +./scripts/logs.sh 1 follow +``` -After installation, your node ID is saved in: -bash -cat ~/.pezkuwi/keys/node-id.txt +## Systemd Service Management +Validators are managed as systemd services: -**⚠️ IMPORTANT**: Backup this file! You'll need it for testnet registration. +```bash +# Start validator +sudo systemctl start pezkuwi-validator-1 -## 🌐 Connect to Your Node +# Stop validator +sudo systemctl stop pezkuwi-validator-1 -- **RPC Endpoint**: `http://localhost:9944` -- **WebSocket**: `ws://localhost:9944` +# Restart validator +sudo systemctl restart pezkuwi-validator-1 -Test connection: -bash +# Check status +sudo systemctl status pezkuwi-validator-1 + +# View logs +sudo journalctl -u pezkuwi-validator-1 -f + +# Enable auto-start on boot +sudo systemctl enable pezkuwi-validator-1 + +# Disable auto-start +sudo systemctl disable pezkuwi-validator-1 +``` + +## Validator Keys + +Each validator has 6 types of keys pre-configured in `validators/validatorN/config/keys.sh`: + +- **BABE** - Block authorship (sr25519) +- **GRANDPA** - Finality (ed25519) +- **PARA** - Parachain validation (sr25519) +- **ASGN** - Assignment (sr25519) +- **AUDI** - Authority discovery (sr25519) +- **BEEF** - BEEFY consensus (ecdsa) + +**SECURITY WARNING**: These keys are for beta testnet only. Never use testnet keys in production! + +## Frontend Access + +After setup, DKSweb frontend is available at: +- **Local**: http://localhost (via Nginx) +- **Network**: http://YOUR_SERVER_IP + +The frontend connects to validator 1 (bootnode) by default at `ws://127.0.0.1:9944`. + +## Troubleshooting + +### Validator Won't Start + +Check logs: +```bash +./scripts/logs.sh 1 +# or +sudo journalctl -u pezkuwi-validator-1 -n 100 +``` + +Common issues: +- Port already in use +- Keys not inserted properly +- Insufficient permissions +- Blockchain data corruption + +### Port Already in Use + +Check what's using the port: +```bash +sudo lsof -i :9944 +``` + +Kill the process: +```bash +sudo kill -9 +``` + +### Clear Blockchain Data + +To reset a validator's blockchain data: +```bash +sudo systemctl stop pezkuwi-validator-1 +rm -rf /home/mamostehp/pezkuwi-validator-v2.0.0/beta_testnet/validators/validator1/data/* +sudo systemctl start pezkuwi-validator-1 +``` + +### Rebuild SDK + +If you need to rebuild the SDK: +```bash +cd /home/mamostehp/pezkuwi-validator-v2.0.0/beta_testnet/shared/pezkuwi-sdk +cargo clean +cargo build --release +``` + +### Frontend Not Loading + +Check Nginx status: +```bash +sudo systemctl status nginx +``` + +Check Nginx logs: +```bash +sudo tail -f /var/log/nginx/error.log +``` + +Restart Nginx: +```bash +sudo systemctl restart nginx +``` + +### Re-insert Keys + +If keys need to be re-inserted: +```bash +cd /home/mamostehp/pezkuwi-validator-v2.0.0/beta_testnet +source validators/validator1/config/keys.sh + +# Insert each key type curl -H "Content-Type: application/json" \ - -d '{"id":1, "jsonrpc":"2.0", "method": "system_health"}' \ - http://localhost:9944 + -d "{\"id\":1,\"jsonrpc\":\"2.0\",\"method\":\"author_insertKey\",\"params\":[\"babe\",\"$BABE_SEED\",\"$BABE_PUBLIC_KEY\"]}" \ + http://127.0.0.1:9944 +``` +## Network Information -## 🆘 Troubleshooting +- **Network**: Pezkuwi Beta Testnet +- **Chain Spec**: pezkuwichain-beta-testnet +- **Genesis**: Same across all validators +- **Bootnode**: Validator 1 (127.0.0.1:30333) -### Node Not Starting -bash -# Check logs -sudo journalctl -u pezkuwi-validator -n 100 +## Maintenance -# Check service status -sudo systemctl status pezkuwi-validator +### Update SDK +```bash +cd /home/mamostehp/pezkuwi-validator-v2.0.0/beta_testnet/shared/pezkuwi-sdk +git pull origin main +cargo build --release -### Firewall Issues -bash -# Open required ports (Ubuntu/Debian) -sudo ufw allow 30333/tcp -sudo ufw allow 9944/tcp +# Restart all validators +for i in {1..8}; do sudo systemctl restart pezkuwi-validator-$i; done +``` +### Update Frontend -## 📚 Documentation +```bash +cd /home/mamostehp/pezkuwi-validator-v2.0.0/beta_testnet/shared/dksweb +git pull origin main +npm install +npm run build +sudo systemctl restart nginx +``` -- [Validator Guide](./docs/VALIDATOR-GUIDE.md) -- [Troubleshooting](./docs/TROUBLESHOOTING.md) -- [FAQ](./docs/FAQ.md) +### Backup Validator Keys -## 🤝 Support +```bash +# Backup all validator keys +tar -czf validator-keys-backup.tar.gz validators/validator*/config/keys.sh -- GitHub Issues: https://github.com/pezkuwichain/pezkuwi-validator-v1.0.0/issues -- Telegram: https://t.me/pezkuwichain -- Discord: Coming soon +# Copy to safe location +cp validator-keys-backup.tar.gz /backup/location/ +``` -## 📜 License +## Security Best Practices -GNU General Public License v3.0 +1. **Never expose RPC ports to public internet** - Use firewall rules +2. **Backup validator keys securely** - Store encrypted backups offline +3. **Use different keys for production** - Never reuse testnet keys +4. **Keep system updated** - Regular security updates +5. **Monitor validator logs** - Watch for suspicious activity +6. **Restrict SSH access** - Use key-based authentication only +7. **Run validators as non-root** - Use dedicated user accounts + +## Support + +For issues or questions: +- Check logs first: `./scripts/logs.sh ` +- Review this README +- Check validator status: `./scripts/status.sh` +- Consult Pezkuwi documentation + +## License + +This validator package is part of the Pezkuwi blockchain project. --- -**Made with ❤️ by Kurdistan Tech Ministry** +**Last Updated**: 2025-11-05 +**Package Version**: 2.0.0 +**Network**: Beta Testnet (8 Validators) diff --git a/docker/Dockerfile b/docker/Dockerfile deleted file mode 100644 index 9260c07..0000000 --- a/docker/Dockerfile +++ /dev/null @@ -1,56 +0,0 @@ -# Pezkuwi Validator Docker Image -FROM ubuntu:22.04 - -LABEL maintainer="pezkuwichain" -LABEL description="Pezkuwi blockchain validator node" -LABEL version="1.0.0" - -# Install dependencies -RUN apt-get update && \ - apt-get install -y --no-install-recommends \ - ca-certificates \ - curl \ - && rm -rf /var/lib/apt/lists/* - -# Create pezkuwi user -RUN useradd -m -u 1000 -U -s /bin/sh -d /pezkuwi pezkuwi - -# Set working directory -WORKDIR /pezkuwi - -# Download and extract binaries -ARG PEZKUWI_VERSION=v1.0.0-local-testnet-success -RUN curl -L "https://github.com/pezkuwichain/pezkuwi-sdk/releases/download/${PEZKUWI_VERSION}/pezkuwi-binaries-linux-x86_64.tar.gz" \ - | tar xz -C /usr/local/bin/ && \ - chmod +x /usr/local/bin/pezkuwi && \ - chmod +x /usr/local/bin/pezkuwi-prepare-worker && \ - chmod +x /usr/local/bin/pezkuwi-execute-worker - -# Download chain spec -RUN curl -o /pezkuwi/chain-spec.json \ - https://raw.githubusercontent.com/pezkuwichain/pezkuwi-sdk/main/pezkuwi-local-raw.json - -# Create data directory -RUN mkdir -p /pezkuwi/data && \ - chown -R pezkuwi:pezkuwi /pezkuwi - -# Switch to pezkuwi user -USER pezkuwi - -# Expose ports -EXPOSE 30333 9944 9615 - -# Health check -HEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=3 \ - CMD curl -f http://localhost:9944 || exit 1 - -# Default command -ENTRYPOINT ["/usr/local/bin/pezkuwi"] -CMD ["--chain", "/pezkuwi/chain-spec.json", \ - "--base-path", "/pezkuwi/data", \ - "--validator", \ - "--port", "30333", \ - "--rpc-port", "9944", \ - "--rpc-cors", "all", \ - "--rpc-external", \ - "--prometheus-external"] diff --git a/docker/README.md b/docker/README.md deleted file mode 100644 index fb23f29..0000000 --- a/docker/README.md +++ /dev/null @@ -1,157 +0,0 @@ -# Pezkuwi Validator - Docker Setup - -Run Pezkuwi validator node using Docker and Docker Compose. - -## 🚀 Quick Start - -### Prerequisites - -- Docker 20.10+ -- Docker Compose 2.0+ - -**Install Docker:** -```bash -# Linux -curl -fsSL https://get.docker.com | sh -sudo usermod -aG docker $USER - -# Verify -docker --version -docker-compose --version -``` - -### Run Validator -```bash -# Clone repository -git clone https://github.com/pezkuwichain/pezkuwi-validator-v1.0.0.git -cd pezkuwi-validator-v1.0.0/docker - -# Start validator -docker-compose up -d - -# Check logs -docker-compose logs -f pezkuwi-validator - -# Check status -docker-compose ps -``` - -## 📊 Monitoring (Optional) - -Start with Prometheus and Grafana: -```bash -docker-compose --profile monitoring up -d -``` - -**Access:** -- Prometheus: http://localhost:9090 -- Grafana: http://localhost:3000 (admin/pezkuwi123) - -## 🔧 Management Commands -```bash -# Stop validator -docker-compose stop - -# Restart validator -docker-compose restart - -# View logs -docker-compose logs -f - -# Remove everything (including data) -docker-compose down -v - -# Update to latest version -docker-compose pull -docker-compose up -d -``` - -## 📁 Data Persistence - -Blockchain data is stored in Docker volume: `validator-data` - -**Backup data:** -```bash -docker run --rm -v validator-data:/data -v $(pwd):/backup ubuntu tar czf /backup/validator-backup.tar.gz /data -``` - -**Restore data:** -```bash -docker run --rm -v validator-data:/data -v $(pwd):/backup ubuntu tar xzf /backup/validator-backup.tar.gz -C / -``` - -## 🔑 Validator Keys - -Keys are generated automatically on first start in `/pezkuwi/data/chains/` - -**Extract your Node ID:** -```bash -docker-compose exec pezkuwi-validator cat /pezkuwi/data/chains/pezkuwi_testnet/network/secret_ed25519 -``` - -## 🌐 Network Ports - -- **30333**: P2P port (required for validators) -- **9944**: RPC/WebSocket (for local access) -- **9615**: Prometheus metrics - -## 🐛 Troubleshooting - -### Container won't start -```bash -# Check logs -docker-compose logs pezkuwi-validator - -# Rebuild image -docker-compose build --no-cache -docker-compose up -d -``` - -### Out of disk space -```bash -# Check disk usage -docker system df - -# Prune unused data -docker system prune -a -``` - -### Performance issues -```bash -# Check resource usage -docker stats pezkuwi-validator - -# Increase resources in Docker Desktop settings -``` - -## 🔄 Updates -```bash -# Pull latest image -docker-compose pull - -# Restart with new image -docker-compose up -d -``` - -## 📝 Custom Configuration - -Edit `docker-compose.yml` to customize: -- Node name -- Ports -- Resource limits -- Logging options - -Example resource limits: -```yaml -services: - pezkuwi-validator: - # ... other config - deploy: - resources: - limits: - cpus: '2' - memory: 4G - reservations: - cpus: '1' - memory: 2G -``` diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml deleted file mode 100644 index ae5ea98..0000000 --- a/docker/docker-compose.yml +++ /dev/null @@ -1,82 +0,0 @@ -version: '3.8' - -services: - pezkuwi-validator: - build: - context: . - dockerfile: Dockerfile - container_name: pezkuwi-validator - restart: unless-stopped - ports: - - "30333:30333" # P2P - - "9944:9944" # RPC - - "9615:9615" # Prometheus metrics - volumes: - - validator-data:/pezkuwi/data - - ./chain-spec.json:/pezkuwi/chain-spec.json:ro - environment: - - RUST_LOG=info - command: [ - "--chain", "/pezkuwi/chain-spec.json", - "--base-path", "/pezkuwi/data", - "--validator", - "--name", "Docker-Validator", - "--port", "30333", - "--rpc-port", "9944", - "--rpc-cors", "all", - "--rpc-external", - "--rpc-methods=unsafe", - "--prometheus-external", - "--prometheus-port", "9615" - ] - networks: - - pezkuwi-network - logging: - driver: "json-file" - options: - max-size: "10m" - max-file: "3" - - # Optional: Prometheus monitoring - prometheus: - image: prom/prometheus:latest - container_name: pezkuwi-prometheus - restart: unless-stopped - ports: - - "9090:9090" - volumes: - - ./prometheus.yml:/etc/prometheus/prometheus.yml:ro - - prometheus-data:/prometheus - command: - - '--config.file=/etc/prometheus/prometheus.yml' - - '--storage.tsdb.path=/prometheus' - networks: - - pezkuwi-network - profiles: - - monitoring - - # Optional: Grafana dashboard - grafana: - image: grafana/grafana:latest - container_name: pezkuwi-grafana - restart: unless-stopped - ports: - - "3000:3000" - volumes: - - grafana-data:/var/lib/grafana - environment: - - GF_SECURITY_ADMIN_PASSWORD=pezkuwi123 - - GF_USERS_ALLOW_SIGN_UP=false - networks: - - pezkuwi-network - profiles: - - monitoring - -volumes: - validator-data: - prometheus-data: - grafana-data: - -networks: - pezkuwi-network: - driver: bridge diff --git a/docker/prometheus.yml b/docker/prometheus.yml deleted file mode 100644 index ae12b83..0000000 --- a/docker/prometheus.yml +++ /dev/null @@ -1,11 +0,0 @@ -global: - scrape_interval: 15s - evaluation_interval: 15s - -scrape_configs: - - job_name: 'pezkuwi-validator' - static_configs: - - targets: ['pezkuwi-validator:9615'] - labels: - instance: 'validator-1' - network: 'pezkuwi-testnet' diff --git a/scripts/linux/install-validator.sh b/scripts/linux/install-validator.sh deleted file mode 100755 index a19dc50..0000000 --- a/scripts/linux/install-validator.sh +++ /dev/null @@ -1,200 +0,0 @@ - -#!/bin/bash -# Pezkuwi Validator One-Line Installer -# Usage: curl -sSf https://raw.githubusercontent.com/pezkuwichain/pezkuwi-validator-v1.0.0/main/scripts/linux/install-validator.sh | bas -set -e - -echo "🚀 Pezkuwi Validator Installer v1.0.0" -echo "======================================" -echo "" - -# Colors -RED='\033[0;31m' -GREEN='\033[0;32m' -YELLOW='\033[1;33m' -NC='\033[0m' - -# Configuration -PEZKUWI_VERSION="v1.0.0-local-testnet-success" -GITHUB_REPO="pezkuwichain/pezkuwi-sdk" -INSTALL_DIR="$HOME/.pezkuwi" -CHAIN_SPEC_URL="https://raw.githubusercontent.com/${GITHUB_REPO}/main/pezkuwi-local-raw.json" - -# Functions -print_success() { - echo -e "${GREEN}✓${NC} $1" -} - -print_error() { - echo -e "${RED}✗${NC} $1" -} - -print_info() { - echo -e "${YELLOW}ℹ${NC} $1" -} - -check_requirements() { - print_info "Checking system requirements..." - - if [[ "$OSTYPE" != "linux-gnu"* ]]; then - print_error "This script only supports Linux" - exit 1 - fi - - CPU_CORES=$(nproc) - if [ "$CPU_CORES" -lt 2 ]; then - print_error "Minimum 2 CPU cores required (found: $CPU_CORES)" - exit 1 - fi - - TOTAL_RAM=$(free -g | awk '/^Mem:/{print $2}') - if [ "$TOTAL_RAM" -lt 4 ]; then - print_error "Minimum 4GB RAM required (found: ${TOTAL_RAM}GB)" - exit 1 - fi - - print_success "System requirements met" -} - -install_dependencies() { - print_info "Installing dependencies..." - - if command -v apt-get &> /dev/null; then - sudo apt-get update -qq - sudo apt-get install -y curl wget tar - elif command -v yum &> /dev/null; then - sudo yum install -y curl wget tar - else - print_error "Unsupported package manager" - exit 1 - fi - - print_success "Dependencies installed" -} - -download_binaries() { - print_info "Downloading Pezkuwi binaries..." - - mkdir -p "$INSTALL_DIR/bin" - - RELEASE_URL="https://github.com/${GITHUB_REPO}/releases/download/${PEZKUWI_VERSION}" - ARCHIVE_NAME="pezkuwi-binaries-linux-x86_64.tar.gz" - - # Download tar.gz archive - wget -q --show-progress -O "/tmp/${ARCHIVE_NAME}" "${RELEASE_URL}/${ARCHIVE_NAME}" || { - print_error "Failed to download binaries" - print_info "Please check if release exists: ${RELEASE_URL}" - exit 1 - } - # Extract binaries - tar -xzf "/tmp/${ARCHIVE_NAME}" -C "$INSTALL_DIR/bin/" - rm "/tmp/${ARCHIVE_NAME}" - chmod +x "$INSTALL_DIR/bin/pezkuwi" - print_success "Binaries downloaded" -} - -download_chain_spec() { - print_info "Downloading chain specification..." - - mkdir -p "$INSTALL_DIR/config" - wget -q -O "$INSTALL_DIR/config/chain-spec.json" "$CHAIN_SPEC_URL" || { - print_error "Failed to download chain spec" - exit 1 - } - - print_success "Chain spec downloaded" -} - -generate_keys() { - print_info "Generating validator keys..." - - mkdir -p "$INSTALL_DIR/keys" - - "$INSTALL_DIR/bin/pezkuwi" key generate-node-key \ - --base-path "$INSTALL_DIR/data" \ - --chain "$INSTALL_DIR/config/chain-spec.json" > "$INSTALL_DIR/keys/node-id.txt" - - NODE_ID=$(cat "$INSTALL_DIR/keys/node-id.txt") - print_success "Keys generated" - print_info "Your Node ID: $NODE_ID" -} - -create_systemd_service() { - print_info "Creating systemd service..." - - sudo tee /etc/systemd/system/pezkuwi-validator.service > /dev/null << SERVICE -[Unit] -Description=Pezkuwi Validator Node -After=network.target - -[Service] -Type=simple -User=$USER -WorkingDirectory=$INSTALL_DIR -ExecStart=$INSTALL_DIR/bin/pezkuwi \\ - --chain $INSTALL_DIR/config/chain-spec.json \\ - --base-path $INSTALL_DIR/data \\ - --validator \\ - --name "Validator-\$(hostname)" \\ - --port 30333 \\ - --rpc-port 9944 \\ - --rpc-cors all \\ - --rpc-methods=unsafe -Restart=always -RestartSec=10 - -[Install] -WantedBy=multi-user.target -SERVICE - - sudo systemctl daemon-reload - sudo systemctl enable pezkuwi-validator - print_success "Systemd service created" -} - -start_validator() { - print_info "Starting validator..." - - sudo systemctl start pezkuwi-validator - sleep 3 - - if sudo systemctl is-active --quiet pezkuwi-validator; then - print_success "Validator started successfully!" - else - print_error "Failed to start validator" - print_info "Check logs: sudo journalctl -u pezkuwi-validator -f" - exit 1 - fi -} - -print_summary() { - echo "" - echo "======================================" - echo "🎉 Installation Complete!" - echo "======================================" - echo "" - echo "📍 Install Directory: $INSTALL_DIR" - echo "🔑 Node ID: $(cat $INSTALL_DIR/keys/node-id.txt)" - echo "" - echo "📊 Useful Commands:" - echo " • Check status: sudo systemctl status pezkuwi-validator" - echo " • View logs: sudo journalctl -u pezkuwi-validator -f" - echo " • Stop node: sudo systemctl stop pezkuwi-validator" - echo " • Restart node: sudo systemctl restart pezkuwi-validator" - echo "" - echo "🌐 RPC Endpoint: http://localhost:9944" - echo "" -} - -main() { - check_requirements - install_dependencies - download_binaries - download_chain_spec - generate_keys - create_systemd_service - start_validator - print_summary -} - -main diff --git a/scripts/logs.sh b/scripts/logs.sh new file mode 100755 index 0000000..b63dd3d --- /dev/null +++ b/scripts/logs.sh @@ -0,0 +1,42 @@ +#!/bin/bash + +# Logs viewer script +# Usage: ./logs.sh [validator_number] [lines] + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +VALIDATORS_DIR="$SCRIPT_DIR/../validators" + +GREEN='\033[0;32m' +RED='\033[0;31m' +YELLOW='\033[1;33m' +BLUE='\033[0;34m' +NC='\033[0m' + +if [ -z "$1" ]; then + echo -e "${RED}Error: Validator number required${NC}" + echo "Usage: $0 [validator_number] [lines (default: 50)]" + exit 1 +fi + +VALIDATOR_NUM=$1 +LINES=${2:-50} +VALIDATOR_DIR="$VALIDATORS_DIR/validator$VALIDATOR_NUM" + +echo -e "${BLUE}=== Validator $VALIDATOR_NUM Logs (last $LINES lines) ===${NC}\n" + +if [ -f "$VALIDATOR_DIR/logs/validator.log" ]; then + tail -n "$LINES" "$VALIDATOR_DIR/logs/validator.log" + echo -e "\n${YELLOW}To follow logs in real-time, use:${NC}" + echo "tail -f $VALIDATOR_DIR/logs/validator.log" +else + echo -e "${YELLOW}No logs found. Service may not have started yet.${NC}" + echo -e "\nTry viewing with journalctl:" + echo "sudo journalctl -u pezkuwi-validator-$VALIDATOR_NUM -n $LINES" +fi + +echo -e "\n${BLUE}=== Error Logs ===${NC}\n" +if [ -f "$VALIDATOR_DIR/logs/validator-error.log" ]; then + tail -n "$LINES" "$VALIDATOR_DIR/logs/validator-error.log" +else + echo -e "${GREEN}No errors${NC}" +fi diff --git a/scripts/start.sh b/scripts/start.sh new file mode 100755 index 0000000..3c95688 --- /dev/null +++ b/scripts/start.sh @@ -0,0 +1,34 @@ +#!/bin/bash + +# Start validator script +# Usage: ./start.sh [validator_number] + +set -e + +GREEN='\033[0;32m' +RED='\033[0;31m' +YELLOW='\033[1;33m' +NC='\033[0m' + +if [ -z "$1" ]; then + echo -e "${RED}Error: Validator number required${NC}" + echo "Usage: $0 [validator_number]" + exit 1 +fi + +VALIDATOR_NUM=$1 + +echo -e "${YELLOW}Starting Validator $VALIDATOR_NUM...${NC}" +sudo systemctl start pezkuwi-validator-$VALIDATOR_NUM + +# Wait for service to start +sleep 2 + +# Check status +if sudo systemctl is-active --quiet pezkuwi-validator-$VALIDATOR_NUM; then + echo -e "${GREEN}✓ Validator $VALIDATOR_NUM started successfully${NC}" +else + echo -e "${RED}✗ Failed to start Validator $VALIDATOR_NUM${NC}" + echo "Check logs with: ./scripts/logs.sh $VALIDATOR_NUM" + exit 1 +fi diff --git a/scripts/status.sh b/scripts/status.sh new file mode 100755 index 0000000..40ee96e --- /dev/null +++ b/scripts/status.sh @@ -0,0 +1,35 @@ +#!/bin/bash + +# Status checker script +# Usage: ./status.sh [validator_number] + +GREEN='\033[0;32m' +RED='\033[0;31m' +YELLOW='\033[1;33m' +BLUE='\033[0;34m' +NC='\033[0m' + +if [ -z "$1" ]; then + # Show status of all validators + echo -e "${BLUE}=== Pezkuwi Validators Status ===${NC}\n" + for i in {1..10}; do + if systemctl list-units --full -all | grep -q "pezkuwi-validator-$i.service"; then + if sudo systemctl is-active --quiet pezkuwi-validator-$i; then + echo -e "Validator $i: ${GREEN}● Running${NC}" + else + echo -e "Validator $i: ${RED}○ Stopped${NC}" + fi + fi + done + + echo -e "\n${BLUE}=== Frontend Status ===${NC}" + if sudo systemctl is-active --quiet nginx; then + echo -e "Nginx: ${GREEN}● Running${NC}" + else + echo -e "Nginx: ${RED}○ Stopped${NC}" + fi +else + VALIDATOR_NUM=$1 + echo -e "${BLUE}=== Validator $VALIDATOR_NUM Status ===${NC}\n" + sudo systemctl status pezkuwi-validator-$VALIDATOR_NUM +fi diff --git a/scripts/stop.sh b/scripts/stop.sh new file mode 100755 index 0000000..5ea858b --- /dev/null +++ b/scripts/stop.sh @@ -0,0 +1,33 @@ +#!/bin/bash + +# Stop validator script +# Usage: ./stop.sh [validator_number] + +set -e + +GREEN='\033[0;32m' +RED='\033[0;31m' +YELLOW='\033[1;33m' +NC='\033[0m' + +if [ -z "$1" ]; then + echo -e "${RED}Error: Validator number required${NC}" + echo "Usage: $0 [validator_number]" + exit 1 +fi + +VALIDATOR_NUM=$1 + +echo -e "${YELLOW}Stopping Validator $VALIDATOR_NUM...${NC}" +sudo systemctl stop pezkuwi-validator-$VALIDATOR_NUM + +# Wait for service to stop +sleep 2 + +# Check status +if sudo systemctl is-active --quiet pezkuwi-validator-$VALIDATOR_NUM; then + echo -e "${RED}✗ Failed to stop Validator $VALIDATOR_NUM${NC}" + exit 1 +else + echo -e "${GREEN}✓ Validator $VALIDATOR_NUM stopped successfully${NC}" +fi diff --git a/scripts/windows/install-validator.ps1 b/scripts/windows/install-validator.ps1 deleted file mode 100644 index bc1cf85..0000000 --- a/scripts/windows/install-validator.ps1 +++ /dev/null @@ -1,220 +0,0 @@ -# Pezkuwi Validator Installer for Windows -# Usage: iwr -useb https://raw.githubusercontent.com/pezkuwichain/pezkuwi-validator-v1.0.0/main/scripts/windows/install-validator.ps1 | iex - -#Requires -RunAsAdministrator - -$ErrorActionPreference = "Stop" - -Write-Host "🚀 Pezkuwi Validator Installer v1.0.0 (Windows)" -ForegroundColor Cyan -Write-Host "=============================================" -ForegroundColor Cyan -Write-Host "" - -# Configuration -$PEZKUWI_VERSION = "v1.0.0-local-testnet-success" -$GITHUB_REPO = "pezkuwichain/pezkuwi-sdk" -$INSTALL_DIR = "$env:USERPROFILE\.pezkuwi" -$CHAIN_SPEC_URL = "https://raw.githubusercontent.com/$GITHUB_REPO/main/pezkuwi-local-raw.json" - -# Functions -function Write-Success { - param($Message) - Write-Host "✓ $Message" -ForegroundColor Green -} - -function Write-Error-Custom { - param($Message) - Write-Host "✗ $Message" -ForegroundColor Red -} - -function Write-Info { - param($Message) - Write-Host "ℹ $Message" -ForegroundColor Yellow -} - -function Check-Requirements { - Write-Info "Checking system requirements..." - - # Check Windows version - $osVersion = [System.Environment]::OSVersion.Version - if ($osVersion.Major -lt 10) { - Write-Error-Custom "Windows 10 or later required" - exit 1 - } - - # Check CPU cores - $cpuCores = (Get-WmiObject Win32_Processor).NumberOfLogicalProcessors - if ($cpuCores -lt 2) { - Write-Error-Custom "Minimum 2 CPU cores required (found: $cpuCores)" - exit 1 - } - - # Check RAM - $totalRAM = [math]::Round((Get-WmiObject Win32_ComputerSystem).TotalPhysicalMemory / 1GB) - if ($totalRAM -lt 4) { - Write-Error-Custom "Minimum 4GB RAM required (found: ${totalRAM}GB)" - exit 1 - } - - Write-Success "System requirements met" -} - -function Install-Dependencies { - Write-Info "Checking dependencies..." - - # Check if Chocolatey is installed - if (-not (Get-Command choco -ErrorAction SilentlyContinue)) { - Write-Info "Installing Chocolatey..." - Set-ExecutionPolicy Bypass -Scope Process -Force - [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072 - iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1')) - } - - Write-Success "Dependencies ready" -} - -function Download-Binaries { - Write-Info "Downloading Pezkuwi binaries..." - - New-Item -ItemType Directory -Force -Path "$INSTALL_DIR\bin" | Out-Null - - $RELEASE_URL = "https://github.com/$GITHUB_REPO/releases/download/$PEZKUWI_VERSION" - $ARCHIVE_NAME = "pezkuwi-binaries-linux-x86_64.tar.gz" - $TEMP_FILE = "$env:TEMP\$ARCHIVE_NAME" - - try { - # Download archive - Write-Info "Downloading from: $RELEASE_URL/$ARCHIVE_NAME" - Invoke-WebRequest -Uri "$RELEASE_URL/$ARCHIVE_NAME" -OutFile $TEMP_FILE -UseBasicParsing - - # Extract using tar (available in Windows 10+) - Write-Info "Extracting binaries..." - tar -xzf $TEMP_FILE -C "$INSTALL_DIR\bin\" - - # Cleanup - Remove-Item $TEMP_FILE - - Write-Success "Binaries downloaded and extracted" - } - catch { - Write-Error-Custom "Failed to download binaries: $_" - Write-Info "Please check if release exists: $RELEASE_URL" - exit 1 - } -} - -function Download-ChainSpec { - Write-Info "Downloading chain specification..." - - New-Item -ItemType Directory -Force -Path "$INSTALL_DIR\config" | Out-Null - - try { - Invoke-WebRequest -Uri $CHAIN_SPEC_URL -OutFile "$INSTALL_DIR\config\chain-spec.json" -UseBasicParsing - Write-Success "Chain spec downloaded" - } - catch { - Write-Error-Custom "Failed to download chain spec: $_" - exit 1 - } -} - -function Generate-Keys { - Write-Info "Generating validator keys..." - - New-Item -ItemType Directory -Force -Path "$INSTALL_DIR\keys" | Out-Null - - $nodeKeyOutput = & "$INSTALL_DIR\bin\pezkuwi.exe" key generate-node-key --base-path "$INSTALL_DIR\data" --chain "$INSTALL_DIR\config\chain-spec.json" 2>&1 - $nodeKeyOutput | Out-File "$INSTALL_DIR\keys\node-id.txt" - - $nodeId = Get-Content "$INSTALL_DIR\keys\node-id.txt" - - Write-Success "Keys generated" - Write-Info "Your Node ID: $nodeId" -} - -function Create-WindowsService { - Write-Info "Creating Windows service..." - - $serviceName = "PezkuwiValidator" - $displayName = "Pezkuwi Validator Node" - $description = "Pezkuwi blockchain validator node" - - # Remove existing service if present - $existingService = Get-Service -Name $serviceName -ErrorAction SilentlyContinue - if ($existingService) { - Write-Info "Removing existing service..." - Stop-Service -Name $serviceName -Force - sc.exe delete $serviceName - Start-Sleep -Seconds 2 - } - - # Create batch file to run the validator - $batchFile = "$INSTALL_DIR\start-validator.bat" - @" -@echo off -cd /d "$INSTALL_DIR" -"$INSTALL_DIR\bin\pezkuwi.exe" --chain "$INSTALL_DIR\config\chain-spec.json" --base-path "$INSTALL_DIR\data" --validator --name "Validator-$env:COMPUTERNAME" --port 30333 --rpc-port 9944 --rpc-cors all --rpc-methods=unsafe -"@ | Out-File -FilePath $batchFile -Encoding ASCII - - # Create service using NSSM (Non-Sucking Service Manager) - choco install nssm -y --no-progress - - nssm install $serviceName "$batchFile" - nssm set $serviceName DisplayName $displayName - nssm set $serviceName Description $description - nssm set $serviceName Start SERVICE_AUTO_START - - Write-Success "Windows service created" -} - -function Start-Validator { - Write-Info "Starting validator..." - - Start-Service -Name "PezkuwiValidator" - Start-Sleep -Seconds 3 - - $service = Get-Service -Name "PezkuwiValidator" - if ($service.Status -eq "Running") { - Write-Success "Validator started successfully!" - } - else { - Write-Error-Custom "Failed to start validator" - Write-Info "Check logs in Event Viewer" - exit 1 - } -} - -function Print-Summary { - Write-Host "" - Write-Host "=============================================" -ForegroundColor Cyan - Write-Host "🎉 Installation Complete!" -ForegroundColor Cyan - Write-Host "=============================================" -ForegroundColor Cyan - Write-Host "" - Write-Host "📍 Install Directory: $INSTALL_DIR" - Write-Host "🔑 Node ID: $(Get-Content $INSTALL_DIR\keys\node-id.txt)" - Write-Host "" - Write-Host "📊 Useful Commands:" -ForegroundColor Yellow - Write-Host " • Check status: Get-Service PezkuwiValidator" - Write-Host " • View logs: Get-EventLog -LogName Application -Source PezkuwiValidator -Newest 50" - Write-Host " • Stop node: Stop-Service PezkuwiValidator" - Write-Host " • Restart node: Restart-Service PezkuwiValidator" - Write-Host "" - Write-Host "🌐 RPC Endpoint: http://localhost:9944" - Write-Host "📡 P2P Port: 30333" - Write-Host "" -} - -# Main execution -try { - Check-Requirements - Install-Dependencies - Download-Binaries - Download-ChainSpec - Generate-Keys - Create-WindowsService - Start-Validator - Print-Summary -} -catch { - Write-Error-Custom "Installation failed: $_" - exit 1 -} diff --git a/setup.sh b/setup.sh new file mode 100755 index 0000000..2965316 --- /dev/null +++ b/setup.sh @@ -0,0 +1,516 @@ +#!/bin/bash + +# ======================================== +# Pezkuwi Validator Setup Script v2.0.0 +# ======================================== +# This script automates the entire validator setup process +# Usage: ./setup.sh [validator_number] + +set -e + +# Colors for output +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +BLUE='\033[0;34m' +NC='\033[0m' # No Color + +# Script directory +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +SHARED_DIR="$SCRIPT_DIR/shared" +VALIDATORS_DIR="$SCRIPT_DIR/validators" + +# Function to print section headers +print_header() { + echo -e "\n${BLUE}========================================${NC}" + echo -e "${BLUE}$1${NC}" + echo -e "${BLUE}========================================${NC}\n" +} + +# Function to check if a command exists +command_exists() { + command -v "$1" >/dev/null 2>&1 +} + +# Function to check dependency and display status +check_dependency() { + local cmd=$1 + local name=$2 + local version_cmd=$3 + + if command_exists "$cmd"; then + local version=$($version_cmd 2>&1 | head -n 1 || echo "unknown") + echo -e "${GREEN}✓${NC} $name: ${GREEN}Installed${NC} ($version)" + return 0 + else + echo -e "${RED}✗${NC} $name: ${RED}Not installed${NC}" + return 1 + fi +} + +# Get validator number from argument or prompt +get_validator_number() { + if [ -n "$1" ]; then + VALIDATOR_NUM=$1 + else + read -p "Enter validator number (1-10): " VALIDATOR_NUM + fi + + # Validate validator number + if ! [[ "$VALIDATOR_NUM" =~ ^[1-9]$|^10$ ]]; then + echo -e "${RED}Error: Validator number must be between 1 and 10${NC}" + exit 1 + fi + + VALIDATOR_DIR="$VALIDATORS_DIR/validator$VALIDATOR_NUM" + echo -e "${GREEN}Setting up Validator $VALIDATOR_NUM${NC}" +} + +# Check system dependencies +check_dependencies() { + print_header "Checking System Dependencies" + + local missing_deps=() + + # Essential build tools + if ! check_dependency "git" "Git" "git --version"; then + missing_deps+=("git") + fi + + if ! check_dependency "curl" "Curl" "curl --version"; then + missing_deps+=("curl") + fi + + if ! check_dependency "wget" "Wget" "wget --version"; then + missing_deps+=("wget") + fi + + # Build essentials + if ! check_dependency "gcc" "GCC" "gcc --version"; then + missing_deps+=("build-essential") + fi + + if ! check_dependency "make" "Make" "make --version"; then + missing_deps+=("build-essential") + fi + + # Check pkg-config + if ! check_dependency "pkg-config" "pkg-config" "pkg-config --version"; then + missing_deps+=("pkg-config") + fi + + # Check libssl-dev + if ! dpkg -l | grep -q libssl-dev; then + echo -e "${RED}✗${NC} libssl-dev: ${RED}Not installed${NC}" + missing_deps+=("libssl-dev") + else + echo -e "${GREEN}✓${NC} libssl-dev: ${GREEN}Installed${NC}" + fi + + # Check clang + if ! check_dependency "clang" "Clang" "clang --version"; then + missing_deps+=("clang") + fi + + # Check Rust + if ! check_dependency "rustc" "Rust" "rustc --version"; then + RUST_MISSING=1 + else + RUST_MISSING=0 + fi + + # Check Cargo + if ! check_dependency "cargo" "Cargo" "cargo --version"; then + RUST_MISSING=1 + fi + + # Check Node.js + if ! check_dependency "node" "Node.js" "node --version"; then + NODE_MISSING=1 + else + NODE_MISSING=0 + fi + + # Check npm + if ! check_dependency "npm" "npm" "npm --version"; then + NODE_MISSING=1 + fi + + # Check systemd (should be available on Ubuntu) + if ! check_dependency "systemctl" "systemd" "systemctl --version"; then + echo -e "${YELLOW}Warning: systemd not found. Service management may not work.${NC}" + fi + + # Check nginx + if ! check_dependency "nginx" "Nginx" "nginx -v"; then + missing_deps+=("nginx") + fi + + return ${#missing_deps[@]} +} + +# Install missing dependencies +install_dependencies() { + print_header "Installing Missing Dependencies" + + echo "Updating package list..." + sudo apt-get update + + # Install system packages + if [ ${#missing_deps[@]} -gt 0 ]; then + echo -e "\n${YELLOW}Installing system packages:${NC} ${missing_deps[*]}" + sudo apt-get install -y "${missing_deps[@]}" + echo -e "${GREEN}✓ System packages installed${NC}" + fi + + # Install Rust if missing + if [ $RUST_MISSING -eq 1 ]; then + echo -e "\n${YELLOW}Installing Rust...${NC}" + curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y + source "$HOME/.cargo/env" + rustup default stable + rustup update + rustup target add wasm32-unknown-unknown + echo -e "${GREEN}✓ Rust installed${NC}" + else + # Ensure wasm target is installed + echo -e "\n${YELLOW}Ensuring wasm32-unknown-unknown target...${NC}" + rustup target add wasm32-unknown-unknown 2>/dev/null || true + fi + + # Install Node.js if missing + if [ $NODE_MISSING -eq 1 ]; then + echo -e "\n${YELLOW}Installing Node.js...${NC}" + curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - + sudo apt-get install -y nodejs + echo -e "${GREEN}✓ Node.js installed${NC}" + fi + + echo -e "\n${GREEN}✓ All dependencies installed!${NC}" +} + +# Clone and build Pezkuwi-SDK +setup_sdk() { + print_header "Setting up Pezkuwi-SDK" + + mkdir -p "$SHARED_DIR" + cd "$SHARED_DIR" + + if [ -d "Pezkuwi-SDK" ]; then + echo -e "${YELLOW}Pezkuwi-SDK already exists. Updating...${NC}" + cd Pezkuwi-SDK + git fetch origin + git pull origin main || git pull origin master + else + echo "Cloning Pezkuwi-SDK from GitHub..." + # TODO: Replace with actual repository URL + git clone https://github.com/YOUR_USERNAME/Pezkuwi-SDK.git + cd Pezkuwi-SDK + fi + + echo -e "\n${YELLOW}Building Pezkuwi-SDK (Release mode)...${NC}" + echo "This may take 15-30 minutes..." + + # Build the node in release mode + cargo build --release + + echo -e "${GREEN}✓ Pezkuwi-SDK built successfully${NC}" +} + +# Clone and build DKSweb frontend +setup_frontend() { + print_header "Setting up DKSweb Frontend" + + cd "$SHARED_DIR" + + if [ -d "DKSweb" ]; then + echo -e "${YELLOW}DKSweb already exists. Updating...${NC}" + cd DKSweb + git fetch origin + git pull origin main || git pull origin master + else + echo "Cloning DKSweb from GitHub..." + # TODO: Replace with actual repository URL + git clone https://github.com/YOUR_USERNAME/DKSweb.git + cd DKSweb + fi + + echo -e "\n${YELLOW}Installing frontend dependencies...${NC}" + npm install + + echo -e "\n${YELLOW}Building frontend...${NC}" + npm run build + + echo -e "${GREEN}✓ DKSweb frontend built successfully${NC}" +} + +# Configure validator-specific settings +configure_validator() { + print_header "Configuring Validator $VALIDATOR_NUM" + + # Calculate ports (each validator gets 10 ports starting from base) + BASE_PORT=$((30333 + ($VALIDATOR_NUM - 1) * 10)) + P2P_PORT=$BASE_PORT + RPC_PORT=$((9944 + ($VALIDATOR_NUM - 1))) + WS_PORT=$((9945 + ($VALIDATOR_NUM - 1))) + PROMETHEUS_PORT=$((9615 + ($VALIDATOR_NUM - 1))) + + echo "Validator $VALIDATOR_NUM ports:" + echo " P2P Port: $P2P_PORT" + echo " RPC Port: $RPC_PORT" + echo " WebSocket Port: $WS_PORT" + echo " Prometheus Port: $PROMETHEUS_PORT" + + # Create validator config file + CONFIG_FILE="$VALIDATOR_DIR/config/validator.conf" + mkdir -p "$(dirname "$CONFIG_FILE")" + + cat > "$CONFIG_FILE" << EOF +# Validator $VALIDATOR_NUM Configuration +VALIDATOR_NUM=$VALIDATOR_NUM +VALIDATOR_NAME="validator-$VALIDATOR_NUM" +P2P_PORT=$P2P_PORT +RPC_PORT=$RPC_PORT +WS_PORT=$WS_PORT +PROMETHEUS_PORT=$PROMETHEUS_PORT +DATA_DIR=$VALIDATOR_DIR/data +KEYS_DIR=$VALIDATOR_DIR/keys +LOGS_DIR=$VALIDATOR_DIR/logs +SDK_PATH=$SHARED_DIR/Pezkuwi-SDK +FRONTEND_PATH=$SHARED_DIR/DKSweb +EOF + + echo -e "${GREEN}✓ Configuration file created${NC}" + + # Source the validator keys script if it exists + KEYS_SCRIPT="$VALIDATOR_DIR/config/keys.sh" + if [ -f "$KEYS_SCRIPT" ]; then + echo -e "\n${YELLOW}Loading validator keys...${NC}" + source "$KEYS_SCRIPT" + echo -e "${GREEN}✓ Validator keys loaded${NC}" + else + echo -e "\n${YELLOW}Warning: No keys.sh found for validator $VALIDATOR_NUM${NC}" + echo "Please create $KEYS_SCRIPT with validator keys" + fi +} + +# Setup systemd service +setup_service() { + print_header "Setting up Systemd Service" + + SERVICE_FILE="/etc/systemd/system/pezkuwi-validator-$VALIDATOR_NUM.service" + + sudo tee "$SERVICE_FILE" > /dev/null << EOF +[Unit] +Description=Pezkuwi Validator $VALIDATOR_NUM +After=network.target + +[Service] +Type=simple +User=$USER +WorkingDirectory=$VALIDATOR_DIR +EnvironmentFile=$VALIDATOR_DIR/config/validator.conf +ExecStart=$SHARED_DIR/Pezkuwi-SDK/target/release/pezkuwi-node \\ + --base-path $VALIDATOR_DIR/data \\ + --chain local \\ + --validator \\ + --name validator-$VALIDATOR_NUM \\ + --port $P2P_PORT \\ + --rpc-port $RPC_PORT \\ + --ws-port $WS_PORT \\ + --prometheus-port $PROMETHEUS_PORT \\ + --rpc-cors all \\ + --ws-external \\ + --rpc-external +Restart=always +RestartSec=10 +StandardOutput=append:$VALIDATOR_DIR/logs/validator.log +StandardError=append:$VALIDATOR_DIR/logs/validator-error.log + +[Install] +WantedBy=multi-user.target +EOF + + # Reload systemd + sudo systemctl daemon-reload + + echo -e "${GREEN}✓ Systemd service created${NC}" + echo "Service name: pezkuwi-validator-$VALIDATOR_NUM" +} + +# Setup nginx for frontend +setup_nginx() { + print_header "Setting up Nginx" + + NGINX_CONF="/etc/nginx/sites-available/pezkuwi-frontend" + + if [ ! -f "$NGINX_CONF" ]; then + sudo tee "$NGINX_CONF" > /dev/null << 'EOF' +server { + listen 80; + listen [::]:80; + server_name _; + + root /home/$USER/pezkuwi-validator-v2.0.0/shared/DKSweb/dist; + index index.html; + + location / { + try_files $uri $uri/ /index.html; + } + + location /api { + proxy_pass http://localhost:9944; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + proxy_set_header Host $host; + } +} +EOF + + # Replace $USER with actual user + sudo sed -i "s/\$USER/$USER/g" "$NGINX_CONF" + + # Enable site + sudo ln -sf "$NGINX_CONF" /etc/nginx/sites-enabled/ + + # Remove default site if exists + sudo rm -f /etc/nginx/sites-enabled/default + + # Test nginx configuration + sudo nginx -t + + # Restart nginx + sudo systemctl restart nginx + sudo systemctl enable nginx + + echo -e "${GREEN}✓ Nginx configured and restarted${NC}" + else + echo -e "${YELLOW}Nginx already configured${NC}" + fi +} + +# Setup automatic updates +setup_auto_update() { + print_header "Setting up Automatic Updates" + + # Create update script + UPDATE_SCRIPT="$SCRIPT_DIR/scripts/update.sh" + mkdir -p "$SCRIPT_DIR/scripts" + + cat > "$UPDATE_SCRIPT" << 'EOF' +#!/bin/bash +# Automatic update script for Pezkuwi validator + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +SHARED_DIR="$SCRIPT_DIR/../shared" + +echo "Checking for updates..." + +# Update SDK +cd "$SHARED_DIR/Pezkuwi-SDK" +git fetch origin +if [ $(git rev-parse HEAD) != $(git rev-parse @{u}) ]; then + echo "SDK updates found. Rebuilding..." + git pull + cargo build --release + echo "Restarting validators..." + sudo systemctl restart pezkuwi-validator-*.service +fi + +# Update Frontend +cd "$SHARED_DIR/DKSweb" +git fetch origin +if [ $(git rev-parse HEAD) != $(git rev-parse @{u}) ]; then + echo "Frontend updates found. Rebuilding..." + git pull + npm install + npm run build + echo "Frontend updated" +fi + +echo "Update check complete" +EOF + + chmod +x "$UPDATE_SCRIPT" + + # Setup cron job for automatic updates (daily at 2 AM) + CRON_JOB="0 2 * * * $UPDATE_SCRIPT >> $SCRIPT_DIR/logs/auto-update.log 2>&1" + + # Add to crontab if not already there + (crontab -l 2>/dev/null | grep -v "$UPDATE_SCRIPT"; echo "$CRON_JOB") | crontab - + + echo -e "${GREEN}✓ Automatic updates configured${NC}" + echo "Updates will run daily at 2:00 AM" +} + +# Main setup function +main() { + print_header "Pezkuwi Validator Setup v2.0.0" + + # Get validator number + get_validator_number "$1" + + # Check dependencies + check_dependencies + local dep_count=$? + + # Install missing dependencies if any + if [ $dep_count -gt 0 ] || [ $RUST_MISSING -eq 1 ] || [ $NODE_MISSING -eq 1 ]; then + echo -e "\n${YELLOW}Some dependencies are missing. Installing...${NC}" + install_dependencies + else + echo -e "\n${GREEN}✓ All dependencies already installed${NC}" + fi + + # Setup shared components (only if not already done) + if [ ! -d "$SHARED_DIR/Pezkuwi-SDK/target/release" ]; then + setup_sdk + else + echo -e "\n${GREEN}✓ SDK already built${NC}" + fi + + if [ ! -d "$SHARED_DIR/DKSweb/dist" ]; then + setup_frontend + else + echo -e "\n${GREEN}✓ Frontend already built${NC}" + fi + + # Configure validator + configure_validator + + # Setup service + setup_service + + # Setup nginx (only once for all validators) + setup_nginx + + # Setup automatic updates + setup_auto_update + + # Final instructions + print_header "Setup Complete!" + + echo -e "${GREEN}Validator $VALIDATOR_NUM is ready!${NC}\n" + echo "Next steps:" + echo "1. Start the validator:" + echo -e " ${BLUE}sudo systemctl start pezkuwi-validator-$VALIDATOR_NUM${NC}" + echo "" + echo "2. Check validator status:" + echo -e " ${BLUE}sudo systemctl status pezkuwi-validator-$VALIDATOR_NUM${NC}" + echo "" + echo "3. View logs:" + echo -e " ${BLUE}tail -f $VALIDATOR_DIR/logs/validator.log${NC}" + echo "" + echo "4. Access frontend:" + echo -e " ${BLUE}http://YOUR_SERVER_IP${NC}" + echo "" + echo "5. Enable auto-start on boot:" + echo -e " ${BLUE}sudo systemctl enable pezkuwi-validator-$VALIDATOR_NUM${NC}" + echo "" + echo -e "${YELLOW}Note: Make sure to add validator keys to:${NC}" + echo -e "${YELLOW}$VALIDATOR_DIR/config/keys.sh${NC}" +} + +# Run main function +main "$@" diff --git a/validators/validator1/config/keys.sh b/validators/validator1/config/keys.sh new file mode 100755 index 0000000..e28e711 --- /dev/null +++ b/validators/validator1/config/keys.sh @@ -0,0 +1,40 @@ +#!/bin/bash + +# ======================================== +# Validator 1 - Real Beta Testnet Keys +# ======================================== +# Generated from actual running beta testnet +# Validator Name: Validator-beta-1 (Bootnode) +# RPC Port: 9944 +# P2P Port: 30333 + +# BABE Keys (Block Authorship) +export BABE_SEED="state open glance maze canyon cable cargo parent blind mystery cheese foot" +export BABE_PUBLIC_KEY="0x9e7490cfe0dd32860282dd4e74b5c40c9237fb6e478066c334c931742308e008" + +# GRANDPA Keys (Finality) +export GRAN_SEED="kick surge tube arrange enforce witness mouse spray disease inquiry inch stamp" +export GRAN_PUBLIC_KEY="0x16da26f049b37e9b03d14439457ac164f14f5174b1f10ddab2e0dc3ef7903675" + +# PARA Keys (Parachain) +export PARA_SEED="march cancel try improve lunch phrase rebuild initial theme snap giant dry" +export PARA_PUBLIC_KEY="0xc62b764ea84411f550818a41a6abacddb9388cefbc22412f2bee335e9709a717" + +# ASGN Keys (Assignment) +export ASGN_SEED="nephew dignity smoke sunny access soon breeze inch dove park fault museum" +export ASGN_PUBLIC_KEY="0xa4c75d886439ae7d764cc600051af1d2128d2a8a1cdf3d642eda76824ccaf518" + +# AUDI Keys (Authority Discovery) +export AUDI_SEED="vicious mixed hour wage clog yellow elbow zoo clock better rhythm diagram" +export AUDI_PUBLIC_KEY="0x66e821a23729878d8b7d04c69ec0fed9b0f5facae48917c1b83a4ad15cf00720" + +# BEEF Keys (BEEFY) +export BEEF_SEED="practice cable fog idea rigid hybrid digital snack setup right advance romance" +export BEEF_PUBLIC_KEY="0x0281ba169080b261add0cd22bfb47477eddab854caa17423b12ddeed6504b04aef" + +# Validator Configuration +export VALIDATOR_NAME="Validator-beta-1" +export RPC_PORT=9944 +export P2P_PORT=30333 +export WS_PORT=9944 +export PROMETHEUS_PORT=9615 diff --git a/validators/validator2/config/keys.sh b/validators/validator2/config/keys.sh new file mode 100755 index 0000000..de8857b --- /dev/null +++ b/validators/validator2/config/keys.sh @@ -0,0 +1,39 @@ +#!/bin/bash + +# ======================================== +# Validator 2 - Real Beta Testnet Keys +# ======================================== +# Validator Name: Validator-beta-2 +# RPC Port: 9945 +# P2P Port: 30334 + +# BABE Keys (Block Authorship) +export BABE_SEED="nature pink baby physical hotel dirt soon meadow coin employ enroll remind" +export BABE_PUBLIC_KEY="0xbef3df377441fe6ad64b81e84c8d201bc5c0bc2bb2e1a85f1e84927c62c5572b" + +# GRANDPA Keys (Finality) +export GRAN_SEED="rent little raven auction error goat error water twice defy hard slab" +export GRAN_PUBLIC_KEY="0x806cfed7a6d025bc2e7a195bcd5ac50317f824ce6971cf30f95c6a621d6e55bf" + +# PARA Keys (Parachain) +export PARA_SEED="mystery rescue elbow update effort path sleep rather deer undo school size" +export PARA_PUBLIC_KEY="0xfca6fd2976ae3ea397b15cdc5b0b044fe90a2094328edfa013db80cf04ba1a67" + +# ASGN Keys (Assignment) +export ASGN_SEED="curious step vast scan couch episode maid trap crazy swap junior slab" +export ASGN_PUBLIC_KEY="0xfaad0803c450bf084ca3035bd1d69481db58444b32dd0eaa55de69a5314b0559" + +# AUDI Keys (Authority Discovery) +export AUDI_SEED="race frequent goose clean labor differ credit lawn lab risk ocean black" +export AUDI_PUBLIC_KEY="0x7aeed77ed10108ead6c58dd45dd987aba28ea6e9cdf90f8893112c08bb0d4251" + +# BEEF Keys (BEEFY) +export BEEF_SEED="industry flush stairs zoo world width dentist special life retire suffer myth" +export BEEF_PUBLIC_KEY="0x020177ca58f45047c737e6e02adba1ac3520eb881ea38ad39751d32d7c89d5efaa" + +# Validator Configuration +export VALIDATOR_NAME="Validator-beta-2" +export RPC_PORT=9945 +export P2P_PORT=30334 +export WS_PORT=9945 +export PROMETHEUS_PORT=9616 diff --git a/validators/validator3/config/keys.sh b/validators/validator3/config/keys.sh new file mode 100755 index 0000000..017857c --- /dev/null +++ b/validators/validator3/config/keys.sh @@ -0,0 +1,39 @@ +#!/bin/bash + +# ======================================== +# Validator 3 - Real Beta Testnet Keys +# ======================================== +# Validator Name: Validator-beta-3 +# RPC Port: 9946 +# P2P Port: 30335 + +# BABE Keys (Block Authorship) +export BABE_SEED="cycle judge gentle cute spirit crunch build flee popular cube wagon void" +export BABE_PUBLIC_KEY="0x2825cb78cb345b078a189e6a280916f7771df991113e587b9a0694df33abe909" + +# GRANDPA Keys (Finality) +export GRAN_SEED="prefer sugar friend wagon about love blouse coast table future lonely slice" +export GRAN_PUBLIC_KEY="0xcf2862bbfabf42dfc361e2fd0ee860e55e80f093ad767679d9687e822a04c7a4" + +# PARA Keys (Parachain) +export PARA_SEED="where reject camp tail clock plate library apple draw once float ranch" +export PARA_PUBLIC_KEY="0x4cdb404f66b7409a6e7fee2eab92aa738c8cbd37d1343b0e0818deb4637d3e0e" + +# ASGN Keys (Assignment) +export ASGN_SEED="craft hill receive alarm inner use cereal assume boost castle enhance culture" +export ASGN_PUBLIC_KEY="0xf054e7834c042696fbbf56d17247924836a6957cc6ec8366455c9b459b51fa4d" + +# AUDI Keys (Authority Discovery) +export AUDI_SEED="fatal hazard federal cushion cousin spend weapon script boil vicious delay fire" +export AUDI_PUBLIC_KEY="0xd2c4ffc56fd8504f5fde789d3ba895f65c0c7200f68cfe789a4316e68277e72f" + +# BEEF Keys (BEEFY) +export BEEF_SEED="kiss foil assist bind duty concert van fold reveal weird design rescue" +export BEEF_PUBLIC_KEY="0x023792b160a004c98d56afc29843ee9aa567a80129794373df9b3f4d883cfd4dfc" + +# Validator Configuration +export VALIDATOR_NAME="Validator-beta-3" +export RPC_PORT=9946 +export P2P_PORT=30335 +export WS_PORT=9946 +export PROMETHEUS_PORT=9617 diff --git a/validators/validator4/config/keys.sh b/validators/validator4/config/keys.sh new file mode 100755 index 0000000..1515fbc --- /dev/null +++ b/validators/validator4/config/keys.sh @@ -0,0 +1,39 @@ +#!/bin/bash + +# ======================================== +# Validator 4 - Real Beta Testnet Keys +# ======================================== +# Validator Name: Validator-beta-4 +# RPC Port: 9947 +# P2P Port: 30336 + +# BABE Keys (Block Authorship) +export BABE_SEED="evoke second recipe turn salad warfare mix sense cry impact demise avocado" +export BABE_PUBLIC_KEY="0x9236bf5cde2e1ce44cd2eceece98b876750cb39a8887bcc1d7c0b72c186b4f6c" + +# GRANDPA Keys (Finality) +export GRAN_SEED="sea resemble monitor fetch quit cotton amused settle limit venue frequent electric" +export GRAN_PUBLIC_KEY="0x4d7787f6d6b189b64286efdf524a5d73be1eaf4a4b1d245529090b698285a0d4" + +# PARA Keys (Parachain) +export PARA_SEED="rubber decorate coyote grass solar butter melt ginger smile flush dash monitor" +export PARA_PUBLIC_KEY="0xb27fea579fdc321ebac8975717c17a7b4036bb06549c41ac803c888b9104a256" + +# ASGN Keys (Assignment) +export ASGN_SEED="tomato glad flower miracle duty hundred filter gain clay butter twist chronic" +export ASGN_PUBLIC_KEY="0x9ef9bf97dfc3d22cd4e17a331165afbf0a562a9a86e776592c64ba87c4162d0a" + +# AUDI Keys (Authority Discovery) +export AUDI_SEED="group trial problem lesson angle grief agent harvest pattern identify approve security" +export AUDI_PUBLIC_KEY="0x6abffb32a990117c3d8c74f090b287d5888af97b61a3964a2c54cddc614e4d71" + +# BEEF Keys (BEEFY) +export BEEF_SEED="ridge way rhythm renew mix city element obtain prepare glass exist hope" +export BEEF_PUBLIC_KEY="0x02ca2cac4bd7d21c1c3f7b256233827d8546471d83e1eeb37408767adc66bac7d0" + +# Validator Configuration +export VALIDATOR_NAME="Validator-beta-4" +export RPC_PORT=9947 +export P2P_PORT=30336 +export WS_PORT=9947 +export PROMETHEUS_PORT=9618 diff --git a/validators/validator5/config/keys.sh b/validators/validator5/config/keys.sh new file mode 100755 index 0000000..d49c155 --- /dev/null +++ b/validators/validator5/config/keys.sh @@ -0,0 +1,39 @@ +#!/bin/bash + +# ======================================== +# Validator 5 - Real Beta Testnet Keys +# ======================================== +# Validator Name: Validator-beta-5 +# RPC Port: 9948 +# P2P Port: 30337 + +# BABE Keys (Block Authorship) +export BABE_SEED="clap screen soap once near guilt accuse hamster knife drink purity skull" +export BABE_PUBLIC_KEY="0x74270a49be316a233279af6480ac8de5479bc45426e884fbdb50c6247e62d44b" + +# GRANDPA Keys (Finality) +export GRAN_SEED="innocent fix endless engine yellow smoke venture answer before dentist trend pulse" +export GRAN_PUBLIC_KEY="0x9ae1139d89f5ae5e9a56a7a7d1375c49b742315c25712128fad16c841da2dba9" + +# PARA Keys (Parachain) +export PARA_SEED="peanut catch embody spy orbit design occur series cricket ski ketchup impose" +export PARA_PUBLIC_KEY="0xf49d1b0ebff5fbf31cba037085552fd78e4218a19045cdd5f2e1f73840156a75" + +# ASGN Keys (Assignment) +export ASGN_SEED="orchard globe member blue install rude cement luxury grant cause exit expect" +export ASGN_PUBLIC_KEY="0xb8f786ac5db52f3713ca1ff58f8d708332f2c0556d55a62195a52d4ca1bb2e7e" + +# AUDI Keys (Authority Discovery) +export AUDI_SEED="pistol focus above decade weekend matter claw drift glad worry quarter slice" +export AUDI_PUBLIC_KEY="0x3e1c338ba320b747769d2d40ece3fc3da306b90096ab381bad1be6bc5a813d57" + +# BEEF Keys (BEEFY) +export BEEF_SEED="mother model label zoo mouse detail cost pet umbrella rate proud unable" +export BEEF_PUBLIC_KEY="0x033cae08ede6b1c3597dfce1f38c5ceddc4b69d045de4b51f17e2e8fce1cda27ca" + +# Validator Configuration +export VALIDATOR_NAME="Validator-beta-5" +export RPC_PORT=9948 +export P2P_PORT=30337 +export WS_PORT=9948 +export PROMETHEUS_PORT=9619 diff --git a/validators/validator6/config/keys.sh b/validators/validator6/config/keys.sh new file mode 100755 index 0000000..6ed58fd --- /dev/null +++ b/validators/validator6/config/keys.sh @@ -0,0 +1,39 @@ +#!/bin/bash + +# ======================================== +# Validator 6 - Real Beta Testnet Keys +# ======================================== +# Validator Name: Validator-beta-6 +# RPC Port: 9949 +# P2P Port: 30338 + +# BABE Keys (Block Authorship) +export BABE_SEED="tired youth educate hover cross plastic gate giraffe gorilla rescue section idle" +export BABE_PUBLIC_KEY="0xf4fc5deb49aa9178f622e711a9d453d967507231a6e2d62d726ce7279316970a" + +# GRANDPA Keys (Finality) +export GRAN_SEED="hedgehog isolate jump safe march fame year mosquito smooth lunch portion solution" +export GRAN_PUBLIC_KEY="0x7eb7cfb7ac00f11ed7f63697cdb5d0562bba6b90c1901fa00365db075bab05e9" + +# PARA Keys (Parachain) +export PARA_SEED="industry thank parade tiger reunion usual kidney high beef divide jaguar smile" +export PARA_PUBLIC_KEY="0x5a3fa17b77d3afc3dd1e0b7bf1d2faf95ba14eb2ee370476e5f2f78a8175a957" + +# ASGN Keys (Assignment) +export ASGN_SEED="cluster outdoor denial disorder donor rich senior glance display barrel theory pupil" +export ASGN_PUBLIC_KEY="0x4e232e6efb3be2c4f638fac57330f606fc54bbc3b8d490a5bb520c67c0d7f248" + +# AUDI Keys (Authority Discovery) +export AUDI_SEED="supreme warfare trust assault where model grain advice broccoli nothing key embody" +export AUDI_PUBLIC_KEY="0x244d0ea5c6b4a4f4e23912aab77498689e9f355edb63a82ebfc9b9bb08176f0d" + +# BEEF Keys (BEEFY) +export BEEF_SEED="cloth lock grocery actor trend patch grace salad fun mass plate notice" +export BEEF_PUBLIC_KEY="0x0338f2ef200a5048b35fcfae936a2dd5dffdabc77eb61d707de35f9eba8b3d37e3" + +# Validator Configuration +export VALIDATOR_NAME="Validator-beta-6" +export RPC_PORT=9949 +export P2P_PORT=30338 +export WS_PORT=9949 +export PROMETHEUS_PORT=9620 diff --git a/validators/validator7/config/keys.sh b/validators/validator7/config/keys.sh new file mode 100755 index 0000000..43ce97c --- /dev/null +++ b/validators/validator7/config/keys.sh @@ -0,0 +1,39 @@ +#!/bin/bash + +# ======================================== +# Validator 7 - Real Beta Testnet Keys +# ======================================== +# Validator Name: Validator-beta-7 +# RPC Port: 9950 +# P2P Port: 30339 + +# BABE Keys (Block Authorship) +export BABE_SEED="pave mixed faith vivid nice trust exercise public kind afford fury army" +export BABE_PUBLIC_KEY="0x6898b08fe0c6dfe79750598765efe06cbfaef01da9b110599d05a5b4824ddf38" + +# GRANDPA Keys (Finality) +export GRAN_SEED="cliff entire pause adjust parent tissue enhance weasel east pink art meat" +export GRAN_PUBLIC_KEY="0x57f18c1620086209773c6d8243af3eae873a63cda0c64cc3bcb02ff3ee41a863" + +# PARA Keys (Parachain) +export PARA_SEED="return diet teach excess under warm veteran pride exotic talk exhaust mobile" +export PARA_PUBLIC_KEY="0x1e0ee1b33614379148cd69bb79fb2d21c98a8837bab912e96b72e5a2bbb46d01" + +# ASGN Keys (Assignment) +export ASGN_SEED="gown differ atom rebuild observe museum word nest upset large boring exact" +export ASGN_PUBLIC_KEY="0x48f66d8b963b576da719b2350a0242c624b720439ed764c206107647d8a6d872" + +# AUDI Keys (Authority Discovery) +export AUDI_SEED="artwork town pyramid stumble sugar neither clutch void soon wine slab slide" +export AUDI_PUBLIC_KEY="0xe462edbb26c14d1772570ce751ace21b271b0f0f472fc434c84f708b9bb42309" + +# BEEF Keys (BEEFY) +export BEEF_SEED="curious abstract home session famous canvas spin forest wing appear warm install" +export BEEF_PUBLIC_KEY="0x03e783496d6ff583a60ec44ef9fe7ea375c9e31841a1f7fe48a8eaec0093826d78" + +# Validator Configuration +export VALIDATOR_NAME="Validator-beta-7" +export RPC_PORT=9950 +export P2P_PORT=30339 +export WS_PORT=9950 +export PROMETHEUS_PORT=9621 diff --git a/validators/validator8/config/keys.sh b/validators/validator8/config/keys.sh new file mode 100755 index 0000000..64f34a1 --- /dev/null +++ b/validators/validator8/config/keys.sh @@ -0,0 +1,39 @@ +#!/bin/bash + +# ======================================== +# Validator 8 - Real Beta Testnet Keys +# ======================================== +# Validator Name: Validator-beta-8 +# RPC Port: 9951 +# P2P Port: 30340 + +# BABE Keys (Block Authorship) +export BABE_SEED="clinic father over industry blame coast trophy walnut panel giant barely aunt" +export BABE_PUBLIC_KEY="0x520e1de89062667c8980666fd8cc83914d43ce5dd69fa4db2bec7a23bec16e61" + +# GRANDPA Keys (Finality) +export GRAN_SEED="invite mule belt fix risk piece grant benefit type park best aisle" +export GRAN_PUBLIC_KEY="0x7bab34ff06d0e24da37e861bc9683381934e390febe05cec2060b5d4b9c8d746" + +# PARA Keys (Parachain) +export PARA_SEED="close render flip cable sail drop job drum kiss brief corn wild" +export PARA_PUBLIC_KEY="0x4e169330a7089ffc0be8f85edb9b5c35556bee1a0111f14dc7ee00cd43478232" + +# ASGN Keys (Assignment) +export ASGN_SEED="pipe crack swing minimum supply divide tenant solution foil prevent depend wedding" +export ASGN_PUBLIC_KEY="0xdc8556675a56246d3227c4544e58a602df65b154e09086c0b2b0aa879dfab249" + +# AUDI Keys (Authority Discovery) +export AUDI_SEED="faint tunnel east jeans raise bundle grief unaware gospel solar dish number" +export AUDI_PUBLIC_KEY="0x1ec224f7441c0f95d817ccbf0cce3d1cdbd0ffb0f8169654672570dbd6e66608" + +# BEEF Keys (BEEFY) +export BEEF_SEED="live impact struggle furnace sentence sail true spin waste museum symbol able" +export BEEF_PUBLIC_KEY="0x030bd33780a8a632630c3dd75624c4e6d1ff3fdfa58d88ddebe087e237cc0cd11d" + +# Validator Configuration +export VALIDATOR_NAME="Validator-beta-8" +export RPC_PORT=9951 +export P2P_PORT=30340 +export WS_PORT=9951 +export PROMETHEUS_PORT=9622