diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..cf3714f --- /dev/null +++ b/LICENSE @@ -0,0 +1,19 @@ +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 7b30d68..1966796 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,125 @@ -# pezkuwi-validator-v1.0.0 -One-click validator installer for Pezkuwi testnet. Cross-platform scripts (Linux/Mac/Windows) for automated node deployment. +# Pezkuwi Validator Installer + +One-click validator installer for Pezkuwi testnet. Cross-platform scripts for automated node deployment. + +## 🚀 Quick Start + +### 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 +``` + +### Windows (PowerShell) +```powershell +# Coming soon +``` + +## 📋 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 +4. ✅ Downloads chain specification +5. ✅ Generates validator keys +6. ✅ Creates systemd service +7. ✅ Starts validator node + +## 📊 Post-Installation + +### Check Node Status +```bash +sudo systemctl status pezkuwi-validator +``` + +### View Live Logs +```bash +sudo journalctl -u pezkuwi-validator -f +``` + +### Stop Validator +```bash +sudo systemctl stop pezkuwi-validator +``` + +### Restart Validator +```bash +sudo systemctl restart pezkuwi-validator +``` + +## 📁 Installation Directory + +All files are installed to: `~/.pezkuwi/` +``` +~/.pezkuwi/ +├── bin/ # Binaries +├── config/ # Chain spec +├── data/ # Blockchain data +└── keys/ # Validator keys +``` + +## 🔑 Your Validator Keys + +After installation, your node ID is saved in: +```bash +cat ~/.pezkuwi/keys/node-id.txt +``` + +**⚠️ IMPORTANT**: Backup this file! You'll need it for testnet registration. + +## 🌐 Connect to Your Node + +- **RPC Endpoint**: `http://localhost:9944` +- **WebSocket**: `ws://localhost:9944` + +Test connection: +```bash +curl -H "Content-Type: application/json" \ + -d '{"id":1, "jsonrpc":"2.0", "method": "system_health"}' \ + http://localhost:9944 +``` + +## 🆘 Troubleshooting + +### Node Not Starting +```bash +# Check logs +sudo journalctl -u pezkuwi-validator -n 100 + +# Check service status +sudo systemctl status pezkuwi-validator +``` + +### Firewall Issues +```bash +# Open required ports (Ubuntu/Debian) +sudo ufw allow 30333/tcp +sudo ufw allow 9944/tcp +``` + +## 📚 Documentation + +- [Validator Guide](./docs/VALIDATOR-GUIDE.md) +- [Troubleshooting](./docs/TROUBLESHOOTING.md) +- [FAQ](./docs/FAQ.md) + +## 🤝 Support + +- GitHub Issues: https://github.com/pezkuwichain/pezkuwi-validator-v1.0.0/issues +- Telegram: https://t.me/pezkuwichain +- Discord: Coming soon + +## 📜 License + +GNU General Public License v3.0 + +--- + +**Made with ❤️ by Kurdistan Tech Ministry** diff --git a/scripts/linux/install-validator.sh b/scripts/linux/install-validator.sh new file mode 100755 index 0000000..7bf2d68 --- /dev/null +++ b/scripts/linux/install-validator.sh @@ -0,0 +1,196 @@ + +#!/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}" + + wget -q --show-progress -O "$INSTALL_DIR/bin/pezkuwi" "${RELEASE_URL}/pezkuwi" || { + print_error "Failed to download binaries" + print_info "Please check if release exists: ${RELEASE_URL}" + exit 1 + } + + 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