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` :