#!/bin/bash # verify_bootstrap_connectivity.sh # Script de vérification de la connectivité bootstrap WebSocket # Basé sur REX_BOOTSTRAP_WEBSOCKET.md set -e # Couleurs pour les logs RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # Fonctions de logging log() { echo -e "${BLUE}[INFO]${NC} $1"; } log_success() { echo -e "${GREEN}[SUCCESS]${NC} $1"; } log_warning() { echo -e "${YELLOW}[WARNING]${NC} $1"; } log_error() { echo -e "${RED}[ERROR]${NC} $1"; } # Configuration BOOTSTRAP_URL="wss://dev3.4nkweb.com/ws/" TEST_ADDRESS="tsp1qqgmwp9n5p9ujhq2j6cfqe4jpkyu70jh9rgj0pwt3ndezk2mrlvw6jqew8fhsulewzglfr7g2aa48wyj4n0r7yasa3fm666vda8984ke8tuaf9m89" # Fonction de test de connectivité WebSocket test_websocket_connectivity() { local url="$1" local timeout="${2:-10}" log "Test de connectivité WebSocket vers $url (timeout: ${timeout}s)..." if command -v wscat >/dev/null 2>&1; then # Test avec wscat local test_message='{"type":"faucet","address":"'$TEST_ADDRESS'"}' if timeout "$timeout" wscat -c "$url" -x "$test_message" >/dev/null 2>&1; then log_success "Connexion WebSocket réussie vers $url" return 0 else log_error "Échec de la connexion WebSocket vers $url" return 1 fi else log_warning "wscat non installé, test de connectivité basique..." # Test basique avec curl (pour les endpoints HTTP) local http_url=$(echo "$url" | sed 's/wss:/https:/' | sed 's/ws:/http:/') if curl -f -s --connect-timeout "$timeout" "$http_url" >/dev/null 2>&1; then log_success "Endpoint HTTP accessible : $http_url" return 0 else log_error "Endpoint HTTP inaccessible : $http_url" return 1 fi fi } # Fonction de test de connectivité réseau test_network_connectivity() { local host="$1" local port="$2" local timeout="${3:-5}" log "Test de connectivité réseau vers $host:$port (timeout: ${timeout}s)..." if timeout "$timeout" bash -c "/dev/null; then log_success "Port $port accessible sur $host" return 0 else log_error "Port $port inaccessible sur $host" return 1 fi } # Fonction de vérification des fonds du relai check_relay_funds() { log "Vérification des fonds du relai local..." if docker ps | grep -q sdk_relay; then local outputs_count=$(docker exec sdk_relay cat /home/bitcoin/.4nk/default 2>/dev/null | jq '.outputs | length' 2>/dev/null || echo "0") if [ "$outputs_count" -gt 0 ]; then log_success "Relai local a $outputs_count sortie(s) (fonds disponibles)" return 0 else log_warning "Relai local n'a pas de fonds (0 sorties)" return 1 fi else log_error "Conteneur sdk_relay non trouvé" return 1 fi } # Fonction de vérification de l'adresse SP check_sp_address() { log "Vérification de l'adresse SP du relai..." if docker ps | grep -q sdk_relay; then local sp_address=$(docker exec sdk_relay cat /home/bitcoin/.4nk/default 2>/dev/null | jq -r '.sp_address' 2>/dev/null || echo "null") if [ "$sp_address" != "null" ] && [ -n "$sp_address" ]; then log_success "Adresse SP trouvée : $sp_address" return 0 else log_warning "Aucune adresse SP trouvée" return 1 fi else log_error "Conteneur sdk_relay non trouvé" return 1 fi } # Fonction de test du faucet test_faucet() { log "Test du faucet bootstrap..." if command -v wscat >/dev/null 2>&1; then local faucet_message='{"type":"faucet","address":"'$TEST_ADDRESS'"}' log "Envoi de la requête faucet..." local response=$(timeout 15 wscat -c "$BOOTSTRAP_URL" -x "$faucet_message" 2>/dev/null || echo "") if [ -n "$response" ]; then log_success "Réponse reçue du faucet : $response" # Vérifier si la réponse contient des données de transaction if echo "$response" | grep -q "NewTx\|tx_hex\|tweak_data"; then log_success "Faucet fonctionnel - données de transaction reçues" return 0 else log_warning "Faucet répond mais sans données de transaction" return 1 fi else log_error "Aucune réponse du faucet" return 1 fi else log_warning "wscat non installé, impossible de tester le faucet" return 1 fi } # Fonction principale main() { log "=== Vérification de la connectivité bootstrap WebSocket ===" local errors=0 # 1. Test de connectivité réseau log "1. Test de connectivité réseau..." test_network_connectivity "dev3.4nkweb.com" "443" || ((errors++)) test_network_connectivity "dev3.4nkweb.com" "9090" || ((errors++)) # 2. Test de connectivité WebSocket log "2. Test de connectivité WebSocket..." test_websocket_connectivity "$BOOTSTRAP_URL" || ((errors++)) # 3. Test du faucet log "3. Test du faucet..." test_faucet || ((errors++)) # 4. Vérification des fonds du relai log "4. Vérification des fonds du relai..." check_relay_funds || ((errors++)) # 5. Vérification de l'adresse SP log "5. Vérification de l'adresse SP..." check_sp_address || ((errors++)) # Résumé echo "" if [ $errors -eq 0 ]; then log_success "=== Tous les tests de connectivité bootstrap ont réussi ===" log_success "Le bootstrap WebSocket est fonctionnel et le relai peut recevoir des fonds" exit 0 else log_error "=== $errors test(s) ont échoué ===" log_error "Le bootstrap WebSocket nécessite une attention" exit 1 fi } # Exécution du script main "$@"