synor/scripts/testnet-deploy.sh
Gulshan Yadav 48949ebb3f Initial commit: Synor blockchain monorepo
A complete blockchain implementation featuring:
- synord: Full node with GHOSTDAG consensus
- explorer-web: Modern React blockchain explorer with 3D DAG visualization
- CLI wallet and tools
- Smart contract SDK and example contracts (DEX, NFT, token)
- WASM crypto library for browser/mobile
2026-01-08 05:22:17 +05:30

239 lines
6.3 KiB
Bash
Executable file

#!/bin/bash
# =============================================================================
# Synor Testnet Deployment Script
# =============================================================================
# Usage:
# ./scripts/testnet-deploy.sh [command]
#
# Commands:
# start - Start all testnet services
# stop - Stop all testnet services
# restart - Restart all testnet services
# logs - View logs from all services
# status - Check status of all services
# clean - Remove all data (WARNING: destructive)
# build - Build Docker images
# explorer - Start with block explorer
# =============================================================================
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_DIR="$(dirname "$SCRIPT_DIR")"
COMPOSE_FILE="$PROJECT_DIR/docker-compose.testnet.yml"
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
log_info() {
echo -e "${BLUE}[INFO]${NC} $1"
}
log_success() {
echo -e "${GREEN}[SUCCESS]${NC} $1"
}
log_warn() {
echo -e "${YELLOW}[WARN]${NC} $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
print_banner() {
echo -e "${BLUE}"
cat << 'EOF'
███████╗██╗ ██╗███╗ ██╗ ██████╗ ██████╗
██╔════╝╚██╗ ██╔╝████╗ ██║██╔═══██╗██╔══██╗
███████╗ ╚████╔╝ ██╔██╗ ██║██║ ██║██████╔╝
╚════██║ ╚██╔╝ ██║╚██╗██║██║ ██║██╔══██╗
███████║ ██║ ██║ ╚████║╚██████╔╝██║ ██║
╚══════╝ ╚═╝ ╚═╝ ╚═══╝ ╚═════╝ ╚═╝ ╚═╝
TESTNET DEPLOYMENT
EOF
echo -e "${NC}"
}
check_docker() {
if ! command -v docker &> /dev/null; then
log_error "Docker is not installed. Please install Docker first."
exit 1
fi
if ! docker info &> /dev/null; then
log_error "Docker daemon is not running. Please start Docker."
exit 1
fi
if ! command -v docker-compose &> /dev/null && ! docker compose version &> /dev/null; then
log_error "Docker Compose is not installed. Please install Docker Compose."
exit 1
fi
}
# Determine docker compose command
get_compose_cmd() {
if docker compose version &> /dev/null 2>&1; then
echo "docker compose"
else
echo "docker-compose"
fi
}
cmd_build() {
log_info "Building Docker images..."
$(get_compose_cmd) -f "$COMPOSE_FILE" build
log_success "Build complete!"
}
cmd_start() {
log_info "Starting Synor testnet..."
$(get_compose_cmd) -f "$COMPOSE_FILE" up -d seed1 seed2 seed3 faucet
log_info "Waiting for services to start..."
sleep 10
log_success "Testnet started!"
echo ""
log_info "Services:"
echo " - Seed Node 1: http://localhost:17110 (RPC)"
echo " - Seed Node 2: http://localhost:17120 (RPC)"
echo " - Seed Node 3: http://localhost:17130 (RPC)"
echo " - Faucet: http://localhost:8080"
echo ""
log_info "To view logs: $0 logs"
}
cmd_start_explorer() {
log_info "Starting Synor testnet with block explorer..."
$(get_compose_cmd) -f "$COMPOSE_FILE" --profile explorer up -d
log_info "Waiting for services to start..."
sleep 15
log_success "Testnet with explorer started!"
echo ""
log_info "Services:"
echo " - Seed Node 1: http://localhost:17110 (RPC)"
echo " - Seed Node 2: http://localhost:17120 (RPC)"
echo " - Seed Node 3: http://localhost:17130 (RPC)"
echo " - Faucet: http://localhost:8080"
echo " - Explorer API: http://localhost:3000"
echo ""
}
cmd_stop() {
log_info "Stopping Synor testnet..."
$(get_compose_cmd) -f "$COMPOSE_FILE" --profile explorer down
log_success "Testnet stopped!"
}
cmd_restart() {
cmd_stop
sleep 2
cmd_start
}
cmd_logs() {
$(get_compose_cmd) -f "$COMPOSE_FILE" logs -f "$@"
}
cmd_status() {
log_info "Testnet Status:"
echo ""
$(get_compose_cmd) -f "$COMPOSE_FILE" ps
echo ""
# Check RPC endpoints
log_info "Checking RPC endpoints..."
for port in 17110 17120 17130; do
if curl -s "http://localhost:$port/health" > /dev/null 2>&1; then
echo -e " Port $port: ${GREEN}HEALTHY${NC}"
else
echo -e " Port $port: ${RED}UNAVAILABLE${NC}"
fi
done
# Check faucet
if curl -s "http://localhost:8080/health" > /dev/null 2>&1; then
echo -e " Faucet: ${GREEN}HEALTHY${NC}"
else
echo -e " Faucet: ${RED}UNAVAILABLE${NC}"
fi
}
cmd_clean() {
log_warn "This will remove all testnet data!"
read -p "Are you sure? (y/N) " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
log_info "Stopping services..."
$(get_compose_cmd) -f "$COMPOSE_FILE" --profile explorer down -v
log_success "All data removed!"
else
log_info "Cancelled."
fi
}
cmd_help() {
echo "Synor Testnet Deployment Script"
echo ""
echo "Usage: $0 [command]"
echo ""
echo "Commands:"
echo " start Start all testnet services"
echo " stop Stop all testnet services"
echo " restart Restart all testnet services"
echo " logs View logs from all services"
echo " status Check status of all services"
echo " clean Remove all data (WARNING: destructive)"
echo " build Build Docker images"
echo " explorer Start with block explorer"
echo " help Show this help message"
echo ""
}
# Main
print_banner
check_docker
case "${1:-help}" in
start)
cmd_start
;;
stop)
cmd_stop
;;
restart)
cmd_restart
;;
logs)
shift
cmd_logs "$@"
;;
status)
cmd_status
;;
clean)
cmd_clean
;;
build)
cmd_build
;;
explorer)
cmd_start_explorer
;;
help|--help|-h)
cmd_help
;;
*)
log_error "Unknown command: $1"
cmd_help
exit 1
;;
esac