From f01a5d6cf43d0616e62242d0dad7089b617cccce Mon Sep 17 00:00:00 2001 From: minibits-cash Date: Wed, 27 Nov 2024 12:06:55 +0100 Subject: [PATCH] Fix: Improve stability of wallet topup transaction --- package.json | 2 +- src/services/walletService.ts | 48 +++++++++++++++++++++++++++-------- 2 files changed, 39 insertions(+), 11 deletions(-) diff --git a/package.json b/package.json index c50678d1..b83a8526 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "minibits_wallet", - "version": "0.1.9-beta.38", + "version": "0.1.9-beta.39", "private": true, "scripts": { "android:clean": "cd android && ./gradlew clean", diff --git a/src/services/walletService.ts b/src/services/walletService.ts index 40969a3f..5667813d 100644 --- a/src/services/walletService.ts +++ b/src/services/walletService.ts @@ -1282,17 +1282,45 @@ const _handlePendingTopupTask = async function (params: {paymentRequest: Payment ) let proofs: ProofV3[] = [] - - proofs = (await walletStore.mintProofs( - mintUrl as string, - amount, - unit, - mintQuote, - { - preference: amountPreferences, - counter: lockedProofsCounter.inFlightFrom as number + + try { + proofs = (await walletStore.mintProofs( + mintUrl as string, + amount, + unit, + mintQuote, + { + preference: amountPreferences, + counter: lockedProofsCounter.inFlightFrom as number + } + )) as ProofV3[] + } catch (e: any) { + if(e.message.includes('outputs have already been signed before')) { + + log.error('[_handlePendingTopupTask] Increasing proofsCounter outdated values and repeating mintProofs.') + lockedProofsCounter.resetInFlight(transactionId) + lockedProofsCounter.increaseProofsCounter(10) + lockedProofsCounter = await WalletUtils.lockAndSetInFlight( + mintInstance, + unit, + countOfInFlightProofs, + transactionId + ) + + proofs = (await walletStore.mintProofs( + mintUrl as string, + amount, + unit, + mintQuote, + { + preference: amountPreferences, + counter: lockedProofsCounter.inFlightFrom as number + } + )) as ProofV3[] + } else { + throw e } - )) as ProofV3[] + } lockedProofsCounter.decreaseProofsCounter(countOfInFlightProofs)