From b17387664caf689e1c2034a9066fd00da121c528 Mon Sep 17 00:00:00 2001 From: ncantu Date: Wed, 28 Jan 2026 15:17:54 +0100 Subject: [PATCH] Add automatic provisioning reduction when funds are insufficient MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit **Motivations:** - Permettre l'ancrage même si les fonds sont insuffisants pour le provisioning complet - Réduire automatiquement le provisioning si nécessaire au lieu d'échouer - Garantir qu'un ancrage minimal peut toujours être créé si les fonds sont suffisants **Root causes:** - Le système échouait si les fonds étaient insuffisants pour le provisioning complet (7 UTXOs) - Aucune logique de fallback pour réduire le provisioning ou permettre un ancrage minimal - Les utilisateurs devaient manuellement réduire le provisioning ou obtenir plus de fonds **Correctifs:** - Ajout d'une logique de réduction automatique du provisioning si les fonds sont insuffisants - Réduction progressive : 7 → 6 → 5 → 4 → 3 → 2 → 1 → 0 UTXOs de provisioning - En dernier recours, permet un ancrage sans provisioning (juste l'ancrage du hash) - Récursion avec provisioning réduit si l'essai initial échoue **Evolutions:** - Le système essaie maintenant automatiquement avec un provisioning réduit si nécessaire - L'ancrage est toujours créé si les fonds sont suffisants pour au moins l'ancrage minimal - Les logs indiquent quand le provisioning est réduit automatiquement **Pages affectées:** - api-anchorage/src/bitcoin-rpc.js - fixKnowledge/api-anchorage-utxo-robustness-improvements.md --- api-anchorage/src/bitcoin-rpc.js | 30 ++++++++++++++++++- ...-anchorage-utxo-robustness-improvements.md | 14 +++++++-- 2 files changed, 41 insertions(+), 3 deletions(-) diff --git a/api-anchorage/src/bitcoin-rpc.js b/api-anchorage/src/bitcoin-rpc.js index eef9a6f..2779476 100644 --- a/api-anchorage/src/bitcoin-rpc.js +++ b/api-anchorage/src/bitcoin-rpc.js @@ -527,6 +527,34 @@ class BitcoinRPC { } if (totalSelectedAmount < finalTotalNeeded) { + // Si les fonds sont insuffisants, essayer de réduire le provisioning progressivement + // Ne réduire que si numberOfProvisioningUtxos n'a pas été explicitement fourni + if (numberOfProvisioningUtxos === null && provisioningCount > 0) { + logger.info('Insufficient funds for full provisioning, trying with reduced provisioning', { + currentProvisioning: provisioningCount, + totalAvailable: totalAvailable, + required: finalTotalNeeded, + }); + + // Essayer avec un provisioning réduit (récursion) + // Réduire progressivement : 7 -> 6 -> 5 -> 4 -> 3 -> 2 -> 1 -> 0 + const reducedProvisioning = Math.max(0, provisioningCount - 1); + logger.info('Retrying with reduced provisioning', { + newProvisioning: reducedProvisioning, + hash: hash.substring(0, 16) + '...', + }); + + // Libérer le mutex avant la récursion + releaseMutex(); + if (mutexSafetyTimeout) { + clearTimeout(mutexSafetyTimeout); + } + + // Réessayer avec provisioning réduit + return this.createAnchorTransaction(hash, recipientAddress, null, reducedProvisioning, retryCount); + } + + // Si on ne peut pas réduire le provisioning ou si on est déjà à 0, échouer const largestUtxo = availableUtxos[0]; // Suggérer des solutions dans le message d'erreur @@ -535,7 +563,7 @@ class BitcoinRPC { if (shortfall > 0) { suggestion = ` Total available from all ${availableUtxos.length} UTXOs: ${totalAvailable.toFixed(8)} BTC. ` + `Shortfall: ${shortfall.toFixed(8)} BTC. ` + - `Solutions: 1) Use faucet to get more funds, 2) Mine more blocks, 3) Consolidate UTXOs via dashboard, 4) Reduce provisioning count.`; + `Solutions: 1) Use faucet to get more funds, 2) Mine more blocks, 3) Consolidate UTXOs via dashboard.`; } else { suggestion = ` All ${availableUtxos.length} available UTXOs total ${totalAvailable.toFixed(8)} BTC, which should be sufficient. ` + `This may be a fee estimation issue. Consider consolidating UTXOs via dashboard to create larger UTXOs.`; diff --git a/fixKnowledge/api-anchorage-utxo-robustness-improvements.md b/fixKnowledge/api-anchorage-utxo-robustness-improvements.md index 3813c2e..ac79e23 100644 --- a/fixKnowledge/api-anchorage-utxo-robustness-improvements.md +++ b/fixKnowledge/api-anchorage-utxo-robustness-improvements.md @@ -200,6 +200,18 @@ Pour éviter ce problème à l'avenir : 3. **Messages d'erreur informatifs** : Inclure des suggestions de solutions dans les messages d'erreur 4. **Consolidation automatique** : Considérer l'ajout d'une consolidation automatique des UTXOs quand ils deviennent trop nombreux +## Solutions Automatiques + +Le système réduit maintenant automatiquement le provisioning si les fonds sont insuffisants : + +1. **Réduction automatique du provisioning** : Si les fonds sont insuffisants pour le provisioning complet (7 UTXOs), le système essaie automatiquement avec un provisioning réduit (6, 5, 4, 3, 2, 1, 0) +2. **Ancrage minimal** : En dernier recours, le système permet un ancrage sans provisioning (juste l'ancrage du hash) + +**Comportement** : +- Essai initial avec provisioning complet (7 UTXOs par défaut) +- Si échec, réduction progressive jusqu'à 0 UTXO de provisioning +- L'ancrage est toujours créé si les fonds sont suffisants pour au moins l'ancrage minimal + ## Solutions Recommandées Si le problème persiste malgré ces améliorations : @@ -216,8 +228,6 @@ Si le problème persiste malgré ces améliorations : - Activer le mining si désactivé - Attendre que les blocs soient minés et confirmés -4. **Réduire le provisioning** : Réduire le nombre d'UTXOs de provisioning (modifier le code si nécessaire) - ## Pages Affectées - `api-anchorage/src/bitcoin-rpc.js` :