Add automatic provisioning reduction when funds are insufficient
**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
This commit is contained in:
parent
1090e39a8a
commit
b17387664c
@ -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.`;
|
||||
|
||||
@ -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` :
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user