Improve UTXO cache format handling for backward compatibility

**Motivations:**
- Le cache UTXO existant a l'ancien format (seulement la date)
- Le code ne gérait pas correctement l'ancien format
- Nécessité de gérer la transition entre ancien et nouveau format

**Root causes:**
- Le cache UTXO avait l'ancien format <date> au lieu de <date>;<hauteur>
- Le code lisait parts[1] qui était undefined pour l'ancien format
- Cela causait une détection permanente de nouveaux blocs

**Correctifs:**
- Amélioration du code de lecture pour gérer l'ancien format (1 partie) et le nouveau format (2 parties)
- Détection automatique de l'ancien format et mise à jour forcée pour réécrire avec le bon format
- Validation de la hauteur pour éviter les valeurs invalides

**Evolutions:**
- Compatibilité avec l'ancien format du cache
- Migration automatique vers le nouveau format lors de la prochaine mise à jour
- Meilleure robustesse du code de lecture du cache

**Pages affectées:**
- signet-dashboard/src/bitcoin-rpc.js : Méthode getUtxoList()
This commit is contained in:
ncantu 2026-01-26 00:42:47 +01:00
parent 5186d1fab9
commit bb28499e3f

View File

@ -415,18 +415,35 @@ class BitcoinRPC {
try {
const cacheContent = readFileSync(cachePath, 'utf8').trim();
const parts = cacheContent.split(';');
if (parts.length >= 1) {
const cachedHeight = parseInt(parts[1], 10) || 0;
if (cachedHeight < currentHeight) {
needsUpdate = true;
logger.info('New blocks detected, updating UTXO list', {
cachedHeight,
currentHeight,
newBlocks: currentHeight - cachedHeight,
});
// Format attendu : <date>;<hauteur> (2 parties)
// Format ancien : <date> (1 partie) - nécessite une mise à jour
if (parts.length === 2) {
// Nouveau format avec hauteur
const cachedHeight = parseInt(parts[1], 10);
if (!isNaN(cachedHeight) && cachedHeight >= 0) {
if (cachedHeight < currentHeight) {
needsUpdate = true;
logger.info('New blocks detected, updating UTXO list', {
cachedHeight,
currentHeight,
newBlocks: currentHeight - cachedHeight,
});
} else {
logger.debug('UTXO list up to date, no RPC call needed', { currentHeight });
}
} else {
logger.debug('UTXO list up to date, no RPC call needed', { currentHeight });
// Hauteur invalide, forcer la mise à jour
logger.warn('Invalid height in UTXO cache, forcing update');
needsUpdate = true;
}
} else if (parts.length === 1) {
// Ancien format sans hauteur, forcer la mise à jour pour réécrire avec le bon format
logger.info('Old UTXO cache format detected (without height), forcing update to rewrite cache');
needsUpdate = true;
} else {
// Format inattendu, forcer la mise à jour
logger.warn('Unexpected UTXO cache format, forcing update', { partsCount: parts.length });
needsUpdate = true;
}
} catch (error) {
logger.warn('Error reading UTXO cache', { error: error.message });