lecoffre_node/scripts/rex/verify_bootstrap_connectivity.sh

191 lines
5.8 KiB
Bash
Executable File

#!/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/tcp/$host/$port" 2>/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 "$@"