**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/*
56 lines
1.8 KiB
JavaScript
Executable File
56 lines
1.8 KiB
JavaScript
Executable File
#!/usr/bin/env node
|
|
|
|
/**
|
|
* Script de diagnostic pour l'API d'ancrage
|
|
* Affiche l'état des UTXOs verrouillés, leur durée de verrouillage, etc.
|
|
*/
|
|
|
|
import { getDatabase } from './src/database.js';
|
|
|
|
const db = getDatabase();
|
|
|
|
// UTXOs verrouillés
|
|
const locked = db.prepare(`
|
|
SELECT txid, vout, address, amount, updated_at,
|
|
(julianday('now') - julianday(updated_at)) * 24 * 60 as minutes_locked
|
|
FROM utxos
|
|
WHERE is_locked_in_mutex = 1
|
|
ORDER BY updated_at
|
|
`).all();
|
|
|
|
console.log(`\n📊 UTXOs verrouillés: ${locked.length}`);
|
|
|
|
if (locked.length > 0) {
|
|
console.log('\nDétails des UTXOs verrouillés:');
|
|
locked.forEach((u, index) => {
|
|
const minutes = Math.round(u.minutes_locked * 100) / 100;
|
|
const status = minutes > 10 ? '⚠️ STALE' : '🔒';
|
|
console.log(`${status} [${index + 1}] ${u.txid.substring(0, 16)}... vout:${u.vout} amount:${u.amount} locked_for:${minutes}min`);
|
|
});
|
|
}
|
|
|
|
// UTXOs verrouillés depuis plus de 10 minutes
|
|
const stale = locked.filter(u => u.minutes_locked > 10);
|
|
if (stale.length > 0) {
|
|
console.log(`\n⚠️ UTXOs verrouillés depuis plus de 10 minutes: ${stale.length}`);
|
|
console.log(' Action recommandée: Exécuter cleanup-stale-locks.mjs');
|
|
}
|
|
|
|
// Statistiques générales
|
|
const stats = db.prepare(`
|
|
SELECT
|
|
COUNT(*) as total,
|
|
SUM(CASE WHEN is_locked_in_mutex = 1 THEN 1 ELSE 0 END) as locked,
|
|
SUM(CASE WHEN is_spent_onchain = 1 THEN 1 ELSE 0 END) as spent,
|
|
SUM(CASE WHEN is_spent_onchain = 0 AND is_locked_in_mutex = 0 AND confirmations > 0 THEN 1 ELSE 0 END) as available
|
|
FROM utxos
|
|
`).get();
|
|
|
|
console.log(`\n📈 Statistiques UTXOs:`);
|
|
console.log(` Total: ${stats.total}`);
|
|
console.log(` Verrouillés: ${stats.locked}`);
|
|
console.log(` Dépensés: ${stats.spent}`);
|
|
console.log(` Disponibles: ${stats.available}`);
|
|
|
|
db.close();
|