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) {
|
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];
|
const largestUtxo = availableUtxos[0];
|
||||||
|
|
||||||
// Suggérer des solutions dans le message d'erreur
|
// Suggérer des solutions dans le message d'erreur
|
||||||
@ -535,7 +563,7 @@ class BitcoinRPC {
|
|||||||
if (shortfall > 0) {
|
if (shortfall > 0) {
|
||||||
suggestion = ` Total available from all ${availableUtxos.length} UTXOs: ${totalAvailable.toFixed(8)} BTC. ` +
|
suggestion = ` Total available from all ${availableUtxos.length} UTXOs: ${totalAvailable.toFixed(8)} BTC. ` +
|
||||||
`Shortfall: ${shortfall.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 {
|
} else {
|
||||||
suggestion = ` All ${availableUtxos.length} available UTXOs total ${totalAvailable.toFixed(8)} BTC, which should be sufficient. ` +
|
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.`;
|
`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
|
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
|
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
|
## Solutions Recommandées
|
||||||
|
|
||||||
Si le problème persiste malgré ces améliorations :
|
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é
|
- Activer le mining si désactivé
|
||||||
- Attendre que les blocs soient minés et confirmés
|
- 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
|
## Pages Affectées
|
||||||
|
|
||||||
- `api-anchorage/src/bitcoin-rpc.js` :
|
- `api-anchorage/src/bitcoin-rpc.js` :
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user