191 lines
5.8 KiB
Bash
Executable File
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 "$@"
|
|
|
|
|
|
|