Fix: Locked values of recovery indexes not updated when receive transaction throws an exception

This commit is contained in:
minibits-cash
2024-11-27 10:46:33 +01:00
parent a19a1f8087
commit dfe96474ab
4 changed files with 16 additions and 6 deletions
+1 -1
View File
@@ -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",
+2 -1
View File
@@ -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
+10 -3
View File
@@ -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 {
+3 -1
View File
@@ -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