**Motivations:** - Synchronisation des modifications sur l'API anchorage, les services et le website skeleton - Ajout de scripts de monitoring et de diagnostic pour l'API anchorage - Documentation des problèmes de mutex et de provisioning UTXO **Root causes:** - N/A (commit de synchronisation) **Correctifs:** - N/A (commit de synchronisation) **Evolutions:** - Ajout de scripts de monitoring et de diagnostic pour l'API anchorage - Amélioration de la gestion des mutex et des UTXOs - Mise à jour de la documentation **Pages affectées:** - api-anchorage/src/bitcoin-rpc.js - api-anchorage/src/routes/anchor.js - api-anchorage/src/routes/health.js - api-anchorage/src/server.js - api-anchorage/README-MONITORING.md - api-anchorage/cleanup-stale-locks.mjs - api-anchorage/diagnose.mjs - api-anchorage/unlock-utxos.mjs - service-login-verify/src/persistentNonceCache.ts - signet-dashboard/src/server.js - signet-dashboard/public/* - userwallet/src/hooks/useChannel.ts - userwallet/src/services/relayNotificationService.ts - userwallet/src/utils/defaultContract.ts - website-skeleton/src/* - docs/DOMAINS_AND_PORTS.md - docs/INTERFACES.md - features/* - fixKnowledge/*
7.1 KiB
7.1 KiB
API d'Ancrage - Monitoring et Prévention des Blocages
Date: 2026-01-28 Auteur: Équipe 4NK
Objectif
Implémenter des moyens de contrôle et de correction pour prévenir et résoudre les blocages du mutex et des UTXOs verrouillés dans l'API d'ancrage.
Motivations
- Prévention des blocages: Éviter que le mutex reste bloqué indéfiniment
- Détection précoce: Identifier les problèmes avant qu'ils n'affectent les utilisateurs
- Récupération automatique: Déverrouiller automatiquement les UTXOs verrouillés depuis trop longtemps
- Robustesse: Gérer les timeouts RPC Bitcoin avec retry et backoff
- Observabilité: Fournir des endpoints de monitoring détaillés
Impacts
Fonctionnels
- Endpoint
/health/detailed: Fournit un état détaillé du mutex, des UTXOs et de la connexion Bitcoin - Déverrouillage automatique: Les UTXOs verrouillés depuis > 10 minutes sont automatiquement déverrouillés au démarrage
- Timeout de sécurité: Le mutex est automatiquement libéré après 5 minutes maximum
- Retry avec backoff: Les appels RPC Bitcoin sont automatiquement réessayés en cas de timeout
- Monitoring de durée: Les opérations > 30 secondes sont loggées avec un warning
Techniques
- Timeout sur Promise.all(): La génération d'adresses a un timeout de 30 secondes
- État du mutex: Suivi en temps réel de l'état du mutex (locked, waiting)
- Scripts de maintenance: Scripts pour diagnostic et nettoyage automatique
- Documentation: Documentation complète du monitoring et de la maintenance
Modifications
Fichiers modifiés
-
api-anchorage/src/routes/health.js- Ajout de l'endpoint
/health/detailedavec état du mutex et UTXOs - Vérification des UTXOs verrouillés depuis > 10 minutes
- Codes de statut adaptatifs selon l'état
- Ajout de l'endpoint
-
api-anchorage/src/bitcoin-rpc.js- Ajout de
getMutexState()pour exposer l'état du mutex - Suivi de l'état du mutex (
utxoMutexLocked,utxoMutexWaiting) - Timeout de sécurité de 5 minutes sur le mutex dans
createAnchorTransaction() - Timeout de 30 secondes sur
Promise.all()pour la génération d'adresses - Méthode
callRPCWithRetry()pour retry avec backoff exponentiel - Méthode
callRPCCommandWithRetry()pour les commandes RPC - Tous les appels RPC critiques utilisent maintenant le retry avec backoff
- Monitoring de la durée des opérations avec alerte si > 30s
- Ajout de
-
api-anchorage/src/server.js- Déverrouillage automatique des UTXOs verrouillés depuis > 10 minutes au démarrage
- Exclusion de
/health/detailedde l'authentification API Key - Mise à jour de la liste des endpoints dans la route racine
-
api-anchorage/cleanup-stale-locks.mjs(nouveau)- Script pour déverrouiller les UTXOs verrouillés depuis > 10 minutes
- À exécuter via cron job toutes les 5 minutes
-
api-anchorage/diagnose.mjs(nouveau)- Script de diagnostic complet de l'état des UTXOs
- Affiche les UTXOs verrouillés avec leur durée de verrouillage
- Statistiques générales des UTXOs
-
signet-dashboard/public/api-docs.html- Ajout de la documentation de l'endpoint
/health/detailed - Mise à jour de la liste des endpoints publics
- Correction de l'URL de l'API d'ancrage (anchorage.certificator.4nkweb.com)
- Ajout de la documentation de l'endpoint
-
docs/INTERFACES.md- Ajout de la documentation de l'endpoint
/health/detailed - Mise à jour de la liste des endpoints
- Ajout de la documentation de l'endpoint
-
api-anchorage/README-MONITORING.md(nouveau)- Documentation complète du monitoring et de la maintenance
- Procédures de dépannage
- Configuration des cron jobs
Appels RPC mis à jour avec retry
getNewAddress()→callRPCWithRetry('getNewAddress', [])getBalance()→callRPCWithRetry('getBalance', [])checkConnection()→callRPCWithRetry('getNetworkInfo', [])etcallRPCWithRetry('getBlockchainInfo', [])listunspent()→callRPCWithRetry('listunspent', [...])createrawtransaction→callRPCCommandWithRetry('createrawtransaction', ...)signrawtransactionwithwallet→callRPCCommandWithRetry('signrawtransactionwithwallet', ...)sendrawtransaction→callRPCCommandWithRetry('sendrawtransaction', ...)getmempoolentry→callRPCCommandWithRetry('getmempoolentry', ...)getTransaction()→callRPCWithRetry('getTransaction', [...])getRawTransaction()→callRPCWithRetry('getRawTransaction', [...])getTransactionInfo()→ UtilisecallRPCWithRetry()pour tous les appels
Modalités de déploiement
1. Redémarrage du service
sudo systemctl restart anchorage-api
2. Vérification
# Health check détaillé
curl http://localhost:3010/health/detailed
# Depuis l'extérieur
curl https://anchorage.certificator.4nkweb.com/health/detailed
3. Configuration du cron job (optionnel mais recommandé)
Créer /etc/cron.d/anchorage-cleanup:
# Nettoyage automatique des UTXOs verrouillés depuis plus de 10 minutes
# Toutes les 5 minutes
*/5 * * * * ncantu cd /home/ncantu/Bureau/code/bitcoin/api-anchorage && /usr/bin/node cleanup-stale-locks.mjs >> /var/log/anchorage-cleanup.log 2>&1
4. Test des scripts
# Diagnostic
cd /home/ncantu/Bureau/code/bitcoin/api-anchorage
node diagnose.mjs
# Nettoyage
node cleanup-stale-locks.mjs
# Déverrouillage manuel
node unlock-utxos.mjs
Modalités d'analyse
Endpoints de monitoring
-
GET
/health/detailed- Vérifier l'état du mutex (
locked,waiting) - Vérifier le nombre d'UTXOs verrouillés
- Vérifier les UTXOs verrouillés depuis > 10 minutes (
stale_locks) - Vérifier la connexion Bitcoin
- Vérifier l'état du mutex (
-
GET
/api/anchor/locked-utxos- Liste complète des UTXOs verrouillés
- Compteur total
Logs à surveiller
-
Timeouts de mutex:
sudo journalctl -u anchorage-api | grep "Mutex acquisition timeout" -
Opérations longues:
sudo journalctl -u anchorage-api | grep "took too long" -
Erreurs RPC Bitcoin:
sudo journalctl -u anchorage-api | grep "ESOCKETTIMEDOUT\|ETIMEDOUT" -
Retry RPC:
sudo journalctl -u anchorage-api | grep "RPC call failed, retrying"
Scripts de diagnostic
diagnose.mjs: Diagnostic complet de l'état des UTXOscleanup-stale-locks.mjs: Nettoyage automatique des UTXOs staleunlock-utxos.mjs: Déverrouillage manuel de tous les UTXOs
Pages affectées
api-anchorage/src/routes/health.js: Endpoint/health/detailedapi-anchorage/src/bitcoin-rpc.js: Monitoring, timeouts, retry avec backoffapi-anchorage/src/server.js: Déverrouillage automatique au démarrageapi-anchorage/cleanup-stale-locks.mjs: Script de nettoyage (nouveau)api-anchorage/diagnose.mjs: Script de diagnostic (nouveau)api-anchorage/README-MONITORING.md: Documentation (nouveau)signet-dashboard/public/api-docs.html: Documentation API mise à jourdocs/INTERFACES.md: Documentation API mise à jourfeatures/api-anchorage-monitoring-and-prevention.md: Documentation (nouveau)