diff --git a/package.json b/package.json index 29c2ab09..c50678d1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "minibits_wallet", - "version": "0.1.9-beta.37", + "version": "0.1.9-beta.38", "private": true, "scripts": { "android:clean": "cd android && ./gradlew clean", diff --git a/src/services/wallet/nwcTransferTask.ts b/src/services/wallet/nwcTransferTask.ts index f003626a..02c8ec38 100644 --- a/src/services/wallet/nwcTransferTask.ts +++ b/src/services/wallet/nwcTransferTask.ts @@ -243,7 +243,8 @@ export const nwcTransferTask = async function ( } // spend pending proofsToMeltFrom reserved for transaction - // only after receive passed, in case of exception they remain pending + // only after rhe receive passed, in case of exception they remain pending + // and are sorted out by syncStateWithMintSync method proofsStore.removeProofs(proofsToMeltFrom as Proof[], true, false) // Save final fee in db diff --git a/src/services/wallet/receiveTask.ts b/src/services/wallet/receiveTask.ts index 9a7676dc..b2d0f7ff 100644 --- a/src/services/wallet/receiveTask.ts +++ b/src/services/wallet/receiveTask.ts @@ -480,16 +480,23 @@ export const receiveSync = async function ( if(e.message.includes('outputs have already been signed before')) { log.error('[receiveSync] Increasing proofsCounter outdated values and repeating receiveSync.') + lockedProofsCounter.resetInFlight(transactionId) + lockedProofsCounter.increaseProofsCounter(10) + lockedProofsCounter = await WalletUtils.lockAndSetInFlight( + mintInstance, + unit, + countOfInFlightProofs, + transactionId + ) - lockedProofsCounter.increaseProofsCounter(10) receivedResult = await walletStore.receive( mintToReceive, unit as MintUnit, token, swapFeeReserve, { - preference: amountPreferences, - counter: lockedProofsCounter.inFlightFrom as number // MUST be counter value before increase + preference: amountPreferences, + counter: lockedProofsCounter.inFlightFrom as number } ) } else { diff --git a/src/services/walletService.ts b/src/services/walletService.ts index a948c5aa..40969a3f 100644 --- a/src/services/walletService.ts +++ b/src/services/walletService.ts @@ -650,7 +650,9 @@ const _syncStateWithMintTask = async function ( isPending }) - if (unspentByMintProofs.length > 0) { + // If some of the pending by wallet proofs neither pending nor spent by mint + // can happen in nwcTransfer if lightning payment succeeds but then receive of returned token fails + if (unspentByMintProofs.length > 0 && isPending) { // remove it from pending proofs in the wallet proofsStore.removeProofs(unspentByMintProofs as Proof[], true, true) // add proofs back to the spendable wallet